• 变量作用域


    变量作用域

    变量

    局部变量

    • 函数内定义的变量称为局部变量,局部变量在函数外不可使用

    全局变量

    • 在函数外定义的变量叫做全局变量,函数中可以使用,但不可以修改
    • 使用global关键之可以在函数体中定义全局变量,但使用时需要先调用函数
    • 在函数外定义的全局变量,可以使用global关键字引用到函数内部(‘global ''全局变量''')
    • globals()获取所有全局变量
    • locals() 获取当前作用域的变量

    变量数据分为两种:

    • 不可变数据:在函数外部定义变量,函数内部可以使用但不可以修改
    • 可变数据:在函数外部定义变量,函数内部可以使用和修改

    可变代码块

    # 列表
    list=[1,2,3]
    def func():
        list[0]='aaa'
        print(list)
    func() # 打印结果:['aaa', 2, 3]
    print(list) # 打印结果['aaa', 2, 3],已经改变原有list中内容
    # 运行结果
    '''
    ['aaa', 2, 3]
    ['aaa', 2, 3]
    '''
    
    # 字典
    vardict={'a':'a','b':'b'}
    def func():
        vardict['a']='改变字典内容'
        print(vardict)   
    func()
    print(vardict)
    '''
    运行结果
    {'a': '改变字典内容', 'b': 'b'}
    {'a': '改变字典内容', 'b': 'b'}
    '''
    
    

    不可变代码块

    num=10
    def love():
        print(num) #在函数内可以获取函数外部的变量
        # num += 20 在函数内不可以直接更改函数外的变量
    love()
    

    函数内部定义全局变量global

    def func1():
        global lovei
        lovei='aaa'
    func1()# 函数内部定义的全局变量,外部使用前必须先调用方法,将全局变量加载到内存中
    print(lovei)
    '''
    运行结果
    aaa
    '''
    
    

    globals()、locals()获取全局变量

    #locals()方法只在func()函数体中运行,所以locals的作用域只有函数体中的变量,而globals()方法无论在哪运行都会获取所有的全局的变量
    def func():
        num=1
        print(locals())
        print(globals())
    
    func()
    '''
    locals打印结果: {'num': 1}
    globals打印结果: {'__name__': '__main__', '__doc__': '
    变量数据分为两种:
        不可变数据:在函数外部定义变量,函数内部可以使用但不可以修改
        可变数据:在函数外部定义变量,函数内部可以使用和修改
    
    ', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001DDB7C86CD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'F:\pythons\21.变量的作用域.py', '__cached__': None, 'num': 10, 'love': <function love at 0x000001DDB7F3C790>, 'list': ['aaa', 2, 3], 'func': <function func at 0x000001DDB7F3C820>, 'vardict': {'a': '改变字典内容', 'b': 'b'}, 'func1': <function func1 at 0x000001DDB7E1D670>, 'lovei': 'aaa'}
    '''
    
    
    

    局部函数的作用域

    # 局部函数的作用域
    def outer():
        print('outer是外部函数。。。')
        def inner():
            print('inner是内部账号。。。')
    outer() # outer是外部函数。。。
    inner()# 报错
    # 返回结果
    	'''
    	outer是外部函数。。。
    	Traceback (most recent call last):
      File "F:pythons21.变量的作用域.py", line 76, in <module>
        inner()
    NameError: name 'inner' is defined
    	'''
    

    内函数中使用外层函数的变量 nonlocal关键字

    #内部函数引用外部函数中的变量
    def outer1():
        print('我是外部函数')
        num2=11
        def inner1():
            nonlocal num2
            num2 +=1
            print(num2)
        inner1()
    outer1() # 12
    # print(num2) 程序报错,虽然内部引用但还是属于局部变量
    
  • 相关阅读:
    JavaScript丨数组元素反转
    Executor框架浅析
    索引相关
    关系型数据库
    Cookie和Session
    HTTP和HTTPS
    TCP,UDP,HTTP
    OSI模型
    剑指Offer19
    剑指Offer03
  • 原文地址:https://www.cnblogs.com/hekaiqiaq/p/15508932.html
Copyright © 2020-2023  润新知