main()函数似乎不起作用

4 python program-entry-point

我是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的创建者)就在这里写了这篇文章.


Ter*_*ryA 7

Python与其他自动调用main()函数的语言不同.您所做的就是定义您的功能.

您必须手动调用您的主要功能:

main()
Run Code Online (Sandbox Code Playgroud)

此外,您可能会在一些代码中看到这一点:

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)


Kar*_*tel 5

有些事情确实发生了,只是不明显

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__等于其他值(这只是......几乎肯定没用)。