用 C 族语言(C、C++、Java、C# 等)编写的程序。)需要main()
功能来指示执行的起点。
另一方面,在 Python 中,没有main()
函数的概念,因为它是一种基于解释器的语言,同样可以在交互 Shell中使用。 扩展名为.py
的 Python 程序文件包含多个语句。Python 程序文件的执行从第一条语句开始。
Python 包含名为__name__
的特殊变量,该变量包含作为字符串执行的代码的范围。__main__
是顶层代码执行的顶层作用域的名称。
例如,解释器 Shell 中执行的代码的范围将是__main__
,如下所示。
Python Shell
>>>__name__
'__main__'
所有的功能和模块都将在解释器 Shell 的顶层范围__main___
内执行。
Python Shell
>>> def f1():
print(__name__)
>>> f1()
甚至内部功能都是在顶层范围__main__
内执行的:
Python Shell
>>> def f1():
print(__name__)
def f2():
print(__name__)
f2()
>>> f1()
__main__
__main__
一个 Python 文件可以包含多个可以独立执行的函数和语句。例如,考虑以下addition.py
:
addition.py
def add(x,y):
z=x+y
print('add() executed under the scope: ', __name__)
return z
x=input('Enter the first number to add: ')
y=input('Enter the secode number to add: ')
result = add(int(x),int(y))
print(x, '+', y,'=', result)
print('Code executed under the scope: ', __name__)
Python 程序文件可以通过以下方式执行:
C:\Python37> python addition.py
Enter the first number to add: 3
Enter the secode number to add: 3
add() executed under the scope: __main__
3 + 3 = 6
Code executed under the scope: __main__
可以看到,顶层范围__main__
下执行的addition.py
。
addition.py
文件可以作为模块在另一个文件中使用,也可以通过导入在交互 Shell 中使用。
让我们看看当你在交互 Shell 中导入addition
模块时会发生什么。
Python Shell
>>> import addition
Enter the first number to add: 3
Enter the secode number to add: 3
add() executed under the scope: addition
3 + 3 = 6
Code executed under the scope: addition
上面,导入语句从第一条语句开始执行。但是,我们只想使用add()
方法,不想执行其他语句。
这里我们可以使用特殊变量__name__
来检查addition.py
文件的作用域和执行语句,只有当它从命令提示符/终端独立执行时,而不是当它被导入到其他文件/模块中时。 重写addition.py
,如下图。
addition.py
def add(x, y):
z=x+y
print('add() executed under the scope: ', __name__)
return z
if __name__ == '__main__':
x=input('Enter the first number to add: ')
y=input('Enter the secode number to add: ')
result = add(int(x),int(y))
print(x, '+', y,'=', result)
print('Code executed under the scope: ', __name__)
以上,if 条件检查如果范围是__main__
,那么只执行接受用户输入并添加它们的代码。
现在,让我们看看当我们在交互 Shell 中导入上面的addition
模块时会发生什么。
Python Shell
>>> import addition
>>> addition.add(3,3)
add() executed under the scope: addition
6
也可以使用from import
语句,如下所示:
Python Shell
>>> from addition import add
>>> add(3,3)
add() executed under the scope: addition
6
如您所见,因为我们使用了一个 if 条件来检查作用域,所以它在导入addition
模块后不会执行用户输入的代码,因为它是在模块的作用域下执行的,也就是addition
作用域。 只进口add()
法。在其他模块中导入addition
模块也会发生同样的情况。
现在,让我们看看当您从命令提示符/终端执行它时会发生什么。
C:\Python37> python addition.py
Enter the first number to add: 3
Enter the secode number to add: 3
add() executed under the scope: __main__
3 + 3 = 6
Code executed under the scope: __main__
可以看到,由于addition.py
是在顶级范围__main__
内执行的,所以还是执行同样的代码。
因此,name
的值允许 Python 解释器确定模块是否是可执行脚本。如果其值为main
,将执行函数定义之外的语句。如果没有,模块的内容将被填充到顶层模块(或解释器名称空间)中,而不包含可执行部分。
注意:从命令提示符/终端执行的 Python 脚本文件将在顶层作用域__main__
作用域下执行。但是,导入模块将在模块自己的范围内执行。因此,顶层范围将是__main__
,第二个范围将是模块的范围。
因此,使用特殊变量__name__
和顶级范围__main__
增加了可重用性。Python 脚本文件可以作为独立脚本从命令提示符/终端执行,也可以作为模块导入。****
本文链接:http://task.lmcjl.com/news/1112.html