Python函数
1.不定长参数:一个函数能够处理比声明时更多的参数,这些参数叫做不定长参数。
def printinfo(arg1,*vartuple): #加了星号的变量名所代表的变量会存放所有的未命名变量参数
print(arg1)
for var in vartuple:
print(var)
return
printinfo(10)
printinfo(70,60)
#运行结果为
#10
#70
#60
2.匿名函数:不再使用def语句定义的函数。
使用lambda来创建匿名函数。lambda只是一个表达式,不是代码块。在lambda表达式中仅仅能封装有限的逻辑。lambda函数拥有自己的命名空间,且 不能访问自己参数列表之外或全局命名空间。匿名函数相当于赋值给sum,用type函数查看,sum为function。
sum=lambda arg1,arg2:arg1+arg2
print("相加之后的值为:",sum(10,20))
#输出结果为:相加之后的值为:30
变量作用域
在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
1.作用域范围。python的变量作用域一共四种:
- L(Local):局部作用域
- E(Enclosing):闭包函数外的函数中
- G(Gloria):全局作用域
- B(Built-in):内建作用域
规则顺序: L –> E –> G –> B
g_count = 0 # 全局作用域
def outer():
o_count = 1 # 闭包函数外的函数中
def inner():
i_count = 2 # 局部作用域
内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量。
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。
2.global和nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。global可以把内部变量修改为全局变量,nonlocal可以把内部变量修改为闭包函数外的变量。