Importieren oder importieren, das ist die Frage

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



    .



All Articles