Mengimpor modul tidak membuang apa pun ; modul selalu sepenuhnya diimpor (ke sys.modulespemetaan), jadi apakah Anda menggunakan import sysatau from sys import argvtidak membuat kesulitan.
Satu-satunya perbedaan antara kedua pernyataan itu adalah apa nama yang terikat; import sysmengikat nama syske modul (jadi sys-> sys.modules['sys']), sementara from sys import argvmengikat nama yang berbeda argv,, menunjuk langsung ke atribut yang terdapat di dalam modul (jadi argv-> sys.modules['sys'].argv). Sisa sysmodul masih ada, apakah Anda menggunakan hal lain dari modul atau tidak.
Juga tidak ada perbedaan kinerja antara kedua pendekatan. Ya, sys.argvharus mencari dua hal; itu harus mencari sysdi namespace global Anda (menemukan modul), kemudian mencari atributnya argv. Dan ya, dengan menggunakan from sys import argvAnda dapat melewati pencarian atribut, karena Anda sudah memiliki referensi langsung ke atribut. Tetapi importpernyataan itu masih harus melakukan itu, itu mencari atribut yang sama ketika mengimpor, dan Anda hanya perlu menggunakannya argv sekali . Jika Anda harus menggunakan argvribuan 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.argvsuatu tempat dalam modul besar membuatnya lebih jelas apa yang Anda maksud daripada yang argvpernah ada.
Jika satu-satunya tempat yang Anda gunakan argvadalah dalam '__main__'blok untuk memanggil main()fungsi, tentu saja gunakan from sys import argvjika Anda merasa lebih bahagia tentang hal itu:
if __name__ == '__main__':
from sys import argv
main(argv)
Saya masih menggunakannya di import syssana 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)