变量的作用域:全局变量和局部变量
2019-02-08 本文已影响10人
匿隱
1.什么是变量的作用域
就是变量能够使用的范围
2.全局变量和局部变量
a.全局变量 - 没有声明在函数或者类中的变量都是全局变量
全局变量的作用域是从声明开始,到整个文件结束
b.局部变量 - 声明在函数或者类中的变量就是局部变量
局部变量的作用域是从声明开始,到函数结束
总结:当我们调用函数的时候,系统会自动在栈区间专门为这个函数开辟一块独立的内容空间,
用来保存在函数中声明的变量(形参也是属于声明在函数中的变量)。当函数调用结束后,
这个函数对应的栈区间会自动销毁 --- (函数调用过程是一个压栈的过程)
1.全局变量1
# 变量a是全局变量
a = 100
print('外面:', a)
for x in range(5):
print('循环里:',a)
def func1():
print('函数中:', a)
func1()
2.全局变量2
# 这儿的y也是全局变量
for y in range(3):
print(y)
print('外面:', y)
def func2():
print('函数里面:', y)
func2()
3.局部变量
# a.函数的形参就相当于声明在函数中的变量,所以是局部变量
# num1是局部
def func3(num1):
print(num1)
for x in range(3):
print(num1)
func3(10)
# print(num1) # 局部变量不能在函数外面使用
# 函数中的nums,max1和item都是局部变量
def func4(*nums):
# nums = (1, 89, 9, 887, 0)
max1 = nums[0]
for item in nums:
if item > max1:
max1 = item
print(max1)
func4(1, 89, 9, 887, 0)
4.如果全局变量和局部变量同名,那么在局部变量的作用域中使用的是局部变量;外部使用的是全局变量
全局变量
aa = 100
def func5():
# 局部变量aa
aa = 200
print('函数里', aa)
func5()
print('外部:', aa)
"""
3.global - 在函数中声明一个全局变量(只能在函数中使用)
在函数中:
global 变量名
变量名 = 值
bb = 111
def func6():
global bb
bb = 222
print('函数里:',bb)
global aaa
aaa = 100
print(aaa) # 100
func6()
print(bb)
print(aaa) # 100
4. nonlocal - 想要在局部的局部中去修改布局变量的值,就使用nonlocal对变量进行说明
nonlocal 局部变量
局部变量 = 值
def func11():
abc = 123
def func22():
nonlocal abc
abc = 333
print('func22', abc)
func22()
print('func11', abc)
func11()
# func22 333
# func11 123
list1 = []
i = 0 [lambda x: x*i]
i = 1 [lambda x: x*i, lambda x: x*i]
i = 2 [lambda x: x*i, lambda x: x*i, lambda x: x*i]
i = 3 [lambda x: x*i, lambda x: x*i, lambda x: x*i, lambda x: x*i]
i = 4 [lambda x: x*i, lambda x: x*i, lambda x: x*i, lambda x: x*i, lambda x: x*i]
"""
list1 = []
for i in range(5):
list1.append(lambda x: x*i)
print(list1[0](3))
# lambda x: x* i x = 3 return 3*4
print(list1[3](3))
# lambda x: x* i x = 3 return 3*4
print(list1)
# list1 = [lambda x: x*2]
# print(list1[0](100))
def func1():
a = [1, 2]
print(a[10])
# func1()
a = 10
func1 = lambda x: x*a
a = 20
print(func1(2)) # 40