欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

函数应用之参数、局部变量和全局变量、匿名函数

程序员文章站 2023-12-21 20:03:04
...

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。

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

其好处就是 ——不仅可以使代码精简,而且不用为思考命名发愁。
~
~
~
函数应用之参数、局部变量和全局变量、匿名函数
以上代码本人自敲,谢谢改错。

相关标签: python

上一篇:

下一篇: