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
.