Jadual Kandungan
2. @jit
3. @do_twice
4. @count_calls
5. @dataclass
6. @singleton
7. @use_unit
8. @singledispatch
Rumah pembangunan bahagian belakang Tutorial Python Hebat! Cadangkan lapan penghias Python yang hebat!

Hebat! Cadangkan lapan penghias Python yang hebat!

Apr 19, 2023 am 11:49 AM
python Penghias

Hebat! Cadangkan lapan penghias Python yang hebat!

Prakata

Salah satu perkara hebat tentang bahasa pengaturcaraan Python ialah ia mengemas semua ciri ke dalam pakej kecil yang sangat berguna.

Banyak ciri boleh menukar sepenuhnya fungsi kod Python, menjadikan bahasa lebih fleksibel. Jika digunakan dengan betul, beberapa ciri ini boleh mengurangkan masa yang diperlukan untuk menulis program dengan berkesan.

Contoh yang baik untuk mencapai matlamat ini ialah penghias Python.

Penghias

Penghias ialah fungsi yang boleh digunakan untuk menukar gelagat objek fungsi Python. Ia boleh digunakan pada kelas dan fungsi dan boleh melakukan banyak perkara yang sangat menarik!

Penghias boleh digunakan untuk memendekkan kod anda, mempercepatkannya dan mengubah sepenuhnya cara kod anda berkelakuan dalam Python.

Tidak perlu dikatakan, ini sememangnya berguna! Hari ini saya ingin menunjukkan beberapa penghias yang saya rasa patut dilihat.

Terdapat banyak penghias, tetapi saya memilih beberapa yang saya rasa mempunyai ciri paling hebat.

1. @lru_cache

Penghias pertama dalam senarai ini datang daripada modul functools.

Modul ini disertakan dalam perpustakaan standard dan sangat mudah digunakan. Ia juga mengandungi ciri yang lebih sejuk daripada penghias ini, tetapi penghias ini pasti kegemaran saya.

Penghias ini boleh digunakan untuk mempercepatkan larian fungsi berturut-turut menggunakan caching. Sudah tentu, ini harus digunakan dengan mengambil kira beberapa kaveat tentang caching, tetapi dalam kes penggunaan umum, kebanyakan masa penghias ini berbaloi untuk digunakan.

Sangat bagus untuk dapat mempercepatkan kod anda dengan penghias yang ringkas.

Contoh baik fungsi yang boleh mendapat manfaat daripada penghias sedemikian ialah fungsi rekursif, seperti fungsi yang mengira faktorial:

def factorial(n):
 return n * factorial(n-1) if n else 1
Salin selepas log masuk

Rekursi mungkin dari segi masa pengiraan Sangat sukar, tetapi menambah penghias ini membantu mempercepatkan fungsi ini berjalan secara berterusan.

@lru_cache
def factorial(n):
 return n * factorial(n-1) if n else 1
Salin selepas log masuk

Sekarang apabila kita menjalankan fungsi ini, beberapa pengiraan faktorial yang pertama akan disimpan ke cache.

Jadi pada kali seterusnya kita memanggil fungsi ini, kita hanya perlu mengira faktorial selepas faktorial yang kita gunakan sebelum ini.

Sudah tentu, bukan semua pengiraan faktorial akan disimpan, tetapi mudah untuk melihat sebab penghias ini merupakan aplikasi yang baik untuk mempercepatkan beberapa kod perlahan secara semula jadi.

2. @jit

JIT ialah singkatan kepada Just In Time. Biasanya setiap kali kita menjalankan beberapa kod dalam Python, perkara pertama yang berlaku ialah kompilasi.

Kompilasi ini memerlukan sedikit overhed kerana jenis tersebut diperuntukkan memori dan disimpan sebagai alias tidak diperuntukkan tetapi dinamakan. Dengan kompilasi tepat dalam masa, kami menyusun hanya pada masa pelaksanaan.

Dalam banyak cara, kita boleh menganggap ini sebagai sesuatu yang serupa dengan pengkomputeran selari, di mana jurubahasa Python mengendalikan dua perkara pada masa yang sama untuk menjimatkan masa.

Pengkompil Numba JIT terkenal kerana menyediakan konsep ini ke dalam Python. Sama seperti @lru_cache, penghias ini boleh dipanggil dengan mudah dan serta-merta meningkatkan prestasi kod anda. Pakej Numba menyediakan penghias jit yang memudahkan untuk menjalankan perisian yang lebih intensif tanpa perlu pergi ke C.

Kes berikut menggunakan penghias @jit untuk mempercepatkan pengiraan kaedah Monte Carlo.

from numba import jit
import random
@jit(nopython=True)
def monte_carlo_pi(nsamples):
 acc = 0
 for i in range(nsamples):
 x = random.random()
 y = random.random()
 if (x ** 2 + y ** 2) < 1.0:
 acc += 1
 return 4.0 * acc / nsamples
Salin selepas log masuk

3. @do_twice

Penghias do_twice melakukan banyak perkara seperti namanya. Penghias ini boleh digunakan untuk menjalankan fungsi dua kali dengan satu panggilan. Ini sememangnya mempunyai beberapa kegunaan, saya dapati ia amat berguna untuk penyahpepijatan.

Ia boleh digunakan untuk mengukur prestasi dua lelaran berbeza. Menggunakan Functools sebagai contoh, kita boleh menjalankan fungsi dua kali untuk menyemak penambahbaikan. Fungsi ini disediakan oleh modul penghias dalam Python, yang terletak di perpustakaan standard.

from decorators import do_twice
@do_twice
def timerfunc():
%timeit factorial(15)
Salin selepas log masuk

4. @count_calls

Penghias count_calls boleh digunakan untuk memberikan maklumat tentang berapa kali fungsi digunakan dalam perisian.

Seperti do_twice, ini pastinya berguna apabila menyahpepijat.

Apabila ditambahkan pada fungsi tertentu, kami akan menerima output yang memberitahu kami berapa kali fungsi itu telah dijalankan setiap kali ia dijalankan. Penghias ini juga terdapat dalam modul penghias perpustakaan standard.

from decorators import count_calls
@count_calls
def function_example():
print("Hello World!")
function_example()
function_example()
function_example()
Salin selepas log masuk

5. @dataclass

Untuk menjimatkan masa kelas menulis, salah satu penghias terbaik yang saya gunakan ialah penghias @dataclass.

Penghias ini boleh digunakan untuk menulis kaedah standard biasa dalam kelas dengan cepat yang biasanya akan ditemui dalam kelas yang kami tulis.

Penghias ini datang daripada modul kelas data. Modul ini juga terdapat dalam perpustakaan standard, jadi tiada PIP diperlukan untuk mencuba contoh ini!

from dataclasses import dataclass
@dataclass
class Food:
name: str
unit_price: float
stock: int = 0
 def stock_value(self) -> float:
 return(self.stock * self.unit_price)
Salin selepas log masuk

Kod ini secara automatik akan mencipta fungsi permulaan init() dengan parameter kedudukan yang diperlukan untuk mengisi data dalam kelas.

Ia juga akan diberikan secara automatik kepada diri sendiri, jadi tidak perlu menulis fungsi yang panjang untuk meletakkan beberapa parameter data ke dalam kelas.

6. @singleton

Untuk memahami tujuan penghias tunggal, kita perlu memahami apa itu singleton. Dari satu segi, singleton ialah versi jenis pembolehubah global.

这意味着类型被定义为只存在一次。尽管这些在 C++ 等语言中很常见,但在 Python 中却很少见到。使用单例,我们可以创建一个只使用一次的类并改变类,而不是通过初始化来构造新的类型。

通常,单例装饰器是由用户自己编写的,实际上并不是导入的。

这是因为单例仍然是对我们单例装饰器中提供的模板的引用。我们可以命名一个单例函数并编写一个包装器,以便在我们的类上使用这个装饰器:

def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class cls:
def func(self):
Salin selepas log masuk

另一种方法是使用元类!

7. @use_unit

在科学计算中经常派上用场的一种装饰器是 @use_unit 装饰器。

此装饰器可用于更改返回结果的表示单位。这对于那些不想在数据中添加度量单位但仍希望人们知道这些单位是什么的人很有用。

这个装饰器也不是在任何模块中真正可用,但它是非常常见的,对科学应用程序非常有用。

def use_unit(unit):
"""Have a function return a Quantity with given unit"""
use_unit.ureg = pint.UnitRegistry()
def decorator_use_unit(func):
@functools.wraps(func)
def wrapper_use_unit(*args, **kwargs):
value = func(*args, *_kwargs)
return value _ use_unit.ureg(unit)
return wrapper_use_unit
return decorator_use_unit
@use_unit("meters per second")
def average_speed(distance, duration):
return distance / duration
Salin selepas log masuk

8. @singledispatch

Functools 凭借非常有用的@singledispatch 装饰器再次在此列表中脱颖而出。

单调度是一种编程技术,在许多编程语言中都很常见,因为它是一种非常棒的编程方式。虽然我更喜欢多调度,但我认为单调度可以在很多方面扮演相同的角色。

这个装饰器使得在 Python 中使用多类型数据变得更加容易, 尤其当我们希望通过同一方法传递多种类型数据时,情况更是如此。

@singledispatch
def fun(arg, verbose=False):
if verbose:
print("Let me just say,", end=" ")
print(arg)
@fun.register
def _(arg: int, verbose=False):
if verbose:
print("Strength in numbers, eh?", end=" ")
print(arg)
@fun.register
def _(arg: list, verbose=False):
if verbose:
print("Enumerate this:")
for i, elem in enumerate(arg):
print(i, elem)
Salin selepas log masuk

Atas ialah kandungan terperinci Hebat! Cadangkan lapan penghias Python yang hebat!. 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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: Paradigma yang berbeza dijelaskan PHP dan Python: Paradigma yang berbeza dijelaskan Apr 18, 2025 am 12:26 AM

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

Memilih antara php dan python: panduan Memilih antara php dan python: panduan Apr 18, 2025 am 12:24 AM

PHP sesuai untuk pembangunan web dan prototaip pesat, dan Python sesuai untuk sains data dan pembelajaran mesin. 1.Php digunakan untuk pembangunan web dinamik, dengan sintaks mudah dan sesuai untuk pembangunan pesat. 2. Python mempunyai sintaks ringkas, sesuai untuk pelbagai bidang, dan mempunyai ekosistem perpustakaan yang kuat.

Bolehkah kod studio visual digunakan dalam python Bolehkah kod studio visual digunakan dalam python Apr 15, 2025 pm 08:18 PM

Kod VS boleh digunakan untuk menulis Python dan menyediakan banyak ciri yang menjadikannya alat yang ideal untuk membangunkan aplikasi python. Ia membolehkan pengguna untuk: memasang sambungan python untuk mendapatkan fungsi seperti penyempurnaan kod, penonjolan sintaks, dan debugging. Gunakan debugger untuk mengesan kod langkah demi langkah, cari dan selesaikan kesilapan. Mengintegrasikan Git untuk Kawalan Versi. Gunakan alat pemformatan kod untuk mengekalkan konsistensi kod. Gunakan alat linting untuk melihat masalah yang berpotensi lebih awal.

Boleh kod vs dijalankan di Windows 8 Boleh kod vs dijalankan di Windows 8 Apr 15, 2025 pm 07:24 PM

Kod VS boleh dijalankan pada Windows 8, tetapi pengalaman mungkin tidak hebat. Mula -mula pastikan sistem telah dikemas kini ke patch terkini, kemudian muat turun pakej pemasangan kod VS yang sepadan dengan seni bina sistem dan pasangnya seperti yang diminta. Selepas pemasangan, sedar bahawa beberapa sambungan mungkin tidak sesuai dengan Windows 8 dan perlu mencari sambungan alternatif atau menggunakan sistem Windows yang lebih baru dalam mesin maya. Pasang sambungan yang diperlukan untuk memeriksa sama ada ia berfungsi dengan betul. Walaupun kod VS boleh dilaksanakan pada Windows 8, disyorkan untuk menaik taraf ke sistem Windows yang lebih baru untuk pengalaman dan keselamatan pembangunan yang lebih baik.

Adakah sambungan vscode berniat jahat? Adakah sambungan vscode berniat jahat? Apr 15, 2025 pm 07:57 PM

Sambungan kod VS menimbulkan risiko yang berniat jahat, seperti menyembunyikan kod jahat, mengeksploitasi kelemahan, dan melancap sebagai sambungan yang sah. Kaedah untuk mengenal pasti sambungan yang berniat jahat termasuk: memeriksa penerbit, membaca komen, memeriksa kod, dan memasang dengan berhati -hati. Langkah -langkah keselamatan juga termasuk: kesedaran keselamatan, tabiat yang baik, kemas kini tetap dan perisian antivirus.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Apr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

PHP dan Python: menyelam mendalam ke dalam sejarah mereka PHP dan Python: menyelam mendalam ke dalam sejarah mereka Apr 18, 2025 am 12:25 AM

PHP berasal pada tahun 1994 dan dibangunkan oleh Rasmuslerdorf. Ia pada asalnya digunakan untuk mengesan pelawat laman web dan secara beransur-ansur berkembang menjadi bahasa skrip sisi pelayan dan digunakan secara meluas dalam pembangunan web. Python telah dibangunkan oleh Guidovan Rossum pada akhir 1980 -an dan pertama kali dikeluarkan pada tahun 1991. Ia menekankan kebolehbacaan dan kesederhanaan kod, dan sesuai untuk pengkomputeran saintifik, analisis data dan bidang lain.

Cara menjalankan program di terminal vscode Cara menjalankan program di terminal vscode Apr 15, 2025 pm 06:42 PM

Dalam kod VS, anda boleh menjalankan program di terminal melalui langkah -langkah berikut: Sediakan kod dan buka terminal bersepadu untuk memastikan bahawa direktori kod selaras dengan direktori kerja terminal. Pilih arahan Run mengikut bahasa pengaturcaraan (seperti python python your_file_name.py) untuk memeriksa sama ada ia berjalan dengan jayanya dan menyelesaikan kesilapan. Gunakan debugger untuk meningkatkan kecekapan debug.

See all articles