变量的作用域:全局变量和局部变量

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

你可能感兴趣的:(变量的作用域:全局变量和局部变量)