[英]What is the most pythonic way to import 'sibling' modules into one another?
[英]What is the most pythonic way to import modules in python
任何人都可以建議我在python中導入模塊的最pythonic方式是什么? 讓我解釋一下 - 我已經閱讀了很多python代碼,並找到了幾種不同的方法來導入模塊,或者更精確 - 何時導入:
請在下面找到樣品。
#references.py
import re
import clr
import math
import System
import System.Text.RegularExpressions
import System.Random
import System.Threading
import System.DateTime
# System assemblies
clr.AddReference("System.Core")
clr.AddReference("System.Data")
clr.AddReference("System.Drawing")
...
#test.py
from references.syslibs import (Array, DataTable, OleDbConnection, OleDbDataAdapter,
OleDbCommand, OleDbSchemaGuid)
def get_dict_from_data_table(dataTable):
pass
from ... import ...
from ... import ...
def Generate(param, param1 ...):
pass
import clr
clr.AddReference("assembly")
from ... import ...
...
def generate_(txt, param1, param2):
from ... import ...
from ... import ...
from ... import ...
if not cond(param1): res = "text"
if not cond(param2): name = "default"
那么在python中導入模塊的最pythonic方法是什么?
這真的沒關系,只要你不from ... import *
。 其余的都是品味和解決循環導入問題。 PEP 8指出你應該在腳本的頂部導入,但即使這樣也不是一成不變的。
人們已經評論了主要的樣式問題(在腳本的頂部等),所以我會跳過它。
對於我的導入,我通常按模塊名稱按字母順序排序(無論是'import'還是'from ... import ...'。我將它分成以下組:標准庫;第三方模塊(來自pypi或其他);內部模塊。
import os
import system
import twisted
import zope
import mymodule_1
import mymodule_2
Python的“import”將Python模塊加載到它自己的命名空間中,因此您必須在引用模塊中的任何名稱的引用前添加模塊名稱后跟一個點
import animals
animals.Elephant()
“from”將Python模塊加載到當前名稱空間中,以便您可以引用它而無需再次提及模塊名稱
from animals import Elephant
Elephant()
要么
from animals import *
Elephant()
使用from很好,(但使用通配符導入是令人沮喪的)。 但是如果你有一個大規模的項目,從不同的模塊導入可能會導致命名密集。 像從兩個不同的模塊導入Elephant()函數會導致問題(比如使用帶*的通配符導入)
因此,如果您有一個大型縮放項目,從其他模塊導入許多不同的東西,最好使用import並使用module_name.your_class_or_function導入的東西。 否則,請使用符號...
不要使用from module import *
。 這將污染命名空間,並且非常不滿意。 但是,您可以使用from導入特定的東西; from module import something
。 這使命名空間保持干凈。 在較大的項目中,如果使用通配符,則可以將2 foo或2 bar導入到同一名稱空間中。
PEP 8表示在不同的生產線上進口。 例如:
import os
import sys
import yourmodule
from yourmodule import specific_stuff
我做的一件事是將我的導入按字母順序分為兩組。 一個是標准/第三方,第二個是內部模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.