Hay tres etapas de conocimiento: usas la herramienta, entiendes cómo funciona, puedes enseñar a otros a trabajar con esta herramienta. Poco a poco, comenzó a fluir hacia el tercero y comenzó a hacerse preguntas que no se había hecho antes.
Por ejemplo, ¿cuál es mejor: import module
o from module import function
?
Decidí profundizar un poco más en esto, las respuestas en StackOverflow no me satisfacían.
Para aquellos que son demasiado vagos para leer: todas las opciones son buenas.
Consejos de los creadores del idioma
Pasemos a las fuentes primarias, a saber, a PEP8
Al importar una clase desde un módulo, está bien hacerlo así:
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
En mi opinión, usar ambos enfoques no viola en gran medida la uniformidad y puede mezclarlos de manera segura. Sin embargo, es deseable que no sea para el mismo módulo. Algunas herramientas lo juran: https://lgtm.com/rules/1818040193/
Conclusión
Por mi parte, adopto el siguiente enfoque al importar y escribir mis módulos.
Usar import from
, excepto cuando:
- hay (o probablemente más tarde) un conflicto de nombres;
- las funciones / clases del módulo tienen nombres cortos y comunes (
json
); - hay tradiciones bien establecidas o recomendaciones específicas de los autores del módulo, por ejemplo
pytest
.