美文网首页
(十一)全局和局部var

(十一)全局和局部var

作者: 费云帆 | 来源:发表于2019-02-15 09:22 被阅读0次
  • 先看一个例子:
x=2

def funcx():
    x=9
    print("I am in funcx()-->{}".format(x))

funcx()
print('I am outside funcx()-->{}'.format(x))
>>>
# 以下结果都没毛病
I am in funcx()-->9
I am outside funcx()-->2

现在修改一下:

x=2

def funcx():
    # 修改之处
    global x
    x=9
    print("I am in funcx()-->{}".format(x))

funcx()
print('I am outside funcx()-->{}'.format(x))
>>>
I am in funcx()-->9
I am outside funcx()-->9
"""
glocal 是声明全局变量的关键字
"""
  • 另一个实例:
def outer_foo():
    a=10
    def inner_foo():
        a=20
        '''nonlocal a
        a=a+10'''
        print("inner_foo,a={}".format(a))
    inner_foo() # inner_foo,a=20
    print("outer_foo,a={}".format(a))

a=30
outer_foo() # outer_foo,a=10
print("a={}".format(a)) # a=30
"""
以上结果也都没毛病,a在各自的作用域发挥自己的作用
"""
# 复习一下前面的"nonlocal"
# 上面例子修改一下
def outer_foo():
    a=10
    def inner_foo():
        # 修改之处
        # 如果用a来运算,肯定是报错的,因为引用了外部变量
        # 加这句运行就正常了
        # nonlocal a
        a=a+30
        print("inner_foo,a={}".format(a))
    inner_foo() # inner_foo,a=20
    print("outer_foo,a={}".format(a))

a=30
outer_foo() # outer_foo,a=10
print("a={}".format(a)) # a=30
>>>
UnboundLocalError: local variable 'a' referenced before assignment
  • 命名空间:locals(),globals()

def foo(num ,str):
    name='qiwsir'
    print(locals())

foo(221,'qiwsir.github.io')

x=1
y=2
z=3
print(globals())
>>>
{'name': 'qiwsir', 'num': 221, 'str': 'qiwsir.github.io'}
{'y': 2, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', 'foo': <function foo at 0x0000000003345B70>, '__file__': 'C:\\Users\\wcw\\Desktop\\Testing.py', 'x': 1, 'z': 3, '__package__': None, '__doc__': None}
"""
所谓'命名空间'---作用域的抽象,那么作用域是相对于var而言的
所以locals()-globals()的作用就是打印出当前所有的局部/全局变量的值
它们以字典的形式返回

"""

相关文章

  • (十一)全局和局部var

    先看一个例子: 现在修改一下: 另一个实例: 命名空间:locals(),globals()

  • 全局变量&局部变量

    var a; //全局变量 function test(){ var b; //局部变量 c; //全局变量 }

  • js基础——变量和数据类型

    一、变量: 1.1、全局变量: 1.2、局部变量: 区别就是有var的是局部,没var的是全局,最好都先写上var...

  • JavaScript基础

    全局变量和局部变量 方法内部用var声明的变量是局部变量,方法外部用var声明或者方法内部不加var的都是全局变量...

  • let const

    var let const var:是全局作用域 可以重复声明 let:局部变量(局部作用域) 在一个作用...

  • 2019-04-12

    在遇到闭包的时候,全局如何访问到局部变量var foo = function () {var a = 3;var ...

  • js变量声明有无var的区别

    函数内 有var,局部变量 没var,全局变量 函数外 有var,configurable:false,不可删除 ...

  • let 和 const 命令

    var、let 和 const 区别?var:1. 只有函数作用域(全局变量和局部变量);2. 会 “变量提升”,...

  • ECMAScript 中的 let 和var

    一:var声明的变量 全局作用域、局部作用域 var a = 1; //a为全局变量,可以在任何地方使用for...

  • ES6 笔记

    1,let var const var 全局作用域,先使用后声明,undefinelet 局部作用域,或块级作用...

网友评论

      本文标题:(十一)全局和局部var

      本文链接:https://www.haomeiwen.com/subject/xhoueqtx.html