Modülün içe aktarılması hiçbir şeyi boşa harcamaz ; modül her zaman tam olarak içe aktarılır ( sys.modules
haritaya çıkar), bu yüzden kullanıp kullanmadığınız import sys
veya from sys import argv
hiç şans tanımadığınızdan emin olun .
İki ifade arasındaki tek fark, hangi adın bağlı olduğu; import sys
adı sys
, modüle bağlar (so sys
-> sys.modules['sys']
), modülün içindeki özniteliğe doğrudan bakacak şekilde from sys import argv
farklı bir ad bağlar argv
(so argv
-> sys.modules['sys'].argv
). sys
Modülden başka bir şey kullansanız da kullanmasanız da modülün geri kalanı hala orada.
İki yaklaşım arasında da performans farkı yoktur. Evet, sys.argv
iki şeye bakmak zorunda; sys
global ad alanınıza bakmak zorundadır (modülü bulur), sonra niteliği aramak zorundadır argv
. Ve evet, from sys import argv
niteliği doğrudan aradığınız için, niteliği aramayı atlayabilirsiniz. Ancak import
ifadenin hala bu işi yapması gerekir, içe aktarırken aynı özelliği arar ve yalnızca bir argv
kez kullanmanız gerekir . Eğer argv
bir döngüde binlerce kez kullanmak zorunda kalsaydınız, belki de bir fark yaratabilirdi, ancak bu özel durumda gerçekten yapmıyordu.
Biri veya diğeri arasındaki seçim, bunun yerine kodlama stiline dayanmalıdır .
Bir de büyük modül, kesinlikle kullanmayı tercih ediyorum import sys
; Kodlama önemlidir ve sys.argv
büyük bir modülde bir yerde kullanmak, ne demek istediğinizi her argv
zamankinden daha net bir şekilde ortaya koyar .
Kullanmak tek yer ise argv
bir olduğunu '__main__'
bir aramaya bloğu main()
kullanmak elbette, işlevini from sys import argv
Bu konuda daha mutlu hissetmiyorsanız:
if __name__ == '__main__':
from sys import argv
main(argv)
Hala import sys
orada kendim kullanırdım . Her şey eşit olmak (ve tam olarak performans ve yazı yazmak için kullanılan karakter sayısı bakımından ), bu benim için gözüm daha kolay.
Tamamen başka bir şey ithal ediyorsanız , o zaman belki performans devreye girer. Fakat sadece bir modülde belirli bir ismi defalarca kullanıyorsanız , örneğin kritik bir döngüde. Ancak daha sonra yerel bir ad oluşturmak (bir fonksiyon içinde) daha hızlı olacak:
import somemodule
def somefunction():
localname = somemodule.somefunctionorother
while test:
# huge, critical loop
foo = localname(bar)