python程序的name属性作用是什么_python __name__ == ‘__main__’详细解释+例子
學(xué)習(xí)過C語(yǔ)言或者Java語(yǔ)言的盆友應(yīng)該都知道程序運(yùn)行必然有主程序入口main函數(shù),而python卻不同,即便沒有主程序入口,程序一樣可以自上而下對(duì)代碼塊依次運(yùn)行,然后python不少開源項(xiàng)目或者模塊中依然存在 __name__ == “__main__” 這種寫法,具體是上面意思呢?
一.語(yǔ)義解釋
1.__name__
__name__?是python的內(nèi)置屬性,是系統(tǒng)全局變量!每一個(gè)py文件都有一個(gè)屬于自己的__name__:
如果py文件作為模塊被導(dǎo)入(import),那么__name__就是該py文件的文件名(也稱 模塊名);
如果py文件直接運(yùn)行時(shí)(Ctrl+Shift+F10),那么__name__默認(rèn)等于字符串”__main__”;
舉個(gè)簡(jiǎn)單的例子:假如你名字是張三,在朋友眼中,你是張三(__name__ == '張三');在你自己眼中,你是你自己(__name__ == '__main__')
2.”__main__”
“_ _main_ _”?實(shí)際上就是一個(gè)字符串,用來(lái)鑒別程序入口,沒有太多花里胡哨的東西.
3.__name__ == “__main__”
當(dāng).py文件被直接運(yùn)行?(Ctrl+Shift+F10)時(shí),?if??__name__ == “__main__”??之下的代碼塊將被運(yùn)行,該語(yǔ)句就相當(dāng)與python的main主函數(shù)入口,示例代碼如下:
a.新建一個(gè) my_name.py 文件,作為模塊文件:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@file name: my_name.py
Created on: 2020-9-03
Author: Charlie
This program is just a test; you can run it.
@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!
"""
import os
import subprocess
import sys
# 定義一個(gè)函數(shù)并打印 __name__
def prit_name():
print ("my_name.py __name__:", __name__)
if __name__ == "__main__":
# 獨(dú)立執(zhí)行
prit_name()
print ("run alonely!")
else:
# 被導(dǎo)入
print ("not run alonely!")
=======================================
b.新建一個(gè) python_main.py 文件,作為啟動(dòng)文件 (Ctrl+Shift+F10):
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@file name: python_main.py
Copyright (C) 2020 GRGBanking Corporation
Created on: 2020-9-03
Author: Charlie
This program is just a test; you can run it.
@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!
"""
import os
import subprocess
import sys
# 導(dǎo)入 my_name 模塊
import my_name
phonebook = {'alice':'123','tom':'456'}
alice_num = phonebook["alice"]
num = 3+6;
# 定義一個(gè)函數(shù)并打印 __name__
def prit_name():
my_name.prit_name()
print("python_main.py __name__:", __name__)
print ("alice_num = %d",alice_num)
print('%s' % 'alice_num')
print('%s' % alice_num)
print('%d' % 56)
print('%d' % num)
if __name__ == "__main__":
prit_name()
輸出結(jié)果:
pchui@ubuntu:~/work/RK3399/charlie$ python python_main.py
not run alonely!
('my_name.py __name__:', 'my_name')
('python_main.py __name__:', '__main__')
('alice_num = %d', '123')
alice_num
123
56
9
由此可見,作為啟動(dòng)文件 python_main.py ,該文件的內(nèi)置屬性 __name__ 等于 “__main__”,而my_name.py 作為導(dǎo)入模塊,該模塊的 __name__ 等于文件名(也稱模塊名字),所以my_name.py 中的 表達(dá)式 if __name__ == “__main__” 并不成立!
當(dāng)直接將my_name.py作為啟動(dòng)文件時(shí)?(Ctrl+Shift+F10),輸出:
my_name.py?__name__:?__main__
如果py文件作為模塊被導(dǎo)入(import),那么__name__就是該py文件的文件名(也稱 模塊名);
如果py文件直接運(yùn)行時(shí)(Ctrl+Shift+F10),那么__name__默認(rèn)等于字符串”__main__”;
二.作用
1.__name__ == “__main__” 作為啟動(dòng)py文件的main函數(shù)入口
2.一個(gè)項(xiàng)目中必然會(huì)包含多個(gè)模塊文件,每個(gè)模塊文件在自己寫完代碼之后會(huì)做一些簡(jiǎn)單的測(cè)試用于檢測(cè)bug 或者 對(duì)自己的函數(shù)調(diào)用寫一個(gè)簡(jiǎn)單的示例,而恰到好處的是:__name__ == “__main__”? 既不會(huì)影響你的測(cè)試代碼,也不會(huì)影響別人調(diào)用你的接口函數(shù)。
if __name__ == "__main__":
# 獨(dú)立執(zhí)行
prit_name()
print ("run alonely!")
else:
# 被導(dǎo)入
print ("not run alonely!")
總結(jié)
以上是生活随笔為你收集整理的python程序的name属性作用是什么_python __name__ == ‘__main__’详细解释+例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不到30的成本,还不赶紧造起来——盘点软
- 下一篇: 没有bug队——加贝——Python 练