V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
omg21
V2EX  ›  Python

在模块里使用全局变量为什么没有数据?

  •  
  •   omg21 · 2016-12-02 13:38:08 +08:00 · 1647 次点击
    这是一个创建于 2915 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #run.py
    def logfun(logstr):
    global loglist
    try:
    loglist.append(logstr)
    except Exception as e:
    pass

    def fun8():
    global loglist
    logfun('执行 fun8')

    global loglist
    loglist = []
    logfun('执行第 1 步')
    fun8()
    print(loglist)

    我想做一个日志输出模块,方便出错时查找问题,用了全局变量,如上边代码所示,运行结果是:
    ['执行第 1 步', '执行 fun8']
    ['执行第 1 步', '执行 fun8']
    两个问题:
    1. 为什么一个输出有两行显示?
    2. 现在,我把 logfun()单放到了一个模块里,再执行时显示的是[],这是为什么呢?
    #fun_log.py
    def logfun(logstr):
    global loglist
    try:
    loglist.append(logstr)
    except Exception as e:
    pass

    #run.py
    def fun8():
    global loglist
    fun_log.logfun('执行 fun8')

    global loglist
    loglist = []
    fun_log.logfun('执行第 1 步')
    fun8()
    print(loglist)
    6 条回复    2016-12-03 12:48:45 +08:00
    cheetah
        1
    cheetah  
       2016-12-02 13:41:58 +08:00
    为什么要用全局变量。。
    omg21
        2
    omg21  
    OP
       2016-12-02 13:52:14 +08:00
    @cheetah 我想把每个函数每个模块的运行步骤都放到 loglist 中,用全局变量是最简单的。
    264768502
        3
    264768502  
       2016-12-02 14:52:52 +08:00 via Android
    为什么不用 logging?
    omg21
        4
    omg21  
    OP
       2016-12-02 14:58:08 +08:00
    @264768502 logging 没我自己做的详细
    ruoyu0088
        5
    ruoyu0088  
       2016-12-03 11:30:37 +08:00
    你对 Python 的全局变量的理解不对:

    1. logfun 中不需要使用 global loglist
    2. 全局变量是模块级别,因此需要在 fun_log.py 中初始化列表: loglist = []
    3. 要查看 fun_log 模块的全局变量, print(fun_log.loglist)
    omg21
        6
    omg21  
    OP
       2016-12-03 12:48:45 +08:00
    @ruoyu0088 终于搞定了,多谢点拨!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5687 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:34 · PVG 15:34 · LAX 23:34 · JFK 02:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.