- 函数作用域
- lambda定义匿名函数
- 函数外的变量—全局变量
- 函数内的变量— 局部变量
- 全局和局部没有任何影响
- 外部不能访问函数内部变量
- 函数内部能够访问函数外部变量
- 函数里面不能修改函数外部变量
- 函数里面和函数外部变量名可以相同
- global关键字可以用在任何地方,nonlocal只能用于嵌套函数
- Python查找一个变量时会按照“局部作用域”、“嵌套作用域”、“全局作用域”和“内置作用域”的顺序进行搜索,前三者我们在上面的代码中已经看到了,所谓的“内置作用域”就是Python内置的那些标识符,我们之前用过的input、print、int等都属于内置作用域。
- 匿名函数,lambda
def f(o):
if o>7:
print(o)
print(list(filter(lambda o:o>8,[4,77,22,4,8])))
list(filter(f,[4,77,22,4,8])) #打印的话会返回none
[77, 22]
77
22
8
a = 5
def f():
global a #要用全局变量需声明,且下面的调用会改变了全局原值,覆盖掉原有的全局变量值
a = a +4
print(a)
f()
print(a)
9
9
b = 9 #global变量
def k():
# global b
# b = b - 4
b = 10 #局部变量,相当于k1的全局,对于k1而言属于嵌套作用域
print(b)
def k1(): #k1的爸爸是k,全局是他爷, 用爷爷global全局,用爸爸nonlocal局部
nonlocal b
b = b+1
print(b)
k1() #没有添加调用 ,无法单独K1()
print(b)
k()
print(b)
9
10
11
9
k = 2
def g():
global k
k = k+2
print(k)
def ng():
m = k +3 #k是全局变量,g函数的k是可变的,因此调用无需声明?
print(m)
ng()
print(k)
g()
print(k)
2
4
7
4
b = 6
def g():
# global b
f = b + 2
#只是拿来使用,不是定义原本的b,如果是b = b +2这个才需要声明(定义原本值),
#本身全局变量是哪里都可以直接调用的
print(f)
def g2(): #f在g函数里是原本存在的,属于不可变,调用需要声明?
f = b + 3
print(f)
# g2()
g()
8
m = 2 #占内存程序结束时候--》销毁,
def f():
n = 5 #函数执行完---》销毁
def f1():
nonlocal n
n += 1
print(n)
return f1
f()()
6
def f(j):
a = 5
def f2():
nonlocal j
for i in range(5):
j += 1
print(j)
return f2()
f(6)
11
230

被折叠的 条评论
为什么被折叠?



