91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python 如何寫好main函數

發布時間:2020-08-18 10:55:03 來源:網絡 閱讀:1048 作者:專注地一哥 欄目:編程語言

每個程序員在學習編程的過程中,肯定沒少寫過main()函數,Python程序員也不例外。本文為大家分享Python之父Guido van Rossum推薦的函數寫法,可以大大提高這個函數的靈活性。
一般來說,Python程序員可能是這樣寫main()函數的:
"""Module docstring.
This serves as a long usage message.
"""
import sys
import getopt
def main():

parse command line options

try:
    opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
except getopt.error, msg:
    print msg
    print "for help use --help"
    sys.exit(2)
# process options
for o, a in opts:
    if o in ("-h", "--help"):
        print __doc__
        sys.exit(0)
# process arguments
for arg in args:
    process(arg) # process() is defined elsewhere

if name == "main":
main()
Guido也承認之前自己寫的main()函數也是類似的結構,但是這樣寫的靈活性還不夠高,尤其是需要解析復雜的命令行選項時。為此,他向大家提出了幾點建議。
添加可選的 argv 參數
首先,修改main()函數,使其接受一個可選參數 argv,支持在交互式shell中調用該函數:
def main(argv=None):
if argv is None:
argv = sys.argv

etc., replacing sys.argv with argv in the getopt() call.

這樣做,我們就可以動態地提供 argv 的值,這比下面這樣寫更加的靈活:
def main(argv=sys.argv):

etc.

這是因為在調用函數時,sys.argv 的值可能會發生變化;可選參數的默認值都是在定義main()函數時,就已經計算好的。
但是現在sys.exit()函數調用會產生問題:當main()函數調用sys.exit()時,交互式解釋器就會推出!解決辦法是讓main()函數的返回值指示退出狀態(exit status)。因此,最后面的那行代碼就變成了這樣:
if name == "main":
sys.exit(main())
并且,main()函數中的sys.exit(n)調用全部變成return n。
定義一個Usage()異常
另一個改進之處,就是定義一個Usage()異常,可以在main()函數最后的except子句捕捉該異常:
import sys
import getopt
class Usage(Exception):
def init(self, msg):
self.msg = msg
def main(argv=None):
if argv is None:
argv = sys.argv
try:
try:
opts, args = getopt.getopt(argv[1:], "h", ["help"])
except getopt.error, msg:
raise Usage(msg)

more code, unchanged

except Usage, err:
    print >>sys.stderr, err.msg
    print >>sys.stderr, "for help use --help"
    return 2

if name == "main":
sys.exit(main())
這樣main()函數就只有一個退出點(exit)了,這比之前兩個退出點的做法要好。而且,參數解析重構起來也更容易:AxiTrader返傭www.kaifx.cn/broker/axitrader.html,在輔助函數中引發Usage的問題不大,但是使用return 2卻要求仔細處理返回值傳遞的問題。
python 中name == ‘main’ 的作用
經典的英文解釋:Make a script both importable and executable
中文解釋:使腳本可以被調用import并且也可以直接運行
1、直接運行

cat test_fun.py

def fun():
print(name)
print('this is fun')
if name == 'main':
fun()
print('this is main')
python test_fun.py
main
this is fun
this is main
2、被調用import

import test_fun
test_fun.fun()
test_fun
this is fun
調用導入時:此處輸出沒有顯示”main“,也就是說模塊name = ‘main’ 下面的代碼并未執行,main函數沒有執行。
這個功能還有一個用處:調試代碼的時候,在”if name == ‘main‘“中加入一些我們的調試代碼,我們可以讓外部模塊調用的時候不執行我們的調試代碼,但是如果我們想排查問題的時候,直接執行該模塊文件,調試代碼能夠正常運行!
?python是一種解釋型腳本語言,和C/C++語言不同,C/C++程序從main函數開始執行,python程序從開始到結尾順序執行。先總結下python中的main函數的作用:讓模塊(函數)可以自己單獨執行(調試),相當于構造了調用其它函數的入口,這就類似于C/C++里面的mian函數了。
一方面:我們想要自己單獨執行(調試)
這里我們實際調試一下(假設這個文件是test.py):
#test.py
print('Hello World!')
def aaa():
print('this message is from aaa function')
def main():
print('this message is from main function')
if name == 'main':
main()
print ('now name is %s' %name)
執行python test.py??輸出:
Hello World!
this message is from main function
now name is main
這里我們看到我們定義的aaa函數沒有被執行,而main函數里面的內容被執行了,表明?if name == 'main':?這條判斷語句是通過的,執行了判斷條件里的main();?
另一方面:通過import命令就可以使用其它.py文件里面的函數,我們將test.py中的模塊(函數)導入call.py,需注意test.py和call.py放在同一個文件夾下;
#call.py
from test import aaa
aaa()
print ('now name is %s' %name)
執行python? call.py? 輸出:
Hello World!
this message is from aaa function
now name is main
所以當我們自己寫了.py文件,想要測試里面的函數時,就這樣構造一個main函數入口就可以調用測試自己寫的函數啦~

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大连市| 丰顺县| 新宁县| 曲水县| 壤塘县| 湄潭县| 固镇县| 札达县| 商水县| 邢台县| 广水市| 兴安盟| 万盛区| 朝阳区| 瑞昌市| 万山特区| 鹤岗市| 昭觉县| 通化市| 镇赉县| 荣昌县| 渭南市| 长武县| 泸西县| 洪雅县| 古丈县| 靖安县| 含山县| 文安县| 南投县| 慈利县| 佛学| 常宁市| 瑞安市| 渭南市| 湖北省| 沁源县| 九龙坡区| 天气| 武城县| 福贡县|