【问题标题】:Using a Value declared within a function, outside of the function使用函数内声明的值,函数外
【发布时间】:2012-06-04 19:50:23
【问题描述】:

如果定义了这样的函数:

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

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

【问题讨论】:

    标签: python function variables


    【解决方案1】:

    你把它还回来,然后在另一边把它抓起来。

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

    【讨论】:

    • 我在我正在练习的代码上尝试了一种变体,但这并不是我预期的结果。我想获取一个在函数中声明的名为 big 的变量,并将其与另一个函数一起使用。
    • 好的。但是你仍然必须这样做,否则会导致代码的重大重写。
    【解决方案2】:
    def plop(plop):
        global ploplop 
        ploplop = 1234
        if plop == ploplop:
             print "I plopped"
    

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

    【讨论】:

      【解决方案3】:

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

      def f(plop):
          f.ploplop = 1234
          if plop == f.ploplop:
               print "I plopped"
      f(5)
      print f.plopplop
      

      【讨论】:

        【解决方案4】:

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

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

        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)
        

        【讨论】:

          猜你喜欢
          • 2019-05-09
          • 2019-10-26
          • 2011-06-12
          • 1970-01-01
          • 2015-07-29
          • 2015-04-12
          • 2017-12-20
          • 1970-01-01
          相关资源
          最近更新 更多