python初识函数(2)
引言
今天继续认识函数,函数其实在以后的编程中,我们会经常用到,毕竟函数可以让我们的代码更加的简洁。

函数的定义与调用
-
函数一定要先定义好才可以使用
-
在定义阶段你只能看语法是否出错
-
只有调用函数的时候,函数体代码才会执行
-
函数名可以把它比作变量名,它指向的是内存中函数体代码所在的内存空间
注意:函数调用一定要记得是函数名加括号,要按照语法来进行调用,不然会报错
函数分类
函数主要分为内置函数和自定义函数,内置函数是python解释器已经给我们定义好了的,可以直接调用。自定义函数需要问我们自己编写,同时自定义函数还分为无参函数(在函数定义的时候括号内没写参数)、有参函数(在定义的时候括号内写了参数)、空函数(在定义阶段函数体代码用pass或者...来补全语法结构)。
空函数主要还是在前期使用的,用空函数快速罗列程序的大致功能,让程序能够更完整,用于前期框架搭建。
函数的返回值
函数的返回值是在调用函数后返回的结果,如果代码中没有return返回值就是None。有return但是没有跟任何值,那么也是None。有return且跟数据,那么跟的是什么数据就返回什么数据。如果return后面有多个值,用逗号隔开,那么返回一个元组。记住return类似于break,一旦看见立刻结束。
函数的参数
-
函数中参数分为两大类
1.1 函数在定义阶段括号内的参数称为形参
1.2 函数在调用阶段括号内些的参数叫实参
-
形参和实参的关系
形参类似于变量名、实参类似于变量值,在调用函数的时候,实参临时和形参进行绑定,函数运行完毕自动解绑。

参数
位置参数
位置形参指的是是在函数定义阶段括号内从左往右一次填写的变量名,位置实参指的是函数调用阶段括号内从左往右一次传入的真是数据。位置形参的特征,位置形参和位置实参的绑定顺序是从左往右依次绑定。位置形参和位置实参个数要相同,不然会报错。
def index(a, b):
print(a, b) # 外界传入什么实参这里就打印什么
# index(1,2)
# index('jason',123)
# index() # 调用的时候不传实参不可以
# index(111) # 传少了也不行
index(111,222,333) # 传多了也不行
关键字参数
在实参中,指名道姓的与形参绑定,不遵循位置的叫做关键字参数。
def index(a, b):
print(a, b)
index(b=111, a=222) # 指名道姓的说形参a接收数据222 b接收数据111
index(b=333,222) # 报错 关键字参数必须放在位置参数的后面
index(222,a=111) # 报错 形参只能指向一个实参
index(222,b=111) # 可以 相当于位置参数
默认参数
默认参数其实是在定义函数的时候已经给一些形参绑定变量值了,你在调用的时候入伙不给它传值,那么他就是默认的值,如果继续传值就是传入的值。默认的参数一定要定义在位置参数的后面,不然报错。
def register(name, age, gender='猛男'):
"""
函数的形参在命名的时候也应该见名知意
"""
print("""
学员姓名:%s
学员年龄:%s
学员性别:%s
""" % (name, age, gender))
register('jason', 18) # 不传就使用默认的
register('kevin', 28)
register('jerry',22,'美女') # 传了就使用自己的
可变长参数
在我们不知道要传多少实参的时候可以用可变长参数。单星号在形参中,可以接受多余的位置实参,并且组成元组类型赋值给单星号后面的变量名。双星号在性惨重,用于接收多余的关键字参数,组成字典的类型赋值给双星号后面的变量名,当你要定义一个无论接收多少任意类型的参数都可以执行的函数时,就要把单星号和双星号都用上,并且它们的变量名也是有推荐的。单星号和双星号还可以用在实参中,单星号用在实参中可以把列表或元组打散成位置参数一个一个传入。双星号可以把字典打散成关键字参数一个一个传入。
# 单星号
def func(*a):
print(a)
func() # ()
func(1,2) # (1, 2)
func(1,2,3,4,5,6) # (1, 2, 3, 4, 5, 6)
# 双星号
def index(a, b, **k):
print(a, b, k)
index(a=1, b=2) # 1 2 {}
index(a=1, b=2, c=3, name='jason') # 1 2 {'c': 3, 'name': 'jason'}
index(1,2,name='jason',age=18,pwd=123) # 1 2 {'name': 'jason', 'age': 18, 'pwd': 123}
# 推荐变量名
def index(*args, **kwargs):
pass
# 单星号实参
def index(*args, **kwargs):
print(args, kwargs)
# index(*['jason', 'kevin', 'tony', 'oscar', 'jerry']) # ('jason', 'kevin', 'tony', 'oscar', 'jerry') {}
# index(*('jason', 'kevin', 'tony', 'oscar', 'jerry')) # ('jason', 'kevin', 'tony', 'oscar', 'jerry') {}
# index(['jason', 'kevin', 'tony', 'oscar', 'jerry']) # (['jason', 'kevin', 'tony', 'oscar', 'jerry'],) {}
# 双星号实参
index(**{'name':'jason','age':18,'pwd':123}) # () {'name': 'jason', 'age': 18, 'pwd': 123}
index({'name':'jason','age':18,'pwd':123}) # ({'name': 'jason', 'age': 18, 'pwd': 123},) {}
