簡體   English   中英

python中的`def main(args):`有意義嗎?

[英]does `def main(args):` in python make sense?

我看到很多 Python 代碼是這樣的:

def do_something(arg):
    # some stuff

def do_something_else(arg):
    # some other stuff

def main(args):
    do_something(args.an_arg)
    do_something_else(args.another_arg)

if __name__ == "__main__":
    args = parse_args()
    main(args)

我想知道為什么/是否定義該main函數有意義。 如果函數main不打算從其他地方導入,那么這看起來非常好:

def do_something(arg):
    # some stuff

def do_something_else(arg):
    # some other stuff

if __name__ == "__main__":
    args = parse_args()
    do_something(args.an_arg)
    do_something_else(args.another_arg)

...如果它打算從其他地方導入,則應該給它一個更有意義的名稱(並以更常見的方式接受參數):

def do_something(arg):
    # some stuff

def do_something_else(arg):
    # some other stuff

def do_two_things(arg1, arg2):
    do_something(args.an_arg)
    do_something_else(args.another_arg)

if __name__ == "__main__":
    args = parse_args()
    do_two_things(args.an_arg, args.another_arg)

這是正確的嗎? 像上面的例子那樣定義一個main函數有意義嗎?

...如果它打算從其他地方導入,則應該給它一個更有意義的名稱(並以更常見的方式接受參數)

在這里支持像main這樣的通用名稱的main是特別是通用的:即多態性。

例如,假設您有一堆要測試的模塊,這些模塊設計為獨立執行(不是從其他模塊導入)。 但是為了測試它們,你想使用 python 腳本創建一個臨時目錄,用生成的文件填充它作為測試內容,然后以一種通用的方式執行這些模塊中的每一個,而不考慮每個模塊的獨特差異您想以這種方式進行測試。

要在 python 中完成這一切,您需要這些要測試的模塊為其所有主要入口點函數提供一個共同的標識符,無論是main函數還是其他函數(關鍵是所有模塊都給它們相同的標識符)一個統一的公共接口)。 所有這些函數的主入口點函數的名稱必須相當不起眼,因為該函數是該模塊的主要入口點,因為每個模塊都必須導出一個與下一個模塊具有相同名稱的函數在它旁邊是為了允許這種依賴於每個模塊的多態代碼提供統一的公共接口。

當在這種上下文中需要多態時,無論是用於類還是模塊,我們可以使用的最具描述性的名稱不能考慮太多細節。 它不能考慮每個模塊具體在做什么,因為它需要跨模塊統一 在這種特殊情況下,我們需要一個非常通用的名稱,而main是一個非常通用的名稱。

因此,人們可能更喜歡這里的非描述性名稱,而不是准確描述函數的作用,而是允許一大堆模塊提供具有相同名稱的函數,以便它們可以通過完全相同的代碼以相同的方式統一使用.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM