八.嵌套函数(注意区别)

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))