2014-02-19 120 views
0

我正在試圖獲得一個函數調用,但我不能打印它。請在這裏幫忙。 這是代碼:爲什麼功能代碼不能正常工作

def foo(): 
    name = input ('>>').lower().split() 
    for item in name: 
     if name == foo: 
      print ('foo here!') 
    else: 
     bar() 
def bar(): 
    name = input ('>>').lower().split() 
    for item in name: 
     if name == bar: 
      print ('bar here!') 


def start(): 
    print('Welcome Home') 
    name = input 
    foo() 


start() 
+0

你想要這樣做?僅僅通過閱讀代碼,我會說「如果name == foo」可能不是你想要的(在foo的定義中),它將「name」(這是一個字符串列表)與「foo」進行比較(a函數對象),那些永遠不會相等。 –

回答

0

兩個print ('foo here!')print ('bar here!')因爲布爾表達式name == fooname == bar進行評估,以虛假的在大多數情況下不執行。例如,在定義foo()下的布爾表達式name == foo中,將列表name的第一個元素與foo進行比較。 foo返回對象函數foo()的友好字符串表示形式(通常用於調試目的)。通過執行print(foo)可以實際嘗試並打印foo(),並將返回的值分配給foo()中的列表name(在我的例子中爲<function foo at 0x7fad58f35d40> - 它可能在您的機器上不同)。這將評估name == foo爲真,因此將導致執行print ('foo here!')。話雖這麼說,here is how for loop works

enter image description here

的第一個元素在你的name名單分配給item變量。接下來,執行for循環的主體。執行正文後,將在for循環的主體再次執行之前將列表name中的第二個元素分配給變量item。這個過程繼續,直到name列表中沒有更多的元素。現在爲了讓print('foo here!')被執行,你的if語句中的布爾表達式必須被評估爲true。

下面是一個例子,其中print('foo here!')將在用戶在運行該程序後鍵入foo時執行。

def foo(): 
    name = input('>>').lower().split() 

    for item in name: 
     if item == 'foo': 
      print('foo here!') 
     else: 
      bar() 

def bar(): 
    name = input('>>').lower().split() 

    for item in name: 
     if item == 'bar': 
      print('bar here!') 

print('Welcome Home') 
foo() 

在定義foo(),列表name的第一個元素與所述string FOO,從而if name == 'foo'被滿足的條件進行比較。這是一個執行的樣本:

[[email protected] Python]$ ./foobar.py 
Welcome Home 
>>foo 
foo here! 
相關問題