python基础 函数作用域
1、匿名函数 :把一个简单的函数写成一行的形式 (语法糖)
lambda 参数:表达式
a = [1, 3, 2, 6, 4]
#def func(x):
#return x > 3
#print(list(filter(func, a)))
aaa = lambda x:x > 3
print(list(filter(aaa, a)))
三目运算:把一个简单的条件判断写成一行的形式
2、函数作用域
01 外部不能访问函数内部变量:
变量搜索顺序, 先搜索局部变量, 然后搜索全局变量
def fun1():
x = 1
return x
def func():
a = 1 #局部变量
print(a)
return a
func()
a = 2 #全局变量
def func():
a = 1 #局部变量
print(a)
return a
func()
02函数内部能够函数外部变量:
def fun2():
print(x)
return x + 1
03函数里面不能修改函数外部变量:
x = 123
def fun3():
x = x + 1
return x
04函数里面和函数外部变量名相同:
x = 123
print(x, id(x))
def fun4():
x = 456
print(x, id(x))
x += 1
return x
001、global(修改全局变量):
x = 123
def fun1():
global x
x += 1
return x
002 nonlocal(局部变量):
def fun2():
x = 123
def fun3():
nonlocal x
x += 1
return x
return fun3()
def f1():
a = 1
def f2():
nonlocal a
a += 1
print(a)
return f2()
f1()
3、闭包
01、内嵌函数:
def fun1():
print(‘fun1()在被调用’)
def fun2():
print(‘fun2()在被调用’)
fun2
def f1():
print(‘sshjj’)
def f2():
print(‘ghhnh’)
return f2()
f1()
02、闭包:
def fx(x):
x += 1
def fy(y):
return x*y
return fy
print(z(3))
def f1(x):
x += 1
def f2(y):
return x*y
return f2
z = f1(3)
a = f1(4)
print(z(3))
print(a(4))
包是函数里面嵌套函数,外层函数返回里层函数的函数体,这种清况称之为闭包。
闭包是概念,不是函数类型,和递归的概念类似,就是这种特殊的函数调用。
闭包可以得到外层函数的局部变量,是函数内部和外部沟通的桥梁。
4、递归 自己调用自己 要有终止条件
01、阶乘:
def factorial(n):
if n = = 1:
return 1
return factorial(n-1)*n
def f1(x):
if x > 1:
return x *f1(x-1)
else:
return 1
print(f1(8))
02、递归中可以函数自身,但是使用是类似于条件循环一样,要有递归的终止条件
5、回调函数
ef choice(callback, ch):
if ch:
callback()
else:
print(‘ok’)
def play():
print(‘hahaha’)
choice(play, 1)
02、回调函数:自身是一个函数,只是被传入到另一个函数中,供其调用
回调函数不一定会被调用,是否调用由传入函数的内部逻辑决定
def f1():
print(‘dffd’)
def func(f1,a):
if a > 5:
f1()
else:
print('ok')
func(f1, 4)