首页 技术 正文
技术 2022年11月6日
0 收藏 933 点赞 877 浏览 1373 个字

注:红色是我增加的注释

add by zhj:其实python中的import, from-import语句是创建新的同名变量指向引入的模块和模块属性,这也就解释了下面的情况。

我们应尽量不用全局变量,比如当一个模块中的两个函数要用同一个变量时,我们可以尝试把这两个函数写在一个类中,而该变量定义

成类变量。如果非要用全局变量,建议把它们全部定义在一个类中,通过“类名.类变量名”来使用它们,这样OK了,根本不用什么globle

关键字了。

原文:http://www.2cto.com/kf/201307/227572.html

—   a.py —
PWD = None

def func1():
    global PWD
    PWD=”pwd”
    print “PWD in func1 is: ” + PWD

—   b.py —

from a import *         #创建新变量PWD,func1,它们与a.py模块中的变量PWD,func1属性不同的名称空间,指向相同的对象,其实变量就是指针
func1()                     #进入a.py模块的名称空间,修改a.py中PWD指针,指向新的对象
print “PWD after call func1() is: ” + str(PWD)  #a.py中PWD和b.py中的PWD是两个指针,指向同一个对象,a.py中的PWD指向了新的对象,这对b.py中的PWD无影响

执行 python b.py 结果如下

PWD in func1 is: pwd
PWD after call func1() is: None

刚开始我认为在函数中给全局变量的赋予的值, 并不能传递回去, 就是说
global PWD 只是把全局变量的传递给局部变量 PWD, 而后用户都在对局部变量 PWD进行操作, 但并不是这样

看下面例子, 只是改了 import 语句

—  b.py —
import a
a.func1()
print “PWD after call func1() is: ” + str(a.PWD)

输出变为

PWD in func1 is: pwd
PWD after call func1() is: pwd

因此我推测 global 只能改本 module ( 此 py 文件 ) 中的全局变量

a.py 增加一个函数

—  a.py —
PWD = None

def func1():
    global PWD
    PWD=”pwd”
    print “PWD in func1 is: ” + PWD

def func2():
    global PWD
    print “PWD in func2 is: ” + PWD

—   b.py —
from a import *

print dir()
func1()
func2()

输出结果为

PWD in func1 is: pwd
PWD in func2 is: pwd

貌似我的结论成立:

global 只能改本 module ( 此 py 文件 ) 中的全局变量

但如果全局变量是 list 或 dict 类型, 就没有问题

—  a.py —
GLIST = [“glist”]

def func1():
    global GLIST
    GLIST[0] = “glist changed”

—   b.py —
from a import *

print GLIST[0]

运行  python b.py , 打印

glist changed

结论:

最好不要使用 “from a import *” 否则你会发现不能对简单全局变量赋值

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,991
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,505
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,349
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,134
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,766
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,844