2016-05-13 24 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

相关问题