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.modulesharitaya çıkar), bu yüzden kullanıp kullanmadığınız import sysveya from sys import argvhiç şans tanımadığınızdan emin olun .
İki ifade arasındaki tek fark, hangi adın bağlı olduğu; import sysadı sys, modüle bağlar (so sys-> sys.modules['sys']), modülün içindeki özniteliğe doğrudan bakacak şekilde from sys import argvfarklı bir ad bağlar argv(so argv-> sys.modules['sys'].argv). sysModü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.argviki şeye bakmak zorunda; sysglobal ad alanınıza bakmak zorundadır (modülü bulur), sonra niteliği aramak zorundadır argv. Ve evet, from sys import argvniteliği doğrudan aradığınız için, niteliği aramayı atlayabilirsiniz. Ancak importifadenin 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 argvbir 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.argvbüyük bir modülde bir yerde kullanmak, ne demek istediğinizi her argvzamankinden daha net bir şekilde ortaya koyar .
Kullanmak tek yer ise argvbir olduğunu '__main__'bir aramaya bloğu main()kullanmak elbette, işlevini from sys import argvBu konuda daha mutlu hissetmiyorsanız:
if __name__ == '__main__':
from sys import argv
main(argv)
Hala import sysorada 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)