Jadual Kandungan
Tulis kod untuk melaksanakannya
Pendekatan disyorkan PEP0690
Perkataan akhir
Rujukan
Rumah pembangunan bahagian belakang Tutorial Python Bagaimana untuk melaksanakan import malas import-malas Python

Bagaimana untuk melaksanakan import malas import-malas Python

Apr 20, 2023 am 11:04 AM
python apl modul

Jika program Python anda mempunyai bilangan import yang banyak dan bermula dengan perlahan, maka anda harus mencuba import malas Artikel ini berkongsi kaedah untuk mencapai import malas. Walaupun PEP0690[1] telah mencadangkan untuk menambah ciri ini pada pengkompil Python (-L) atau perpustakaan standard, versi Python semasa masih belum melaksanakannya.

Seperti yang kita semua tahu, aplikasi Python akan melakukan operasi import sebelum melaksanakan operasi sebenar pengguna Modul yang berbeza mungkin datang dari lokasi yang berbeza, sesetengah modul mungkin sangat memakan masa untuk dijalankan, dan sesetengah modul mungkin tidak. berfungsi sama sekali. Ia dipanggil oleh pengguna, jadi pengimportan banyak modul adalah membuang masa.

Jadi kita memerlukan import malas Apabila import malas digunakan, menjalankan import foo hanya akan menambah nama foo ke ruang nama penuh global (globals()) sebagai rujukan malas Pengkompil Operasi import sebenar ialah tidak dilakukan sehingga sebarang kod mengakses foo ditemui. Begitu juga, dari bar import foo akan menambah bar pada ruang nama, dan apabila ia menemui kod yang memanggil bar, ia akan mengimport foo.

Tulis kod untuk melaksanakannya

Jadi bagaimana untuk menulis kod untuk melaksanakannya? Malah, tidak perlu menulis kod untuk melaksanakannya. Sudah ada projek yang melaksanakan fungsi import malas, iaitu kodnya tidak bergantung pada mana-mana perpustakaan pihak ketiga. apabila anda memerlukan import malas, anda boleh terus meletakkan kelas LazyLoader[2] Hanya salin ke projek anda sendiri.

Kod sumber adalah seperti berikut:

# Code copied from https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/util/lazy_loader.py
"""A LazyLoader class."""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import importlib
import types


class LazyLoader(types.ModuleType):
"""Lazily import a module, mainly to avoid pulling in large dependencies.

`contrib`, and `ffmpeg` are examples of modules that are large and not always
needed, and this allows them to only be loaded when they are used.
"""

# The lint error here is incorrect.
def __init__(self, local_name, parent_module_globals, name):# pylint: disable=super-on-old-class
self._local_name = local_name
self._parent_module_globals = parent_module_globals

super(LazyLoader, self).__init__(name)

def _load(self):
# Import the target module and insert it into the parent's namespace
module = importlib.import_module(self.__name__)
self._parent_module_globals[self._local_name] = module

# Update this object's dict so that if someone keeps a reference to the
# LazyLoader, lookups are efficient (__getattr__ is only called on lookups
# that fail).
self.__dict__.update(module.__dict__)

return module

def __getattr__(self, item):
module = self._load()
return getattr(module, item)

def __dir__(self):
module = self._load()
return dir(module)
Salin selepas log masuk

Perihalan kod:

Kelas LazyLoader mewarisi daripada jenis.ModuleType dan fungsi permulaan memastikan bahawa modul malas akan berkelakuan seperti sebenar Modul juga ditambah dengan betul pada pembolehubah global Hanya apabila modul benar-benar digunakan, iaitu, apabila __getattr__ atau __dir__ dilaksanakan, modul sebenar akan benar-benar diimport, pembolehubah global. akan dikemas kini untuk menunjuk ke modul sebenar, dan semua statusnya ( __dict__) dikemas kini kepada keadaan modul sebenar supaya rujukan kepada pemuatan malas, memuatkan modul tidak perlu melalui proses pemuatan setiap kali ia diakses .

Penggunaan kod:

Biasanya kami mengimport modul seperti ini:

import tensorflow.contrib as contrib
Salin selepas log masuk

Versi import malas yang sepadan adalah seperti berikut:

contrib = LazyLoader('contrib', globals(), 'tensorflow.contrib')
Salin selepas log masuk

Pendekatan disyorkan PEP0690

Cadangan PEP0690 adalah untuk melaksanakannya di peringkat pengkompil (kod C), supaya prestasinya menjadi lebih baik. Terdapat dua cara untuk menggunakannya.

Satu cara

Salah satu cara ialah menambah parameter -L apabila melaksanakan skrip Python Contohnya, terdapat dua fail spam.py dengan kandungan berikut:

import time
time.sleep(10)
print("spam loaded")
Salin selepas log masuk

kandungan egg.py adalah seperti berikut:

import spam
print("imports done")
Salin selepas log masuk

Di bawah keadaan import biasa, ia akan menunggu selama 10 saat sebelum mencetak "spam dimuatkan" dan kemudian "import selesai", apabila melaksanakan python -L eggs.py , modul spam tidak pernah diimport dan modul spam yang digunakan tidak digunakan sama sekali. Jika kandungan egg.py adalah seperti berikut:

import spam
print("imports done")
spam
Salin selepas log masuk

Apabila python -L eggs.py dilaksanakan, "import selesai" akan dicetak dahulu dan "spam dimuatkan" akan dicetak 10 saat kemudian).

Kedua

Cara lain ialah memanggil kaedah importlib perpustakaan standard:

import importlib 
importlib.set_lazy_imports(True)
Salin selepas log masuk

Jika sesuatu Modul tidak boleh malas dimuatkan dan perlu dikecualikan Anda boleh melakukannya seperti ini:

import importlib 
importlib.set_lazy_imports(True,excluding=["one.mod", "another"])
Salin selepas log masuk

Anda juga boleh melakukannya seperti ini:

from importlib import eager_imports

with eager_imports():
import foo
import bar
Salin selepas log masuk

Perkataan akhir

Selepas ujian oleh profesional pada program baris arahan Python sebenar, menggunakan import malas boleh meningkatkan masa permulaan sebanyak 70% dan mengurangkan penggunaan memori sebanyak 40%, yang sangat mengagumkan.

Rujukan

[1]PEP0690: https://github.com/python/peps/blob/main/pep-0690.rst

[2]LazyLoader : https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/util/lazy_loader.py

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan import malas import-malas Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular Apr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

Bagaimana Debian Readdir Bersepadu Dengan Alat Lain Bagaimana Debian Readdir Bersepadu Dengan Alat Lain Apr 13, 2025 am 09:42 AM

Fungsi Readdir dalam sistem Debian adalah panggilan sistem yang digunakan untuk membaca kandungan direktori dan sering digunakan dalam pengaturcaraan C. Artikel ini akan menerangkan cara mengintegrasikan Readdir dengan alat lain untuk meningkatkan fungsinya. Kaedah 1: Menggabungkan Program Bahasa C dan Pipeline Pertama, tulis program C untuk memanggil fungsi Readdir dan output hasilnya:#termasuk#termasuk#includeintMain (intargc, char*argv []) {dir*dir; structdirent*entry; if (argc! = 2) {

Python dan Masa: Memanfaatkan masa belajar anda Python dan Masa: Memanfaatkan masa belajar anda Apr 14, 2025 am 12:02 AM

Untuk memaksimumkan kecekapan pembelajaran Python dalam masa yang terhad, anda boleh menggunakan modul, masa, dan modul Python. 1. Modul DateTime digunakan untuk merakam dan merancang masa pembelajaran. 2. Modul Masa membantu menetapkan kajian dan masa rehat. 3. Modul Jadual secara automatik mengatur tugas pembelajaran mingguan.

Cara mengkonfigurasi pelayan https di debian openssl Cara mengkonfigurasi pelayan https di debian openssl Apr 13, 2025 am 11:03 AM

Mengkonfigurasi pelayan HTTPS pada sistem Debian melibatkan beberapa langkah, termasuk memasang perisian yang diperlukan, menghasilkan sijil SSL, dan mengkonfigurasi pelayan web (seperti Apache atau Nginx) untuk menggunakan sijil SSL. Berikut adalah panduan asas, dengan mengandaikan anda menggunakan pelayan Apacheweb. 1. Pasang perisian yang diperlukan terlebih dahulu, pastikan sistem anda terkini dan pasang Apache dan OpenSSL: sudoaptDateSudoaptgradesudoaptinsta

Nginx SSL Sijil Tutorial Debian Nginx SSL Sijil Tutorial Debian Apr 13, 2025 am 07:21 AM

Artikel ini akan membimbing anda tentang cara mengemas kini sijil NginxSSL anda pada sistem Debian anda. Langkah 1: Pasang Certbot terlebih dahulu, pastikan sistem anda mempunyai pakej CertBot dan Python3-CertBot-Nginx yang dipasang. Jika tidak dipasang, sila laksanakan arahan berikut: sudoapt-getupdateudoapt-getinstallcertbotpython3-certbot-nginx Langkah 2: Dapatkan dan konfigurasikan sijil Gunakan perintah certbot untuk mendapatkan sijil let'Sencrypt dan konfigurasikan nginx: sudoCertBot-ninx ikuti

Panduan Pembangunan Plug-In Gitlab di Debian Panduan Pembangunan Plug-In Gitlab di Debian Apr 13, 2025 am 08:24 AM

Membangunkan plugin Gitlab pada Debian memerlukan beberapa langkah dan pengetahuan tertentu. Berikut adalah panduan asas untuk membantu anda memulakan proses ini. Memasang GitLab terlebih dahulu, anda perlu memasang GitLab pada sistem Debian anda. Anda boleh merujuk kepada manual pemasangan rasmi GitLab. Dapatkan token akses API sebelum melakukan integrasi API, anda perlu mendapatkan token akses API Gitlab terlebih dahulu. Buka papan pemuka Gitlab, cari pilihan "AccessTokens" dalam tetapan pengguna, dan menghasilkan token akses baru. Akan dijana

Perkhidmatan apa yang Apache Perkhidmatan apa yang Apache Apr 13, 2025 pm 12:06 PM

Apache adalah wira di belakang internet. Ia bukan sahaja pelayan web, tetapi juga platform yang kuat yang menyokong lalu lintas yang besar dan menyediakan kandungan dinamik. Ia memberikan fleksibiliti yang sangat tinggi melalui reka bentuk modular, yang membolehkan pengembangan pelbagai fungsi seperti yang diperlukan. Walau bagaimanapun, modulariti juga membentangkan cabaran konfigurasi dan prestasi yang memerlukan pengurusan yang teliti. Apache sesuai untuk senario pelayan yang memerlukan keperluan yang sangat disesuaikan dan memenuhi keperluan kompleks.

Bahasa apa yang ditulis Apache? Bahasa apa yang ditulis Apache? Apr 13, 2025 pm 12:42 PM

Apache ditulis dalam C. Bahasa ini menyediakan kelajuan, kestabilan, mudah alih, dan akses perkakasan langsung, menjadikannya sesuai untuk pembangunan pelayan web.

See all articles