推荐学习书目
› 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 · Dec 2, 2016 · 2303 views
    This topic created in 3588 days ago, the information mentioned may be changed or developed.
    #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 replies  •  2016-12-03 12:48:45 +08:00
    cheetah
        1
    cheetah  
       Dec 2, 2016
    为什么要用全局变量。。
    omg21
        2
    omg21  
    OP
       Dec 2, 2016
    @cheetah 我想把每个函数每个模块的运行步骤都放到 loglist 中,用全局变量是最简单的。
    264768502
        3
    264768502  
       Dec 2, 2016 via Android
    为什么不用 logging?
    omg21
        4
    omg21  
    OP
       Dec 2, 2016
    @264768502 logging 没我自己做的详细
    ruoyu0088
        5
    ruoyu0088  
       Dec 3, 2016
    你对 Python 的全局变量的理解不对:

    1. logfun 中不需要使用 global loglist
    2. 全局变量是模块级别,因此需要在 fun_log.py 中初始化列表: loglist = []
    3. 要查看 fun_log 模块的全局变量, print(fun_log.loglist)
    omg21
        6
    omg21  
    OP
       Dec 3, 2016
    @ruoyu0088 终于搞定了,多谢点拨!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4971 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 07:45 · PVG 15:45 · LAX 00:45 · JFK 03:45
    ♥ Do have faith in what you're doing.