defAAA( a, b, *c): print("a is :", a) print("b is :", b) print("c is :", c)
return
AAA(11, 22) AAA(333, 444, 555, "666", 777)
# 结果打印 # a is : 11 # b is : 22 # c is : () # a is : 333 # b is : 444 # c is : (555, '666', 777)
在参数在声明的时候加**,这样参数就以字典的形式导入。
1 2 3 4 5 6
a is : 11 b is : 22 c is : {} a is : 333 b is : 444 c is : {'c1': 555, 'c2': '666', 'c3': '777'}
不定参数如果不放在函数参数末尾,那么传参的时候需要用关键字形式补充后面的必需关键之。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/usr/bin/python3
import sys
defAAA( a, b, *c, d): print(a + b + d)
return
# AAA(11, 22, 33) # 报错 AAA(11, 22, d=33)
# 结果打印 # 66
匿名函数
匿名函数不需要用def定义,直接写表达式定义.
lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
一般形式
1
lambda [arg1 [,arg2,.....argn]]:expression
1 2 3 4 5 6 7 8 9 10
#!/usr/bin/python3
import sys
sum = lambda arg1, arg2: arg1 + arg2
print (sum( 10, 20 ))
# 结果打印 # 30
变量作用域
python变量作用域有4种
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内置作用域(内置函数所在模块的范围)
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。 Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。也就是if等内部定义的变量,在if块也能访问,但函数内定义变量,在这个函数块外部能访问。