兩個print ('foo here!')
和print ('bar here!')
因爲布爾表達式name == foo
和name == 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:
的第一個元素在你的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!
你想要這樣做?僅僅通過閱讀代碼,我會說「如果name == foo」可能不是你想要的(在foo的定義中),它將「name」(這是一個字符串列表)與「foo」進行比較(a函數對象),那些永遠不會相等。 –