python-模块-模块导入之作用域函数(五)

1.python变量作用域

一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。

每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样。

Python 会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。

因此,如果要给函数内的全局变量赋值,必须使用 global 语句。

2.global属性运用

#coding=utf-8;
money ="first";
def globaltest():
    money = "second";
    print "函数内money:",money;
print "函数外money:",money;
globaltest();
"""
1
当局部变量与全局变量名称相同时,会优先使用局部变量名称
"""
nambers =8;
def globaltest2():
    global nambers;
    #nambers = nambers+1;
    nambers = 999;
    print "函数内nambers:",nambers;
print "函数外nambers:",nambers;
globaltest2();
"""
2
当全局变量在函数内不能直接被改变
会报:UnboundLocalError: local variable 'nambers' referenced before assignment
需要声明才能使用:globle nambers;
"""
lst = [2,4];
def globaltest3():
     lst=[1,3];
     #lst.append(999);
     """for i in lst:
        print i;"""
     print lst;
globaltest3();
"""
3
字符串、数字类型是不能被在局部被修改的,除非使用global关键字,但是 列表,字典是可修改,但不能重新
赋值,如果需要重新赋值,需要在函数内部使用global定义全局变量
"""
print lst;
"""列表2"""
list = ['bb','cc'];
def globaltest4():
     global list;
     list =['aa'];
     print(list);
globaltest4();
print(list);

运行结果如下:

函数外money: first
函数内money: second
函数外nambers: 8
函数内nambers: 999
[1, 3]
[2, 4]
['aa']
['aa']

 3.python中global()和locals()比对

3.1 locals()和globals()分别用来返回调用者的局部和全局名称空间的字典。

3.2 在全局名称空间下,globals()和locals()返回相同的字典。

3.3 globals()是可写的,即,可修改该字典中的键值,可新增和删除键值对。

3.4 locals()是不可修改字典中已存在的键值的,也不能pop移除键值对,但是可以新增键值对。

3.1,3.2示例:

#coding=utf-8;
x=1;
def demo():
    global y;
    y=0;
    z=3;
    name="jack";
    print "函数内globals:",globals();
    print "函数内locals:",locals();
demo();
print "globals外:",globals();
print "locals外:",locals();

运行结果:

函数内globals: {'__builtins__': <module '__builtin__' (built-in)>, 'demo': <function demo at 0x0000000003569588>, '__file__': 'C:/Users/m/PycharmProjects/chengxukongzhi/globalAndLocal.py', '__package__': None, 'x': 1, 'y': 0, '__name__': '__main__', '__doc__': None}
函数内locals: {'z': 3, 'name': 'jack'}
globals外: {'__builtins__': <module '__builtin__' (built-in)>, 'demo': <function demo at 0x0000000003569588>, '__file__': 'C:/Users/m/PycharmProjects/chengxukongzhi/globalAndLocal.py', '__package__': None, 'x': 1, 'y': 0, '__name__': '__main__', '__doc__': None}
locals外: {'__builtins__': <module '__builtin__' (built-in)>, 'demo': <function demo at 0x0000000003569588>, '__file__': 'C:/Users/m/PycharmProjects/chengxukongzhi/globalAndLocal.py', '__package__': None, 'x': 1, 'y': 0, '__name__': '__main__', '__doc__': None}

 3.3,3.4示例:

#coding=utf-8;
x=1;
def demo():
    global y;
    y=0;
    z=3;
    name="jack";
    globals()["x"]=11;
    globals()["y"]=22;
    locals()["z"]=6; #修改不成功,不能修改
    print locals();
    print globals();
demo();

运行结果:

{'z': 3, 'name': 'jack'}
{'__builtins__': <module '__builtin__' (built-in)>, 'demo': <function demo at 0x00000000038195F8>, '__file__': 'C:/Users/m/PycharmProjects/chengxukongzhi/globalAndLocal.py', '__package__': None, 'x': 11, 'y': 22, '__name__': '__main__', '__doc__': None}

 

posted @ 2022-09-22 16:54  家乐福的搬砖日常  阅读(34)  评论(0编辑  收藏  举报