目录
python函数的参数传递:
参数类别:
匿名函数(lambda表达式)
return语句
变量作用域
global和nonlocal关键字
python函数的参数传递:
不可变类型:如数值、字符串、元组,类似c++的值传递可变类型:如列表、字典,类似c++的引用传递
参数类别:
必须参数:须以正确的顺序传入函数,调用时的数量必须和声明时一样,否则会输出positional argument数量错误关键字参数:允许函数调用时参数的顺序与声明时不一致默认参数:没有对应的参数传入时为其默认值。默认参数必须放在最后面,否则会报错不定长参数
一个星号*的参数会以元组的形式导入,存放所有未命名的变量参数。:如def fun(arg1,*vartuple)两个星号**的参数会议字典的形式导入
匿名函数(lambda表达式)
语法:lambda arg1, arg2, ..., argn : expression。如sum = lambda a,b:a+blambda函数有自己的命名空间,并且不能访问自己参数列表之外或全局命名空间里的参数虽然lambda函数看起来只能写一行,却不等同于c++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率
return语句
return语句用于退出函数,不带参数值的return语句返回None不同于c语言,python函数可以返回多个值,以元组的形式
def fun(a,b):
"返回多个值,结果以元组形式表示"
return a,b,a+b
print(fun(1,2))
#输出
(1,2,3)
变量作用域
python的变量作用域一共有4种:
local:局部作用域。定义在函数内部的变量拥有一个局部作用域,局部变量只能在其被声明的函数内部访问enclosing:闭包函数外的函数中global:全局作用域。定义在函数外的拥有全局作用域,全局变量可以在整个程序范围内访问。built-in:内置作用域(内置函数所在模块的范围)(不常用)
python按照local ==> enclosing ==>global ==> built-in的顺序查找变量,例如:
g_count = 0 # 全局作用域
def outer():
o_count = 1 # 闭包函数外的函数中
def inner():
i_count = 2 # 局部作用域
注意:python中只有模块(module),类(class),以及函数(def,lambda)才会引入新的作用域。其它的代码块(如if/elif/else, try/except, for/while等)是不会引入新的作用域的,即这些语句内定义的变量,外部也可以访问
global和nonlocal关键字
global:函数内可以访问全局变量,但不能更新(修改)其值!当在局部作用域内想修改全局变量时需在局部作用域内使用global进行声明
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
print(num)
#输出
1
123
123
nonlocal :修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字。例如:
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
#输出
100
100