2016-05-13 30 views
2

我得知exit是不是一個Python關鍵字,「退出」是不是一個Python關鍵字,但在使用它

import keyword 
print('exit' in keyword.kwlist)  # Output: False 

但沒有的NameError: name 'exit' is not defined提醒,而使用它不會發生錯誤。下面的代碼片段的輸出讓我感到困惑。誰能幫我嗎?

for i in range(5): 
    print(i) 
    cur=i if i<2 else exit 

print(cur) 
# Output 
0 
1 
2 
3 
4 
Use exit() or Ctrl-D (i.e. EOF) to exit 

我無法獲得相關信息約exit從Python的文檔,除了exit([code=None])

+0

@Ian,似乎'exit'等於'使用退出()或Ctrl-d(即,EOF)到exit',就像一個恆定的字符串。 – SparkAndShine

+0

這是一個有趣的行爲,我想...就像當你使用控制檯.. :) – Ian

+0

你發現https://docs.python.org/3.5/library/constants.html其中說'退出'是一個常數增加通過'site.py',不是關鍵字或內置函數。不是重複的,但請參閱http://stackoverflow.com/questions/6501121/the-difference-between-exit-and-sys-exit-in-python – cdarke

回答

4

關鍵字是python語法的一部分。它們通常在陳述中具有特殊意義(例如for,del, if ...)。這具有其他後果 - 例如您不能使用與關鍵字同名的變量。

builtinscallable objects(例如函數或至少類似於函數)python在默認情況下在名稱空間中提供的函數。的內置函數的比方sortedidvars,...

值得一提的是,exit是在交互式會話時提供了方便。強烈建議使用sys.exit代替。

+1

python文檔。調用'exit'常量:https://docs.python.org/3.5/library/constants.html – cdarke

+1

@cdarke - 是的。我猜這是因爲他們沒有更好的東西來稱呼它。它不是內建的(不希望人們在腳本中使用它,因爲它不在那裏)。有人說 - 稱它爲常量有點奇怪,在我看來...... – mgilson

+1

同意,python並沒有真正的常量(OK,只讀屬性),如果它是一個,它會中斷PEP008,因爲它應該是大寫! – cdarke

0

exit是使用交互式控制檯時的sys.exit函數。

很多東西存在,而它們不是關鍵字(例如sum,int ...)。因此,您可以綁定到現有名稱,但不能綁定到關鍵字

+2

'exit'具有相同的功能,但它與'sys.exit'不一樣。請參閱@ zondo的帖子和http://stackoverflow.com/questions/6501121/the-difference-between-exit-and-sys-exit-in-python – cdarke

2

exitQuitter類的一個實例。 Quitter類定義了一個__repr__方法,該方法返回當您在shell中鍵入exit時看到的字符串。它還定義了一個__call__方法。就像在函數中使用類時調用__init__一樣,在使用實例的時候會調用__call__。因此,exit()調用了退出程序的__call__方法。

+0

thx,'print(type(exit))'是''。 – SparkAndShine

相關問題