为什么函数openFehBgQ
不像标记为评论1&的两条指令。 2?
注释1尝试更新fehCurrent
,它被声明为global
,但会产生以下错误:
SyntaxError: name 'fehCurrent' is local and global ;
评论2根本不起作用,尽管timeKill
功能会记住time.sleep
。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import glob, subprocess, time, os
def globalVariables():
global fehCurrent # Title (str) of current 'Child' window
global fehNew # Title (str) of new 'Child' window
global fehWindow # Data (array) for current 'Child' window
global timeKill
global timeZero
# Data (array) for current 'Child' window
fehBg = ['fehBg', '-g', '%ux%u+%u+%u' % (320, 240,
50,50), '-x', 'Media/Bg.jpg']
fehCurrent = 'fehq1' # Title (str) of current 'Child' window
def openFehBgQ():
if fehCurrent != fehNew:
subprocess.Popen(fehWindow)
time.sleep(timeKill)
os.popen('%s%s' % ('pkill ', fehCurrent))
# fehCurrent = fehNew # See Comment 1
timeElapsed = 0
# timeZero = time.time() # See Comment 2
fehNew = "fehBg"
fehWindow = fehBg
openFehBgQ()
print "1_", fehCurrent
fehCurrent = fehNew
print "2_", fehCurrent
timeZero = time.time()
答案 0 :(得分:1)
global
语句告诉Python的解释器,给定的变量名称是指全局变量,而不是本地变量。如果您要分配给变量,则只需使用它。如果您只访问其现有值,则无需进行global
声明。
您在openFehBG
中收到错误,因为您正在访问变量fehCurrrent
,后来尝试分配相同的名称,默认情况下会创建一个本地变量。不允许这种无序访问。你需要一个global
语句来使查找和赋值都引用全局变量。
也就是说,使用全局变量,有或没有global
语句通常是设计不良的症状。你应该将参数传递给你的函数,并保存它们的返回值,而不是有很多全局变量来跟踪。
答案 1 :(得分:0)
使用最少行数按预期工作的版本将是:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
fehCurrent = "fehQ1"
def open_feh_bg(fehCurrent, fehNew):
if fehCurrent != fehNew:
timeZero = time.time()
return timeZero
fehNew = "fehBg"
open_feh_bg(fehCurrent, fehNew)
fehCurrent = fehNew
感谢您的帮助。