Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Memahami Python's *args dan **kwargs

Memahami Python's *args dan **kwargs

Linda Hamilton
Linda Hamiltonasal
2024-11-01 06:53:31453semak imbas

Understanding Python

Python terkenal dengan kesederhanaan dan fleksibiliti, yang selalunya datang daripada keupayaannya untuk mengendalikan fungsi dengan bilangan argumen yang berubah-ubah.

Dua simbol khas, *args dan **kwargs, memainkan peranan penting dalam kelenturan ini.

Dalam artikel ini, kami akan meneroka maksud simbol ini, cara menggunakannya dan sebab ia sangat berkuasa.


Asas *args

Parameter *args membenarkan fungsi menerima sebarang bilangan argumen kedudukan.

Asterisk (*) ialah isyarat kepada Python bahawa semua argumen kedudukan harus dikumpulkan menjadi tupel.

Contoh *args in Action

def greet(*args):
    for name in args:
        print(f"Hello, {name}!")

greet('Alice', 'Bob', 'Charlie')

Output:

Hello, Alice!
Hello, Bob!
Hello, Charlie!

Penjelasan:

  • Fungsi salam menerima sebarang bilangan hujah kedudukan.
  • Di dalam fungsi, args ialah tuple yang mengandungi semua hujah yang diluluskan.
  • Kami mengulangi args untuk mencetak ucapan bagi setiap nama.

Apabila saya mula-mula mengetahui tentang *args, rasanya seperti membuka kunci tahap baharu dalam permainan video. Jadi lebih mudah untuk menentukan fungsi.


Menyelam ke **kwargs

Begitu juga, **kwargs membenarkan fungsi untuk menerima sebarang bilangan hujah kata kunci.

Asteris berganda (**) memberitahu Python untuk mengumpulkan semua hujah kata kunci ke dalam kamus.

Contoh **kwargs dalam Tindakan

def display_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

display_info(name='Alice', age=30, city='New York')

Output:

name: Alice
age: 30
city: New York

Penjelasan:

  • Fungsi display_info menerima sebarang bilangan hujah kata kunci.
  • Di dalam fungsi, kwargs ialah kamus yang mengandungi semua hujah kata kunci.
  • Kami mengulangi kwargs.items() untuk mencetak setiap pasangan nilai kunci.

Menggunakan **kwargs telah menjadi penyelamat apabila berurusan dengan fungsi yang memerlukan set fleksibel parameter bernama. Ia memastikan kod saya bersih dan teratur.


Menggabungkan *args dan **kwargs

Anda boleh menggunakan kedua-dua *args dan **kwargs dalam fungsi yang sama untuk menerima semua jenis hujah.

Contoh Penggunaan Gabungan

def make_sentence(*args, **kwargs):
    sentence = ' '.join(args)
    for key, value in kwargs.items():
        sentence += f" {key} {value}"
    print(sentence)

make_sentence('I', 'love', 'Python', exclamation='!', emoji='?')

Output:

I love Python exclamation ! emoji ?

Penjelasan:

  • args mengumpul hujah kedudukan menjadi tupel.
  • *kwargs mengumpul hujah kata kunci ke dalam kamus.
  • Kami membina ayat dengan menggabungkan hujah kedudukan dan menambahkan hujah kata kunci.

Mencampurkan *args dan **kwargs terasa seperti memasak dengan semua bahan yang betul—anda boleh melaraskan resipi mengikut kehendak anda tanpa memecahkan hidangan.


Susunan Parameter

Apabila menggunakan *args dan **kwargs, susunan anda meletakkannya dalam definisi fungsi adalah penting:

  1. Hujah kedudukan biasa
  2. args
  3. Argumen kata kunci (yang tanpa nilai lalai)
  4. Argumen kata kunci dengan nilai lalai
  5. *kwargs

Contoh Pesanan yang Betul

def greet(*args):
    for name in args:
        print(f"Hello, {name}!")

greet('Alice', 'Bob', 'Charlie')

Contoh Pesanan Salah

Hello, Alice!
Hello, Bob!
Hello, Charlie!

Saya telah tersandung pesanan ini lebih banyak kali daripada yang saya ingin akui. Menyemak semula susunan parameter menjimatkan banyak masa penyahpepijatan!


Membongkar Hujah dengan * dan **

Asteris bukan sahaja berguna dalam definisi fungsi tetapi juga semasa memanggil fungsi.

Mereka boleh membongkar urutan dan kamus menjadi hujah.

Contoh Membongkar

def display_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

display_info(name='Alice', age=30, city='New York')

Output:

name: Alice
age: 30
city: New York

Penjelasan:

  • nombor membongkar tuple ke dalam argumen kedudukan.
  • *perincian membongkar kamus menjadi hujah kata kunci.

Ciri ini menjadikan kod saya lebih bersih, terutamanya apabila berurusan dengan data yang secara semula jadi terdapat dalam senarai atau kamus.


Kegunaan Praktikal

Antara Muka Fungsi Fleksibel

Apabila anda mahu fungsi mengendalikan bilangan input yang berbeza-beza tanpa menukar tandatangan fungsi.

def make_sentence(*args, **kwargs):
    sentence = ' '.join(args)
    for key, value in kwargs.items():
        sentence += f" {key} {value}"
    print(sentence)

make_sentence('I', 'love', 'Python', exclamation='!', emoji='?')

Penghias dan Pembungkus

Apabila menulis penghias, anda sering tidak mengetahui bilangan hujah yang akan diterima oleh fungsi yang dibalut.

I love Python exclamation ! emoji ?

Penghias ialah salah satu ciri kegemaran saya dalam Python dan *args dan **kwargs menjadikannya mungkin.


Kesilapan Biasa yang Perlu Dielakkan

Salah Letakkan Parameter: Pastikan *args dan **kwarg diletakkan dengan betul dalam tandatangan fungsi.

Terlalu banyak: Walaupun *args dan **kwarg berkuasa, penggunaan berlebihan boleh menyebabkan kod anda sukar difahami.

Melupakan Asterisk: Ingat bahawa args dan kwarg hanyalah konvensyen. Asterisk (*, **) itulah yang menjadikannya istimewa.

def func(a, b, *args, **kwargs):
    pass

Baki adalah kunci. Walaupun tergoda untuk menggunakan *args dan **kwargs di mana-mana, kadangkala parameter eksplisit adalah lebih jelas.


Kesimpulan

Memahami *args dan **kwargs membuka dunia kemungkinan dalam pengaturcaraan Python.

Ia memberikan fleksibiliti untuk menulis fungsi yang boleh mengendalikan bilangan hujah yang sewenang-wenangnya, menjadikan kod anda lebih dinamik dan boleh disesuaikan.

Menguasai *args dan **kwargs merupakan titik perubahan dalam perjalanan Python saya.

Ia menjadikan pengekodan lebih menyeronokkan dan program saya lebih mantap. Jika anda masih belum meneroka ciri ini, saya amat mengesyorkan anda menyelam!

Atas ialah kandungan terperinci Memahami Python's *args dan **kwargs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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