簡體   English   中英

嵌套Python模塊導入的最佳實踐

[英]Best practice for nested Python module imports

假設我有一個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)

在這種情況下,我認為“main.py”中的import math是多余的,可以省略。

在這種情況下,最佳做法是什么:

  1. 省略“main.py”中的import math ,因為它是多余的? 要么,
  2. import math保存在“main.py”中以澄清該模塊中的代碼是否需要它?

到基准math.cosmain.py意味着import math是必需的main.py ,無論my_own_module.py進口與否。 它不是多余的,也不能省略(如果你試圖省略它,你會得到一個錯誤)。

import math

做一些事情不是簡單地包括一個文件的全文為其他

它引入了一個名為math的新命名空間 ,這個math名稱將在您當前的命名空間中知道。

如果你省略了

import math

從你的main.py文件,你的命令

foo = math.cos(bar)

變得非法 ,因為在main.py命名空間中不會(識別) math符號。

這不是,例如C ++中的#include 導入不是可選的。 導入模塊需要能夠引用其內容。 這對於每個執行此操作的文件都是如此。

一個好問題。 簡短的回答是肯定的,如果你在py文件中使用數學函數,那么無論在別處導入多少次,你都需要在頂部導入模塊。

當我們將一個thrid文件放入混合時,它會變得有趣,我們稱之為“explain.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)

請注意,如果調用從其他文件導入的函數,則不需要添加數學。 我希望這可以進一步明確你的詢問:)

但是,值得注意的是,這將從當前命名空間中排除數學,因此對數學函數的任何進一步調用都是無用的。

暫無
暫無

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

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