为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 的 main() 中调用参数是不好的做法吗

在 Python 的 main() 中调用参数是不好的做法吗

MM们 2021-08-11 17:09:52
函数名称是否应该main()始终为空并在函数本身内调用参数,或者将它们作为函数的输入是否可以接受,例如main(arg1, arg2, arg3)?我知道它有效,但我想知道这是否是糟糕的编程实践。抱歉,如果这是重复的,但我看不到专门针对 Python 回答的问题。
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

在大多数其他编程语言中,您要么有零个参数,要么有两个参数:


int main(char *argv[], int argc)

表示传递给参数的参数。但是,在 Python 中,这些是通过sys模块访问的:


import sys


def main():

    print(sys.argv, len(sys.argv))

但是你可以扩展它,这样你就可以将 argv 和 argc 传递到你的 python 函数中,类似于其他语言是的:


import sys


def main(argv, arc):

    print(argv, arc)


if __name__ == '__main__':

    main(sys.argv, len(sys.argv))

但是让我们暂时忘记 argv/argc -为什么要将某些内容传递给 main。您在 main 之外创建了一些东西,并希望将它传递给 main。这可能发生在两种情况下:


您从其他函数多次调用 main 。

您已经在main要传递的外部创建了变量。

第 1 点绝对是不好的做法。main应该是唯一的,并且只在程序开始时调用一次。如果需要多次调用,那么里面的代码main就不属于 inside main。把它分开。


第 2 点可能看起来有道理,但是您在实践中这样做:


def main(a, b):

    print(a, b)


if __name__ == '__main__':

    x = 4

    y = 5

    main(x, y)

但是不是x和y全局变量吗?好的做法是假设这些位于文件的顶部(以及多个其他属性 - 它们是常量等),并且您不需要将它们作为参数传递。


查看完整回答
反对 回复 2021-08-11
?
Helenr

TA贡献1780条经验 获得超4个赞

我绝对更喜欢看到main参数而不是sys.argv直接访问。


这使得其他 Python 模块更容易重用 main 函数。


import sys


def main(arg):

    ...


if __name__ == "__main__":

    main(sys.argv[1])

现在,如果我想将此模块作为另一个模块的脚本执行,我可以编写(在我的另一个模块中)。


from main_script import main


main("use this argument")

如果main使用,sys.argv这将更加困难。


查看完整回答
反对 回复 2021-08-11
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号