函数def及lambda的功能介绍
1. def函数的功能介绍
1. 函数的参数
-
无参数函数
格式:def func_name(): '''__doc__'''#函数的说明文档(内容) expression 例如:def name_d(): '''This is a name list!''' print(['zhang','wang','li']) name_d()#调用函数 >>> ['zhang','wang','li'] print(name_d.__doc__)#打印函数的说明文档 >>> This is a name list! #函数不调用是不会执行操作的,但是会检测语法是否正确。调用函数的方法就是函数名()。
注:强烈建议声明函数时书写函数的说明文档。
-
位置参数(形参)
格式:def func_name(arg1,arg2,...): '''__doc__'''#函数的说明文档(内容) expression 例如:def jiafa(a,b,c): '''This is jiafa!''' print(a+b+c) jiafa(1,2,3) >>> 6 #函数的位置可以有一个,也可以有多个。声明函数时设置位置的个数必须与调用时输入的实参的个数一样,而且顺序要一致。
-
关键字参数
格式:同上 例如:def jiafa(a,b,c): '''This is jiafa!''' print(a+b+c) jiafa(a=2,1,3) >>> 6 #关键字参数与上述的位置参数类似,只是关键字参数主要是在输入实参时,指定参数来赋值,可以改变函数参数的顺序。
注:关键字参数只能放在位置参数后面。
-
默认参数
格式:def func_name(arg1,arg2,...arg_n=value): '''__doc__'''#函数的说明文档(内容) expression 例如:def jiafa(a,b,c=3): '''This is jiafa!''' print(a+b+c) jiafa(2,1) >>> 6 #默认参数需要在声明函数时直接设定好值,但必须要放在其他形参的后面,调用函数时,默认参数可以再次赋值,也可以不指定。
注:默认参数一定要在位置参数后面。
-
可变参数(动态参数)
-
动态参数之元祖
格式:def func_name(*args): '''__doc__'''#函数的说明文档(内容) expression 例如:def jiafa(*args): '''This is jiafa!''' print(args) jiafa(2,1,3) >>> (2,1,3) #一个*表示传入的参数是一个元祖,调用函数时,将传入的实参都作为元祖的元素传入。如果调用时未传入参数,则会传入一个空元祖。
-
动态参数之字典
格式:def func_name(**args): '''__doc__'''#函数的说明文档(内容) expression 例如:def jiafa(**args): '''This is jiafa!''' print(args) jiafa(2='a',1='b',3='c') >>> {1:'b',2:'a',3:'c'} #两个**表示传入的参数是一个字典,调用函数时,需要使用关键字参数的形式。调用时未传入参数,则会传入一个空字典。
-
注:函数所有参数的传入顺序为:
1. 位置参数
2. 关键字参数
3. 默认参数
4. 动态参数(元祖)
5. 动态参数(字典)
2. 函数的返回值
-
返回值为None
格式:def func_name(): '''__doc__'''#函数的说明文档(内容) expression 例如:def jiafa(): '''This is jiafa!''' print('Hello') result = jiafa()#声明函数的返回值 print(result) >>> 'Hello' >>> None #函数中没有指定返回值,因此该函数的返回值为None
-
指定返回值
格式:def func_name(): '''__doc__'''#函数的说明文档(内容) expression return value#声明函数的返回值 例如:def jiafa(): '''This is jiafa!''' print('Hello') return 123 result = jiafa() print(result) >>> 'Hello' >>> 123 #由于函数中使用return声明了函数的返回值,因此该函数的返回值不为空。
-
多个返回值
格式:同上 例如:def fan(): '''This is a twos''' print('Hello') return 123,'abc',[1,3,] result = fan() print(result) >>> 'Hello' >>> (123, 'abc', [1, 3]) #当函数返回值为多个对象时,将所有对象以元组的形式返回。
3. 函数的变量
-
全局变量global
全局变量是指在函数外面声明的变量,(在函数内部使用需要使用global才能调用全局变量)
格式:variable = value def func_name(): '''__doc__''' global variable expression #全局变量一般不提倡在函数内部进行调用,因为在函数内部调用,函数外面的值也跟随着变化了。
-
局部变量local
局部变量是在函数内部声明的变量
全局变量和局部变量的有效范围
1. 全局变量在函数外部可以正常使用
2. 全局变量在函数内部也可以使用(需要用global声明)
3. 局部变量在函数内部可以正常使用
4. 局部变量在函数外部不可以被访问
注:特殊情况:当全局变量并不是一个字符串时,在函数内部是可以对其进行修改的,例如:列表、字典、集合等。
3.域外变量nonlocal
把域外或者父级函数的变量传入到域内或者子级函数中进行使用。
格式:def func_name1():
variable = value
def func_name2():
nonlocal variable
expression
return func_name2()
#域外变量常用于闭包函数中,而且在子级函数中使用不影响父级函数中的使用。
2. 简单函数lambda的功能介绍
lambda表达式是简单函数def的优化,减少代码的行数。
格式:lambda args:expression
-
使用def
例如:def jia(n1): '''函数的每个参数加10''' n = n1+10 print(n1) jia(3) >>> 13
-
使用lambda
例如:n = lambda n1:n1+10 print(n(3)) >>> 13
注:lamdba是一个表达式而非语句,也不是代码块。lambda也支持默认参数、关键字参数、动态参数等。