1

如果定义了这样的函数:

def plop(plop):
    ploplop = 1234
    if plop == ploplop:
         print "I plopped"

如何将 ploplop 置于函数范围之外?

4

4 回答 4

9

你返回它,然后在另一边捕获它。

def plop(plop):
    ploplop = 1234
    if plop == ploplop:
         print "I plopped"
    return plopplop

someval = plop(1235)
于 2012-06-04T19:51:24.070 回答
2
def plop(plop):
    global ploplop 
    ploplop = 1234
    if plop == ploplop:
         print "I plopped"

但几乎不应该使用全局变量

于 2012-06-04T19:52:12.987 回答
1

另一种解决方案是向函数添加属性。(我更改了函数名称,因为 plops 太多):

def f(plop):
    f.ploplop = 1234
    if plop == f.ploplop:
         print "I plopped"
f(5)
print f.plopplop
于 2012-06-04T21:30:07.453 回答
0

你没有提供足够的信息来给出一个好的答案。这两个函数和变量之间有什么关系?

如果变量表示两个函数操作的某种持久状态,那么您希望创建一个具有两个方法和一个成员变量的类:

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)
于 2012-06-04T20:55:18.370 回答