Importer ou depuis importer, telle est la question

Il y a trois étapes de connaissance: vous utilisez l'outil, vous comprenez son fonctionnement, vous pouvez apprendre aux autres à travailler avec cet outil. Petit à petit, il a commencé à affluer dans le troisième et a commencé à se poser des questions qu'il n'avait pas posées auparavant.







Par exemple, quel est le meilleur: import module



ou from module import function



?







J'ai décidé de creuser un peu plus en profondeur, les réponses sur StackOverflow ne m'ont pas satisfait.







Pour ceux qui sont trop paresseux pour lire: toutes les options sont bonnes.







Conseils des créateurs de la langue



Tournons-nous vers les sources primaires, Ă  savoir - vers PEP8







Lors de l'importation d'une classe Ă  partir d'un module, vous pouvez le faire comme ceci:







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
      
      







À mon avis, l'utilisation des deux approches ne viole pas grandement l'uniformité et vous pouvez les mélanger en toute sécurité. Il est cependant souhaitable de ne pas utiliser le même module. Certains outils jurent à ceci: https://lgtm.com/rules/1818040193/







Conclusion



Pour ma part, j'adopte l'approche suivante lors de l'importation et de l'écriture de mes modules.

Ă€ utiliser import from



, sauf lorsque:







  • il y a (ou est probablement plus tard) un conflit de nom;
  • les fonctions / classes du module ont des noms courts et communs ( json



    );
  • il existe des traditions bien Ă©tablies ou des recommandations spĂ©cifiques des auteurs du module, par exemple pytest



    .



All Articles