Kapan bermanfaat menggunakan inline, sekali pakai mengimpor dalam Python?
Sebagai contoh:
__import__("x").doSomething()
Apakah yang di atas pernah lebih pendek dari yang di bawah ini?
import x
x.doSomething()
Atau
from x import*
doSomething()
__import__
akan membantu di dalam fungsi bernama karena itu akan berada di dalam blok berlekuk. Impor akan dikenakan biaya tambahan karena ada dua baris dan menjorok ke dalam. (Itu dengan asumsi bahwa impor tidak diperbolehkan di luar fungsi.)import
akan disebut bagian dalam blok berlekuk? Mungkin tidak.f=
karena fungsi anonim diizinkan dan dapat memiliki konten di luar fungsi .Saat mengimpor beberapa modul dengan nama yang cukup panjang, akan sangat membantu untuk menetapkan
__import__
fungsi ke variabel yang lebih pendek dan menggunakannya untuk imporContoh:
Pernyataan impor reguler - 97 byte
Menetapkan
__import__
kei
- 94 byte:sumber
Hampir tidak pernah.
__import__("x").doSomething()
membutuhkan 15+ x karakter untuk merujuk ke modul dengan nama panjang x .import x\nx.doSomething()
membutuhkan 9 + 2 * x karakter. Fungsi-fungsi ini tumpang tindih pada x = 6, jadi dibandingkan dengan cara ini, setiap modul dengan nama yang lebih panjang lebih baik digunakan__import__
, apa pun manfaat yang lebih pendek dari impor normal:Namun,
from x import*\ndoSomething()
hanya membutuhkan 14+ x karakter, jadi dibandingkan dengan impor normal, itu tidak sepadan kecuali nama modul lebih panjang dari 5 karakter:Ini semua mengasumsikan bahwa Anda merujuk ke fungsi / kelas / apa pun hanya sekali. Jika Anda merujuknya lebih dari sekali, rumus berubah, dan versi yang terakhir mungkin menjadi pemenang. Jika Anda menggunakan sesuatu yang panjang dari modul yang diimpor beberapa kali, versi lain akan menang:
from x import y as z
memberi Anda 18+ x + y + z * ( n +1) karakter untuk n penggunaan z , yang merupakan peningkatan besar jika y besar, karena z dapat dibuat 1.sumber
__import__("x").doSomething()
menjadi satu char lebih pendek darifrom x import*;doSomething()
. Mungkin Anda menghitung baris baru sebagai dua karakter? Dan saya ingat titik impas menjadi 5, jatuh di antaratime
danrandom
.z=__import__("x").y
adalah byte yang lebih pendek darifrom x import y as z
from x import*;z=y
.