一、函数的定义和调用
二、函数参数
三、函数作用域
四、递归函数和匿名函数
def 函数名(参数): 自定义函数可以分为有参函数和无参函数 。
函数的作用: 在Python中定义函数可以提高代码的复用率,避免重复的代码,可以减少代码量调用函数。
如下例子:
- """
- def 函数名(参数):
- 函数体 #定义在函数体里面的代码不会自动执行,需要调用对应函数执行对应函数体
- 调用形式:函数名加括号
- return 表达式
- """
- def food():
- print('苹果,香蕉,葡萄')
- food() #调用形式:函数名加括号
运行结果:
return:返回值,结束函数,选择性地返回一个值给调用方。
print与return的区别:
print打印的数据不能被变量接收,return返回的值能被变量接收。
如下例子:
- def food():
- print('苹果,香蕉,葡萄')
- return '水果'
- print(food()) #调用形式:函数名加括号
结果如下:
必备参数: 定义时的参数与调用时的参数数量必须一一对应 参数与参数之间用逗号隔开。
默认参数 可以给参数赋一个默认值 。注意:默认参数要放在必备参数的后面。
不定长参数: 任何没有被定义的参数都会被不定长参数接收 ,定义不定长参数时要加上*号,使用的时候不用加 。
注意:参数的顺序:必备参数->默认参数->不定长参数。
例子:
- def food(x,y=10,*args,**kwargs):
- print(x)
- print(y)
- print(args)
- print(kwargs)
- food("水果",4,"香蕉","苹果",'榴莲','西瓜',a=4)
结果如下:
全局作用域:函数内部可以访问外部的变量,但是不能直接进行修改 。
定义在py文件中函数外面的变量称之为全局变量。
global关键字是全局变量声明,只有声明之后函数内部才可以修改全局变量。
局部作用域:在嵌套的函数中,内层函数可以访问外层函数的变量,但是不能直接修改。
nonlocal关键字是全局变量声明,只有声明之后函数内部才可以修改全局变量。
如果在一个函数的内部调用了该函数本身,那么这个函数就是递归函数。
递归函数也需要一个结束条件,否则超出递归深度就会报错。
如下例子:
- def shuzi(n):
- if n <= 1:
- return 1
- else:
- return n * shuzi(n - 1) # 返回了函数自身-> 5 * 4 * 3 * 2 * 1
- print(shuzi(5))
结果如下:
匿名函数就是没有函数名的函数,也就是不再使用def关键字定义的函数。
如果要声明匿名函数,则需要使用lambda关键字。
需要注意的是匿名函数能接受任何数量的参数但是只能返回一个表达式的值。
如下例子:
- li = ['苹果','西瓜','香蕉'] # 以列表中的元素长度进行排序
- li.sort() # 字符串会根据首字母的拼音进行排序
- print(li)
- li.sort(key= lambda x : len(x),reverse=True) # 使用lambda关键字设置了排序要求,以列表中的字符串长度进行排序
- print(li)
结果如下: