函数
-
函数的本质
函数可以看成是工具,定义好以后,遇到需求相似功能代码时反复使用函数就行了
而不用函数,每次遇到相同的需求都要重新编写函数里的代码 -
函数的语法结构
def 函数名(参数): """注释""" 函数体代码 return
- def:定义函数的关键字
- 函数名:类似于变量名,也要尽量见名之意
- 参数:在括号内传入零个或多个参数,用于接收外部传递给函数内部的数据,不论有没有函数,括号都必不可少
- 注释:用于说明函数的作用和返回值
- 函数体代码:这里就是调用函数后执行的代码
- return:用以控制函数的返回值
-
函数的定义与调用
# 1. 函数要先定义后调用 fn() # NameError:名称“fn”没有定义 def fn(): pass fn() # 在定义函数后调用就不会报错 # 2. 定义函数使用关键字def,函数名和括号 def fn: # SyntaxError:无效语法 必须要加上括号 pass # 3. 函数在定义时只会检查语法,不会执行代码 def fn(): if # 这里也会保无效语法错误 def fn(): abc # 这里语法通过检测,不会报错 def fn(): abc fn() # 只有在执行时才会报错,名称'abc'没有定义 # 4.函数名:函数名就类似于变量名,绑定一个内存地址,里边存放函数体代码 # 不过想要运行代码,需要使用函数名加括号
-
函数的分类
1. 内置函数: 解释器提前定义好的函数,可以直接调用 2. 自定义函数: 1. 空函数:函数体代码使用pass顶替,没有任何功能 def fn(): pass 2. 无参函数:定义函数是括号内没有添加参数 def fn(): print('无参函数') 3. 有参函数:定义函数时括号内添加了参数 def fn(a): print(a)
-
函数的返回值
返回值就是调用函数完毕后返回给外界的值# 返回值使用return关键字,如果没有使用则默认返回None def fn(): pass res = fn() print(res) # None # 若只使用return关键字,还是返回默认值None def fn(): return res = fn() print(res) # None # 在return关键字后添加了数据值,则返回这个数据值 def fn(): a = 1 return a res = fn() print(res) # 1 # 如果在return后添加多个数据值,则返回数据值组成的元组 def fn(): return 1, 2, 3, 4, 5 res = fn() print(res) # (1, 2, 3, 4, 5) # 在使用return后直接结束函数体代码,return后的代码就不再执行 def fn(): print('return前') return print('return后') fn() # return前
-
函数的参数
-
形参和实参
- 形参:形式参数,在定义函数时在括号内填写的参数(相当于变量名)
- 实参:实际参数,在调用函数时在括号内填写的参数(相当于数据值)
-
位置参数
"""位置形参:在定义函数时在括号内从左到右依次填写的参数""" def fn(a, b, c): # 括号内的a,b,c就是位置形参 pass """位置实参:在调用函数时在括号内从左到右依次传入的参数""" def fn(a, b, c): pass fn(1, 2, 3) # 括号内的1, 2, 3就是位置实参 """位置参数必须要一一对应,不能多一个也不能少一个"""
-
关键字参数
关键字实参:在调用函数传参时,以形参名等于实参的方式传入被称为关键字实参def fn(a, b): print(a, b) fn(b=1, a=2) # 2 1 def fn(a, b): print(a, b) fn(a=2, 3) # SyntaxError:位置参数跟随关键字参数 """ 位置参数必须在关键字参数前""" def fn(a, b): print(a, b) fn(3, a=2) # TypeError:Fn()获得参数“a”的多个值 """一个参数只能传一次值"""
-
默认值参数
默认值形参:在定义函数时,以形参等于什么的方式填写的形参被称为默认值形参def fn(a, b, c=0): print(a, b, c) fn(1, 2) # 1 2 0, 如果没有给默认值形参传入参数,则使用默认参数 fn(1, 2, 3) # 1 2 3, 如果传入了值就使用传入的值 def fn(a=1, b, c): print(a, b, c) fn(1, 2, 3) # SyntaxError:非默认参数跟在默认参数后面 """和关键字相同,位置形参不能跟在默认值形参后"""
-
可变长参数
可变长参数:可以接收任意数量的实参传入def fn(*args): print(args) fn() # () fn(1) # (1,) fn(1, 2, 3, 4, 5) # (1, 2, 3, 4, 5) fn([1, 2, 3], [4, 5, 6]) # ([1, 2, 3], [4, 5, 6]) """ *可以接收多余的位置实参,以元组的形式赋值给后边的变量名 """ def fn(**kwargs): print(kwargs) fn() # {} fn(a=1) # {'a': 1} fn(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3} """ **可以接收多余的关键字实参,以字典的形式赋值给后边的变量名 """ # *和**配合使用,可以接收所有参数 def fn(*args, **kwargs): print(args, kwargs) fn([1, 2, 3], [4, 5, 6], a=1, b=2, c=3) # ([1, 2, 3], [4, 5, 6]) {'a': 1, 'b': 2, 'c': 3}
-