Mengimpor modul tidak membuang apa pun ; modul selalu sepenuhnya diimpor (ke sys.modules
pemetaan), jadi apakah Anda menggunakan import sys
atau from sys import argv
tidak membuat kesulitan.
Satu-satunya perbedaan antara kedua pernyataan itu adalah apa nama yang terikat; import sys
mengikat nama sys
ke modul (jadi sys
-> sys.modules['sys']
), sementara from sys import argv
mengikat nama yang berbeda argv
,, menunjuk langsung ke atribut yang terdapat di dalam modul (jadi argv
-> sys.modules['sys'].argv
). Sisa sys
modul masih ada, apakah Anda menggunakan hal lain dari modul atau tidak.
Juga tidak ada perbedaan kinerja antara kedua pendekatan. Ya, sys.argv
harus mencari dua hal; itu harus mencari sys
di namespace global Anda (menemukan modul), kemudian mencari atributnya argv
. Dan ya, dengan menggunakan from sys import argv
Anda dapat melewati pencarian atribut, karena Anda sudah memiliki referensi langsung ke atribut. Tetapi import
pernyataan itu masih harus melakukan itu, itu mencari atribut yang sama ketika mengimpor, dan Anda hanya perlu menggunakannya argv
sekali . Jika Anda harus menggunakan argv
ribuan kali dalam satu lingkaran itu mungkin bisa membuat perbedaan, tetapi dalam kasus khusus ini sebenarnya tidak.
Pilihan antara satu atau yang lain itu, harus didasarkan pada gaya pengkodean saja.
Dalam modul besar , saya pasti akan menggunakan import sys
; dokumentasi kode penting, dan menggunakan sys.argv
suatu tempat dalam modul besar membuatnya lebih jelas apa yang Anda maksud daripada yang argv
pernah ada.
Jika satu-satunya tempat yang Anda gunakan argv
adalah dalam '__main__'
blok untuk memanggil main()
fungsi, tentu saja gunakan from sys import argv
jika Anda merasa lebih bahagia tentang hal itu:
if __name__ == '__main__':
from sys import argv
main(argv)
Saya masih menggunakannya di import sys
sana sendiri. Semua hal menjadi sama (dan mereka, tepatnya, dalam hal kinerja dan jumlah karakter yang digunakan untuk menulisnya), itu hanya lebih mudah bagi saya.
Jika Anda mengimpor sesuatu yang lain sama sekali, maka mungkin kinerja ikut bermain. Tetapi hanya jika Anda menggunakan nama tertentu dalam sebuah modul berkali-kali , dalam loop kritis misalnya. Tetapi kemudian membuat nama lokal (dalam suatu fungsi) akan menjadi lebih cepat:
import somemodule
def somefunction():
localname = somemodule.somefunctionorother
while test:
# huge, critical loop
foo = localname(bar)