Python基础学习-函数和类(三)

1 函数

1.1 定义函数

#def 关键字定义函数,user_name函数名;如果需要传递参数就传递参数,如果不需要括号为空,最后以冒号结尾(英文形式)
def user_name():
    # 函数功能实现
    name = input("please input a name:")
    print("Hello,"+ name)
# 调用函数
user_name()

输出:

please input a name:张三
Hello,张三

1.2 传递参数

1.2.1 位置参数

位置参数中要求实参形参位置要一致,如下:

def user(user_name,user_type):
    print(user_name + " is a " + user_type)
user('LLC','Boy')

输出:

LLC is a Boy

这里如果将’LLC’和’Boy’两个参数反着放,那么结果就变成:

Boy is a LLC

1.2.2 关键字参数

关键字实 是传递给函数的名称—值对。你直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆。如下:

def user(user_name,user_type):
    print(user_name + " is a " + user_type)
user(user_type='Boy',user_name='LLC')

输出:

LLC is a Boy

这里即使参数位置发生了变化,输出结果也是跟预期的一样

1.2.3 默认值

给形参制定默认值,在传递参数的时候,如果有形参就用形参值,如果没有就用默认值。

def user(user_type,user_name='LLC'):
    print(user_name + " is a " + user_type)
user(user_type='Boy')

输出:

LLC is a Boy

注意:
在形参中必须先列出没有默认的形参,再列出有默认值的实参。

1.3 返回类型

对于函数的返回值是多样的,可以是简单的字符串,也可以值字典。函数就相当一个加工厂,参数就相当于一些原材料,返回值就是最后这个加工厂的产品,根据实际的要求,生产出不一样的产品。

1.4 传递任意数量的实参

有时候,你预先不知道函数需要接受多少个实参,Python允许函数从调用语句中收集任意数量的实参。
这里*形参名表示创建一个空元祖,将收到的所有值都封装到这个元组中。如下:

def user_name(*users):
    for user in users:
        print(user)

user_name("张三","李四","网二")

输出:

张三
李四
网二

如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参关键字实参,再将余下的实参都收集到最后一个形参中。如下:

def user_name(numbers,*users):
    print("下面是"+str(numbers)+"个人的姓名:")
    for user in users:
        print(user)

user_name(3,"张三","李四","网二")

输出:

下面是3个人的姓名:
张三
李四
网二

**形参名创建一个空字典,并将收到的所有名称—值对都封装到这个字典中,如下:

def user_name(first,last,**user_info):
    profile = {}
    profile['first_name'] = first
    profile['last_name']  = last
    for key,value in user_info.items():
        profile[key] = value
    return profile

user_profile = user_name("小刘","小张",second_name="小王",third_name="小红")
print(user_profile)

这里注意实参的写法,尤其是对后两个传递给形参字典的写法:键="值"

1.5 将函数存储在模块中

将函数存储在模块中,再通过模块导入到主程序中,或者其他程序中。
(1)导入整个模块
先创建一个模块,模块的扩展名为.py文件,包含要导入程序中的代码。
用法:
import 模块名
细节:
这就相当于把整个模块中的所有程序都赋值到这里;要调用模块中的函数,制定模块的名称和函数名,用.分隔他们
(2)导入特定函数
用法:
from 模块名 import 函数名1,函数名1,函数名1
(3)使用as给函数指定别名
用法:
from 函数名 import 函数名 as 别名
(4)使用as 给模块指定别名
用法:
import 模块名 as 别名
(5)导入模块中的所有函数
用法:
from 模块名 import *

2 类

2.1 创建和使用类

# 约定:首字母大写的名称指的是类
# 这个类定义中的括号是空的,因为从空白创建这个类,在后面我将学校继承这时候这个括号就不再是空的
class People():

    # 类中的函数称为方法,下面这个__init__是一个特殊的方法,每当创建实例时,Python将自动运行它。
    # 开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突
    # 形参self必不可少,还必须位于其他形参的前面
    # 为何必须在方法定义中包含形参self 呢?
    # 因为Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法
    # 调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
    # 它是一个指向实例本身的引用,让实例能够访问类中的属性和方法

    # 传递参数时,self是自动传递,只需给出后面的参数即可
    def __init__(self, name, age):
        # 获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例
        # 通过实例访问的变量称为属性
        self.name = name
        self.age = age
    # 只有一个形参self。后面将创建的实例能够访问这些方法
    def sit(self):
        print(self.name + "在写作业!")
        print(self.name + "已经有" + str(self.age) + "岁了。")
# 约定:首字母大写是名称指的是类,而小写的名称指的类创建的实例
# 方法__init__()并未显式地包含return语句,但Python自动返回一个表示的实例
people = People('隔壁老王',8)
# 访问属性
print(people.age)
# 调用方法
people.sit()

输出:

8
隔壁老王在写作业!
隔壁老王已经有8岁了。

2.2 修改类中的属性

(1)直接修改属性的值
(2)通过方法修改属性的值
如下:

class People():

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sit(self):
    	# 通过方法修改属性的值
        self.age = 30;
        print(self.age)
        print(self.name + "在写作业!")
        print(self.name + "已经有" + str(self.age) + "岁了。")

people = People('隔壁老王',8)
print(people.age)
# 直接修改属性的值
people.age = 20;
print(people.age)
people.sit()

输出:

8
20
30
隔壁老王在写作业!
隔壁老王已经有30岁了。

2.3 继承

一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

class People():

    def __init__(self,name,type):
        self.name = name
        self.type = type

    def get_information(self):
        print(self.name + "是一个" + self.type)

# 创建子类时,父类必须包含在当前文件中,且位于子类前面。

class Active():

    def __init__(self,active):
        self.active = active

class Man(People):

    # 定义子类时,必须在括号内指定父类的名称。方法__init__()接受创建Car实例所需的信息
    def __init__(self,name,type):
    #    super()是一个特殊函数,帮助Python将父类和子类关联起来,父类也称为超类
        super().__init__(name,type)
        # 给子类定义属性
        self.year = 20
        # 将实例用作属性
        self.act = Active('act-tion')
    #给子类定义方法
    def get_name(self):
        print(self.name)
    # 重写父类的方法,它与要重写的父类方法同名
    def get_information(self):
        print(self.name + "不是一个" + self.type)
        print(self.year)


people = Man('小王','男孩')
people.get_information()
people.get_name()
print(people.act.active)

输出:

小王不是一个男孩
20
小王
act-tion

2.4 导入类

(1)导入单个类
from 模块名 import 类名
(2)在一个模块中存储多个类
from 模块名 import 类名
(3)从一个模块中导入多个类
from 模块名 import 类名1,类名2
(4)导入整个模块
import 模块名
(5)导入模块中的所有类
from 模块名 import *
(6)在一个模块中导入另一个模块
from 模块名 import 类名

猜你喜欢

转载自blog.csdn.net/qq_42711815/article/details/88168361