函数应用之参数、局部变量和全局变量、匿名函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
1. 参数
-
形式参数和实际参数:
在定义函数时,函数名后面,括号中的变量名称叫做形式参数,或者称为"形参"在调用函数时,函数名后面,括号中的变量名称叫做实际参数,或者称为"实参"
-
关键字参数
在函数调用时指定形参等于指定实参的参数使用模式,该模式称为关键字参数。关键字参数使用可以不按形参的顺序传递实参,系统按形参的名字确认实参传递给哪个参数。
>>> def fun1(name,action):
return (name+"-->"+action)
>>> fun1(name="我",action="上天")
'我-->上天'
>>> fun1(action="上天",name="我")
'我-->上天' #即使调用时name在后,也不影响输出的结果
- 默认参数
在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值,这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值。
>>> def fun2(name,words="打钱"):
return (name+"-->"+words)
>>> fun2(name="我,秦始皇")
'我,秦始皇-->打钱' #直接调用了words的内容
>>> fun2(name="我,秦始皇",words="要一统天下")
'我,秦始皇-->要一统天下' #也可以更改默认值
- 不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数。加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
>>> def fun3(*name):
return name
>>> fun3("我要上天",2233,"...")
('我要上天', 2233, '...') #参数类型还可以不同
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.局部变量和全局变量
- 局部变量:定义在函数内部的变量称为局部变量,他的作用域范围为函数内。
-
全局变量:定义在函数外的变量称之为全局变量,他的作用域范围为全局。
所谓的全局变量跟局部变量主要是针对函数内外而言的。
>>> x=5 #全局变量
>>> def fun4():
return x
>>> fun4() #可直接调用
5
>>> print(x) #调用全局变量没有问题
5
>>> def fun5():
z=10
return z
>>> fun5() #调用函数可以得出结果
10
>>> print(z) #调用局部变量会报错
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
print(z)
NameError: name 'z' is not defined
global和nonlocal 关键字的出现可以改变变量的作用域
- global可将局部变量变成全局变量。
>>> def fun5():
global z #此处将z改变成全局变量
z=10
return z
>>> fun5()
10
>>> print(z) #再调用也不会出问题
10
- nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量, 如果上一级函数中不存在该局部变量,nonlocal位置会发生错误。
>>> def fun6():
x=5
def fun7():
x+=x
return x
return fun7()
>>> fun6() #调用报错
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
fun6()
File "<pyshell#29>", line 6, in fun6
return fun7()
File "<pyshell#29>", line 4, in fun7
x+=x
UnboundLocalError: local variable 'x' referenced before assignment
>>> def fun6():
x=5
def fun7():
nonlocal x #此时是fun6中的局部变量,才可调用(且可替换为global)
x+=x
return x
return fun7()
>>> fun6()
10
>>> def fun6():
a=5
def fun7():
nonlocal x #外层函数没有定义x,直接报错
SyntaxError: no binding for nonlocal 'x' found
注意:两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误。(看例子)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.匿名函数:lambda
lambda 函数的语法只包含一个语句,如下:lambda [arg1 [,arg2,…argn]]:expression(即冒号左边是参数,右边是表达式返回值)
>>> s = lambda x,y: x+y
>>> print(s(3,4))
7
其好处就是 ——不仅可以使代码精简,而且不用为思考命名发愁。
~
~
~
以上代码本人自敲,谢谢改错。