八.嵌套函数(注意区别)
1.
age = 20 def age1(): age = 30 print(age) def age2(): age = 40 print(age) age1() print(age)
结果:
30 20
2.
age = 20 def age1(): print(age) def age2(): age = 40 print(age) age2() age1() print(age)
结果:
20 40 20
3.
age = 20 def age1(): def age2(): print(age) age = 40 age2() age1() print(age)
结果:
40 20
4.
age = 20 def age1(): global age def age2(): print(age) age = 40 age2() age1() print(age)
结果:
40 40
5.
age = 20 def age1(): def age2(): print(age) age2() age = 40 age1() print(age)
结果:
报错
九.作用域
Python中一个函数就是一个作用域
age = 18 def func1(): age = 73 def func2(): print(age) return func2 val = func1() val()
结果:
73
当把一个函数作为返回值时,赋值给外部的一个参数,调用函数时会遵循链式原则,回到函数域往上调用
十.匿名函数
def calc(x,y): #之前的声明函数的方法 print(x*y) calc(4, 8) #调用函数 func = lambda x,y:x*y #定义一个匿名函数 print(func(4, 8))
匿名函数一般和其他函数搭配使用,例如:
map(fun, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回
def func1(x): x = x*x return x L1 = [1,2,3,4,5,6,7,8,9] L2 = list(map(func1,L1)) print(L2)
结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
filter(func, lst),将func作用于lst的每个元素,然后根据返回值是True或False判断是保留还是丢弃该元素。
r = list(range(-10, 10)) def func1(x): return x < 0 a = list(filter(func1,r)) print(r) print(a)
例如,找出-10到9范围内所有的负数
结果:
[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1]
十一.高阶函数
高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。
例如:
def add(x, y, f): return f(x)+f(y) res = add(3, -9, abs) #abs()用于取绝对值 print(res)
或
def func1(x): return x def func2(x,y): return x*y n = func1(func2) print(n(4,5))