Importar o de importación, esa es la cuestión

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



    .



All Articles