代码之家  ›  专栏  ›  技术社区  ›  nerdfever.com

嵌套Python模块导入的最佳实践

  •  4
  • nerdfever.com  · 技术社区  · 6 年前

    假设我有一个Python模块“main.py”:

    import math           # from the standard Python library
    import my_own_module
    
    ...
    
    foo = math.cos(bar)
    

    我还需要在“my_own_module.py”中导入标准的数学模块:

    import math
    
    ...
    
    baz = math.sin(qux)
    

    在这种情况下我想 import math

    这种情况下的最佳做法是:

    1. 导入数学 因为它是多余的?或者,
    2. 导入数学 在“main.py”中澄清该模块中的代码需要它?
    4 回复  |  直到 6 年前
        1
  •  5
  •   jwodder    6 年前

    提及 math.cos 在里面 main.py 意思是 import math 主.py ,无论是否 my_own_module.py 是否导入。它不是多余的,也不能被忽略(如果你试图忽略它,你会得到一个错误)。

        2
  •  3
  •   MarianD    6 年前
    import math
    

    做点什么 其他的 不仅仅是 将一个文件的全文包含到另一个文件中

    它引入了一个新的 命名空间 带着名字 math 数学 名字会在你的 当前命名空间 .

    如果你忽略了

    导入数学
    

    main.py 文件,你的命令

    foo = math.cos(bar)
    

    变成 非法的 数学 符号将不在 命名空间。

        3
  •  1
  •   blue_note    6 年前

    这不像 #include 在C++中。进口是 可选。导入模块需要能够引用其内容。这对每个执行此操作的文件都是正确的。

        4
  •  0
  •   Swift    6 年前

    好问题。简而言之,如果在py文件中使用数学函数,则需要在顶部导入模块,而不管它在其他地方导入了多少次。

    假设您的“main.py”变成“my_functions.py”,并包含一个名为foo的函数:

    #my_functions.py
    import math
    import my_own_module
    def foo(bar):
        return math.cos(bar)
    

    在my_own_module.py中:

    #my_own_module.py
    import math
    def bar(foo):
        return math.sin(foo)
    

    最后是explain.py(new main())

    #main.py
    import my_functions
    import my_own_module
    bar = my_functions.foo(10)
    foo =  my_own_module.bar(10)
    print(foo)
    print(bar)
    

    请注意,如果调用从其他文件导入的函数,则不需要添加数学。我希望这可以进一步澄清你的询问:)