Python'da satır içi, tek kullanımlık içe aktarmayı kullanmak ne zaman yararlıdır?
Örneğin:
__import__("x").doSomething()
Yukarıdakiler aşağıdakilerden daha kısa mı?
import x
x.doSomething()
Veya
from x import*
doSomething()
Python'da satır içi, tek kullanımlık içe aktarmayı kullanmak ne zaman yararlıdır?
Örneğin:
__import__("x").doSomething()
Yukarıdakiler aşağıdakilerden daha kısa mı?
import x
x.doSomething()
Veya
from x import*
doSomething()
Yanıtlar:
Ayrı bir ifade yazmaktan kaçınmanıza izin verdiği için, anonim lambda işlevinde bir modülü yalnızca bir kez kullanmak istiyorsanız bu yararlı olabilir:
lambda x:__import__('SomeModule').foo(x,123)
bir bayt daha kısa
from SomeModule import*;f=lambda x:foo(x,123)
Kod adlandırılmış bir işlev __import__veya programsa, en uç veya çelişkili durumlar dışında yardımcı olma olasılığı düşüktür.
importgirintili bir bloğun içine çağrılacak bir zaman olur muydu? Muhtemelen değil.
f=, çünkü anonim fonksiyonlar izin verilir ve içerik dışında fonksiyonu olabilir .
Yeterince uzun adlara sahip birden fazla modül içe aktarırken, __import__işlevi daha kısa bir değişkene atamak ve içe aktarma için kullanmak yardımcı olabilir
Düzenli ithalat bildirimleri - 97 bayt
itertools ithalatından *
datetime ithalatından *
listeyi yazdır (permütasyonlar ("abc"))
print datetime.now ()
Atama __import__için i- 94 bayt:
i = __ import__
listeyi yazdır (i ("itertools"). permütasyonlar ("abc"))
print i ("datetime"). datetime.now ()
__import__("x").doSomething()15+ ihtiyacı x uzunluk bir adla bir modül başvurmak için karakterleri x .
import x\nx.doSomething()9 + 2 * x karakter gerektirir. Bu işlevler x = 6 ile çakışır , bu nedenle bu şekilde daha uzun ada sahip herhangi bir modül daha iyi kapalıdır __import__, normal içe aktarmalardan daha kısa faydalar sağlar:

Bununla birlikte, from x import*\ndoSomething()sadece 14+ x karaktere ihtiyaç duyar , bu nedenle modül adı 5 karakterden uzun olmadığı sürece normal içe aktarmaya kıyasla buna değmez:

Tüm bunlar, sadece bir kez bir işleve / sınıfa / neye başvurduğunuzu varsayar. Bir kereden fazla başvurursanız, formüller değişir ve ikinci sürüm kazanan olabilir. İçe aktarılan bir modülden uzun bir süre birkaç kez kullanmanız durumunda, başka bir sürüm kazanır:
from x import y as zağları Eğer 18 + x + y + z * ( n + 1) karakterleri için n kullanımları z ise büyük bir gelişmedir, y büyük olduğundan, z 1 yapılabilir.
__import__("x").doSomething()daha kısa bir karakter buluyorum from x import*;doSomething(). Belki yeni satırı iki karakter olarak sayıyorsunuz? Ve başabaş noktası, 5 olmak arasında düşen hatırlama timeve random.
z=__import__("x").ybir bayt daha kısafrom x import y as z
from x import*;z=y.
__import__girintili bir bloğun içinde olacağından adlandırılmış bir işlevin içinde yardımcı olur. Bir içe aktarma, iki satırda ve girintili olduğundan fazladan ücretlendirilir. (Bu, işlevin dışında ithalata izin verilmediği varsayılmaktadır.)