【发布时间】:2012-06-04 19:50:23
【问题描述】:
如果定义了这样的函数:
def plop(plop):
ploplop = 1234
if plop == ploplop:
print "I plopped"
如何将 ploplop 置于函数范围之外?
【问题讨论】:
如果定义了这样的函数:
def plop(plop):
ploplop = 1234
if plop == ploplop:
print "I plopped"
如何将 ploplop 置于函数范围之外?
【问题讨论】:
你把它还回来,然后在另一边把它抓起来。
def plop(plop):
ploplop = 1234
if plop == ploplop:
print "I plopped"
return plopplop
someval = plop(1235)
【讨论】:
def plop(plop):
global ploplop
ploplop = 1234
if plop == ploplop:
print "I plopped"
但几乎不应该使用全局变量
【讨论】:
另一种解决方案是在函数中添加一个属性。 (因为plops太多,我改了函数名):
def f(plop):
f.ploplop = 1234
if plop == f.ploplop:
print "I plopped"
f(5)
print f.plopplop
【讨论】:
您没有提供足够的信息来给出一个好的答案。这两个函数和变量之间有什么关系?
如果变量代表两个函数操作的某种持久状态,那么你想创建一个有两个方法和一个成员变量的类:
class Plopper( object ):
ploplop = 1234
def plop( self, ploppity ):
if ploppity == self.ploplop:
print "I plopped" # ew.
def plop2( self, ploppity ):
if ploppity == self.ploplop * 2:
print "I plopped twice"
a = Plopper()
a.plop( 1234 )
a.plop2( 2468 )
如果变量控制函数的行为并且您只需要确保它们是一致的,则将变量从方法中拉出到全局变量(注意,与 user1320237 相反,您不需要将其声明为全局变量)如果你只是读取它的值):
PLOPLOP = 1234 # I like the all-caps convention for global constants
def plop(plop):
if plop == PLOPLOP:
print "I plopped"
def plop2(plop):
if plop == 2 * PLOPLOP:
print "I plopped twice"
plop(1234)
plop2(2468)
【讨论】: