2012-06-25 65 views
0

我來自ruby/C#,並且是Python新手。Python之外的調用方法

我在看下面的代碼:

def raiseFlag(): 
    global flag 
    flag = 1 

class TermStructureTest(): 

    def testImpliedObs(self): 
     global flag 
     flag = None 
     h = RelinkableYieldTermStructureHandle() 
     settlement = self.termStructure.referenceDate() 
     new_settlement = self.calendar.advance(settlement,3,Years) 
     implied = ImpliedTermStructure(h,new_settlement) 
     obs = Observer(raiseFlag) 
     obs.registerWith(implied) 
     h.linkTo(self.termStructure) 
     if not flag: 
      self.fail("Observer was not notified of term structure change") 

爲什麼是它的工作叫「raiseFlag」的TermStructureTest()類中?

+0

但這代碼*不*調用'raiseFlag'。 – kindall

+0

它可能不會*調用它,但它確實使用它。爲了這個問題的目的,一個小小的狡辯。 – tsm

+0

OP:閱讀Python風格指南(http://www.python.org/dev/peps/pep-0008/)。一方面,方法應該命名爲'like_this',而不是'likeThis'(蛇案而不是駱駝案例)。 – tsm

回答

6

頂層定義的函數據說是在模塊(文件)級定義的。所以如果你在同一個文件中,它可以全局訪問。

如果您在不同的文件是你需要

import foo #then use foo.raiseFlag() 

from foo import raiseFlag #use raiseFlag() 
+0

具體來說:http://www.python.org/dev/peps/pep-3104/用於Python 3.x和http://www.python.org/dev/peps/pep-0227/用於Python 2.x –

+0

這與Ruby不同,對嗎? – Wadstk