如何访问__main__范围内的全局变量?

我对python中变量的名称空间和范围感到困惑

假设我有一个test.py:

# -*- coding: utf-8 -*-
"""
@author: jason
"""

if __name__ == '__main__':
    global strName
    print strName

然后,我定义了一个名为strName的变量,并尝试在test.py中访问它,但是它引发了一个错误:

In [9]: strName = "Joe"

In [10]: run test.py hello
---------------------------------------------------------------------------  NameError                              Traceback (most recent call last)  C:\Anaconda\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
    195             else:
    196                 filename = fname
--> 197             exec compile(scripttext, filename, 'exec') in glob, loc
    198     else:
    199         def execfile(fname, *where):

d:\playground\test.py in <module>()
     13         print "hello"
     14         global strName
---> 15         print strName
     16 

NameError: global name 'strName' is not defined

In [11]:

我想知道为什么会这样,并且有什么方法可以访问test.py中的strName吗?

user2357112支持Monica

global不是全球性的。global是模块级别的;真正的全局变量,例如minint并存在于__builtin__模块中(builtins在Python 3中)。global在模块级别使用声明是多余的。

我强烈建议您将数据传递给test.py另一种方式,例如在其中定义一个函数并将字符串作为参数传递:

test.py:

def print_thing(thing):
    print thing

其他要使用test.py的代码:

import test
test.print_thing("Joe")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在全球范围内修改方法的Java中的全局变量

在C ++ / Linux中,系统范围内的全局变量/信号量/互斥量?

如何访问全局变量

在Go模板中,访问范围内的父/全局管道

Gradle全局变量不在buildscript范围内

在静态范围内访问全局变量

条件运算符是在全局范围内初始化全局变量的唯一方法吗?

如何在类范围之外但在父类范围内访问变量?

如何从Fortran函数访问全局变量

Grafana:全局变量,用于访问时间范围的值

堆地址范围内的全局变量的地址

变量在全局范围内,但是为什么函数无法访问?

如何使用python更改嵌套范围内的全局变量?

汇编中局部和全局范围内的const变量

python使用全局变量中的变量而未在局部范围内将其定义为全局变量

使用全局变量使流星模式可在站点范围内访问

如何从解析模块访问全局变量?

Node.js在全局范围内访问嵌套变量

如何在指令的隔离范围内访问全局角度对象?

Node.js在本地范围内保留全局变量的副本

全局变量在函数范围内未定义

如何在浏览器范围内设置全局变量 .wait(fn) NightmareJS

仅在 R 函数范围内的全局变量

如何在不传递参数或放置全局变量的情况下从其他范围访问变量?

如何从类方法访问全局变量

局部变量在全局范围内可用?

如何将 SQL 查询结果存储在 JavaScript 变量中以在全局范围内使用?

可在全局范围内访问的函数变量

为什么我不能在全局范围内访问已声明的变量