Es gibt drei Wissensstufen: Sie verwenden das Tool, Sie verstehen, wie es funktioniert, Sie können anderen beibringen, mit diesem Tool zu arbeiten. Nach und nach floss er in den dritten und begann sich Fragen zu stellen, die er zuvor noch nicht gestellt hatte.
Was ist zum Beispiel besser: import module
oder from module import function
?
Ich beschloss, mich etwas tiefer damit zu beschäftigen, die Antworten auf StackOverflow befriedigten mich nicht.
Für diejenigen, die zu faul zum Lesen sind: Alle Optionen sind gut.

Tipps von den Machern der Sprache
Wenden wir uns den primären Quellen zu, nämlich PEP8
Wenn Sie eine Klasse aus einem Modul importieren, ist dies in Ordnung:
from myclass import MyClass
from foo.bar.yourclass import YourClass
, :
import myclass
import foo.bar.yourclass
myclass.MyClass
foo.bar.yourclass.YourClass
PEP-8 .
?
, . . , .
, — . , , .
"" "" .
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!
from bottle import route, run, template
@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
run(host='localhost', port=8080)
.
import pytest
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0
. , .
import json
json.load(...)
json.loads(...)
json.dump(...)
json.dumps(...)
.
from pickle import load
from marshal import dumps
from xmlrpc.client import loads
from xml.etree.ElementTree import dump
load
json.load
, pickle.load
.
. – . , – . , . , .
, . , .
— , .
, IDE , . , . , isort.
.
. . .
, .
IDE , . : , / . , , ,
– .
100% – . , .
MonkeyPatch
- . . , , , , , , , .
, , - .
– .
, / . , .
, . import module
, from module import item as module_item
. , as
, , . .
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
Meiner Meinung nach verletzt die Verwendung beider Ansätze die Einheitlichkeit nicht wesentlich, und Sie können sie sicher mischen. Es ist jedoch nicht für dasselbe Modul wünschenswert. Einige Tools schwören darauf: https://lgtm.com/rules/1818040193/
Fazit
Für mich selbst verfolge ich beim Importieren und Schreiben meiner Module den folgenden Ansatz.
Verwenden Sie import from
, außer wenn:
- es gibt (oder wahrscheinlich später) einen Namenskonflikt;
- Funktionen / Klassen des Moduls haben kurze und gebräuchliche Namen (
json
); - Es gibt zum Beispiel gut etablierte Traditionen oder spezifische Empfehlungen der Autoren des Moduls
pytest
.