我是Python的新手,我使用的是Python 3.3.2.我运行了以下代码:
import sys
def random(size=16):
return open(r"C:\Users\ravishankarv\Documents\Python\key.txt").read(size)
def main():
key = random(13)
print(key)
Run Code Online (Sandbox Code Playgroud)
并期望它在密钥文件中打印内容.该程序在IDLE上运行没有错误,但没有任何反应.密钥未打印.
有人可以帮忙吗?
小智 10
您根本没有调用主函数,因此Python解释器不会为您调用它.
将其添加为最后一行,以便始终调用它:
main()
Run Code Online (Sandbox Code Playgroud)
如果您使用常见的:
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
它将确保只有在Python解释的那个模块作为起始代码执行时才调用main方法,这里将讨论更多关于这个问题:if __name__ =="__ main__":怎么办?
如果你想知道如何编写最好的'main'函数,Guido van Rossum(Python的创建者)就在这里写了这篇文章.
Python与其他自动调用main()函数的语言不同.您所做的就是定义您的功能.
您必须手动调用您的主要功能:
main()
Run Code Online (Sandbox Code Playgroud)
此外,您可能会在一些代码中看到这一点:
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
Python 从上到下运行脚本。def是一条语句,遇到它时就会执行,就像任何其他语句一样。然而,这样做的效果是创建函数(并为其分配一个名称),而不是调用它。类似地,import是一个加载另一个模块的语句(并使其代码从上到下运行,具有自己的全局变量上下文),并为其分配一个名称。
因此,当示例代码运行时,会发生三件事:
标准库模块的代码sys运行,然后sys我们自己的模块的全局变量中的名称绑定到该模块
从 for 的代码创建一个函数random,然后将名称random绑定到该函数
从 for 的代码创建一个函数main,然后将名称main绑定到该函数
没有任何东西可以调用这些函数,因此它们不会被调用。由于它们未被调用,因此它们内部的代码不会运行 - 它仅用于创建函数。由于该代码不运行,因此不会读取该文件,也不会print执行任何操作。
与其他一些语言不同,Python不关心函数的名称main或其他名称。它不会自动运行。
正如 Python 禅宗所说:“显式优于隐式”。如果我们想要调用一个函数,我们就必须调用它。唯一自动运行的是顶层的东西,因为这些是我们明确给出的指令。
在许多现实世界的脚本中,您可能会看到一行内容if __name__ == '__main__'::这不是“脚本开始的地方”。该脚本从上到下运行。
请阅读if __name__ == "__main__": 会做什么?了解此类语句的目的(简短版本:它确保如果其他人将此文件作为模块,if则跳过部分顶级代码)。import它不是强制性的,并且没有任何特殊的“信号”目的来说明代码从哪里开始运行。这只是一个完全正常的if语句,正在检查一个稍微不寻常的情况。没有什么要求您在脚本中使用它(除了想要检查它检查的内容之外),也没有什么可以阻止您多次使用它。没有什么可以阻止您检查是否__name__等于其他值(这只是......几乎肯定没用)。