函数是可以重复执行的语句块,可以重复调用并执行函数的面向过程编程的最小单位。
函数的作用:
函数用于封装语句块,提高代码的重用性,定义用户级别的函数、提高代码的可读性和易维护性。
函数的语法:
def 函数名(形参列表): 语句块作用:创建一个函数,将语句块打包,用函数名绑定,用来调用
说明:函数名的命名规则与变量名的命名规则相同(必须为标识符),函数名是一个变量,它用来绑定函数。函数有自己的命名空间,函数外部不可以访问函数内部的变量,函数内部可以访问函数外部的变量,但不能对外部变量赋值。语句块部分不能为空,如果为空需要填写pass语句
函数如果不需要传入参数,形参列表可以为空。
例子:
#此示例示意用def语句来定义函数 def say_hello(): print('hello world') print('hello 中国') 函数调用语法:
函数名(实际调用传递参数)说明:函数调用是一个表达式,如果函数内部没有return语句,函数执行完毕后返回None对象的引用
例子:
def say_hello(): print("hello world") print("hello 中国") #函数调用第一次 say_hello() #函数调用第二次 say_hello() #此示例示意用def语句定义函数 #函数外部的变量访问不了函数内部的变量 def say_hello(): a = 100 print("内部a是:",a) say_hello() #定义一个有参数的myadd函数 def myadd(a,b): print(a+b) myadd(1,2) myadd([1,2,3],[4,5,6]) return语句语法:
return [表达式] 注释:[]代表其中的内容可以省略作用:用于函数中,结束当前函数的执行,返回到调用该函数的地方,同时返回一个对象的引用关系
说明:
return语句后面的表达式可以省略,省略后相当于return None
函数内部没有return语句的,则该函数执行完最后一条语句后返回None
练习:
1.写一个函数mymax,实现返回三个最大的值
如:def mymax(a,b,c):
……….
print(mymax(1,2,3))#3
print(mymax(“ABC”,“abc”,“123”))#abc
#小白写法 def mymax(a,b,c): return max(a,b,c) print(mymax(1,2,3)) print(mymax("ABC","abc","123")) #经典写法 def mymax(a,b,c): zuida = a if b > zuida: zuida = b if c > zuida: zuida = c return zuida print(mymax(1,2,3)) print(mymax("ABC","abc","123")) 函数的传参作用:把数据给函数
函数的形参作用:接收函数调用传过来的数据
python函数的参数传递传递方式:
位置传参
序列传参
关键字传参
字典关键字传参
位置传参 实际参数(实参)的对应关系与形式参数(形参)的对应关系是按照位置来依次对应的示例:
# 此示例示意位置传参 def myfun(a, b, c): '''这是一个函数传参的示例''' print('a的值是:', a) print('b的值是:', b) print('c的值是:', c) myfun(1, 2, 3) myfun(4, 5, 6) myfun("ABC", [1,2,3], (44,55,66))说明:
实参和形参通过位置进行传递和匹配 实参的个数必须与形参的个数相同 序列传参 序列传参是指在函数调用过程中,用*(星号)将序列拆解后 按照位置进行传递的传参方式示例:
# 此示例示意 序列传参 def myfun(a, b, c): '''这是一个函数传参的示例''' print('a的值是:', a) print('b的值是:', b) print('c的值是:', c) L = [11, 22, 33] # myfun(L[0], L[1], L[2]) myfun(*L) # myfun(L)说明:
序列传参时,序列拆解的位置将与形参一一对应 关键字传参 关键字传参是指传参时,按照形参名称给形参赋值 实参和形参按名称进行匹配示例:
# 此示例示意 关键字传参 def myfun(a, b, c): '''这是一个函数传参的示例''' print('a的值是:', a) print('b的值是:', b) print('c的值是:', c) myfun(c=33, b=22, a=11) myfun(b=222, c=333, a=111)说明:
可以不按照位置进行匹配 传参的顺序可以写乱 字典关键字传参 字典关键字传参是指实参为字典,将字典用**(双星号)拆解后进行关键字传参的传递方式示例:
# 此示例示意 字典关键字传参 def myfun(a, b, c): '''这是一个函数传参的示例''' print('a的值是:', a) print('b的值是:', b) print('c的值是:', c) d = {'a':100, 'c':300, 'b':200} # myfun(a=d['a'], c=d['c'], b=d['b']) myfun(**d) # 等同于上面一条语句 # myfun(d) # 出错说明:
字典的键名和形参名必须一致 字典的键名必须符合标识符命名规则的字符串 字典的键名要在形参中存在 函数的综合传参 函数的传参方式在能确定形参能唯一匹配到相应实参的情况下可以任意组合 函数的位置传参要优先于关键字传参示例:
def myfun(a, b, c): pass myfun(100, *[200, 300]) myfun(100, *"BC") myfun(*"AB", 300) myfun(*[100], 200, *[300]) myfun(100, c=300,b=200) myfun(a=100, 200, c=300) # 错误的 myfun(100, **{'c':300, 'b':200}) myfun(100, **{'c':300}, b=200) myfun(100, b=200, **{'c':300}) 函数的缺省参数语法:
def 函数名(形参名1=默认实参1,形参名2=默认实参2,形参名3=默认实参3,.....)作用:
让函数的调用者少传递参数来调用函数