Apa kegunaan untuk **kwargs
di Python?
Saya tahu Anda bisa melakukan objects.filter
di atas meja dan menyampaikan **kwargs
argumen.
Bisakah saya juga melakukan ini untuk menentukan delta waktu yaitu timedelta(hours = time1)
?
Bagaimana tepatnya cara kerjanya? Apakah ini kelas 'membongkar'? Suka a,b=1,2
?
kwargs
singkatanKeyWord ARGumentS
, yaitu argumen yang telah menetapkan kunciJawaban:
Anda dapat menggunakan
**kwargs
untuk membiarkan fungsi Anda mengambil sejumlah argumen kata kunci sewenang-wenang ("kwargs" berarti "argumen kata kunci"):Anda juga dapat menggunakan
**kwargs
sintaks saat memanggil fungsi dengan membuat kamus argumen kata kunci dan meneruskannya ke fungsi Anda:The Python Tutorial berisi penjelasan yang baik dari cara kerjanya, bersama dengan beberapa contoh yang bagus.
<--Perbaruan-->
Untuk orang yang menggunakan Python 3, alih-alih iteritems (), gunakan item ()
sumber
Membongkar kamus
**
membongkar kamus.Ini
sama dengan
Ini berguna jika Anda harus membuat parameter:
Parameter pengepakan suatu fungsi
Ini memungkinkan Anda menggunakan fungsi seperti ini:
sumber
** do unpack dictionaries.
>> Pikiran meledak / tentu saja! +1 untuk menjelaskan bagian itu..iteritems()
telah diubah namanya menjadi.items()
Python 3.kwargs hanyalah kamus yang ditambahkan ke parameter.
Kamus dapat berisi kunci, pasangan nilai. Dan itu adalah kwarg. Ok begini caranya.
Untuk apa tidak begitu sederhana.
Misalnya (sangat hipotetis) Anda memiliki antarmuka yang hanya memanggil rutinitas lain untuk melakukan pekerjaan:
Sekarang Anda mendapatkan metode baru "drive":
Tapi tunggu dulu, ada parameter baru "kendaraan" - Anda tidak tahu itu sebelumnya. Sekarang Anda harus menambahkannya ke tanda tangan dari fungsi myDo.
Di sini Anda dapat melempar kwarg ke dalam permainan - Anda hanya menambahkan kwarg ke tanda tangan:
Dengan cara ini Anda tidak perlu mengubah tanda tangan dari fungsi antarmuka Anda setiap kali beberapa rutinitas yang Anda panggil mungkin berubah.
Ini hanyalah satu contoh bagus yang menurut Anda bermanfaat bagi kwarg.
sumber
Atas dasar bahwa sampel yang baik kadang-kadang lebih baik daripada wacana panjang saya akan menulis dua fungsi menggunakan semua fasilitas variabel lewat argumen python (baik argumen posisional dan bernama). Anda harus dapat dengan mudah melihat apa yang dilakukannya sendiri:
Dan inilah hasilnya:
sumber
Motif:
*args
dan**kwargs
berfungsi sebagai pengganti untuk argumen yang perlu diteruskan ke pemanggilan fungsimenggunakan
*args
dan**kwargs
memanggil suatu fungsiSekarang kita akan gunakan
*args
untuk memanggil fungsi yang didefinisikan di atashasil:
arg1: two
arg2: 3
arg3: 5
Sekarang, gunakan
**kwargs
untuk memanggil fungsi yang samahasil:
arg1: 5
arg2: two
arg3: 3
Bottomline:
*args
tidak memiliki kecerdasan, itu hanya menginterpolasi argumen yang dilewatkan ke parameter (dalam urutan kiri-ke-kanan) sementara**kwargs
berperilaku cerdas dengan menempatkan nilai yang sesuai @ tempat yang diperlukansumber
kwargs
di**kwargs
hanya nama variabel. Anda dapat melakukannya dengan sangat baik**anyVariableName
kwargs
singkatan dari "argumen kata kunci". Tetapi saya merasa mereka lebih baik disebut sebagai "argumen yang dinamai", karena ini hanyalah argumen yang diberikan bersama dengan nama (saya tidak menemukan arti kata "kata kunci" dalam istilah "argumen kata kunci". Saya kira "kata kunci" biasanya berarti kata-kata dicadangkan oleh bahasa pemrograman dan karenanya tidak dapat digunakan oleh programmer untuk nama-nama variabel. Tidak ada hal seperti itu terjadi di sini dalam kasus kwargs.). Jadi kita memberikan namaparam1
danparam2
untuk dua nilai parameter dilewatkan ke fungsi sebagai berikut:func(param1="val1",param2="val2")
, bukan lewat hanya nilai:func(val1,val2)
. Jadi, saya merasa mereka harus secara tepat disebut "jumlah arbitrase dari argumen yang dinamai" karena kita dapat menentukan sejumlah parameter ini (yaitu,func
func(**kwargs)
Jadi dikatakan bahwa izinkan saya menjelaskan "argumen bernama" pertama dan kemudian "sejumlah argumen bernama"
kwargs
.Argumen yang dinamai
Contoh
Sejumlah argumen bernama yang sewenang-wenang
kwargs
Contoh
Melewati variabel tuple dan dict untuk argumen khusus
Untuk menyelesaikannya, izinkan saya juga mencatat bahwa kita dapat lulus
Dengan demikian panggilan di atas yang sama dapat dilakukan sebagai berikut:
Akhirnya perhatikan
*
dan**
dalam panggilan fungsi di atas. Jika kita menghilangkannya, kita mungkin mendapatkan hasil yang buruk.Menghilangkan
*
tuple args:cetakan
Di atas tuple
('custom param1', 'custom param2', 'custom param3')
dicetak apa adanya.Menghilangkan
dict
argumen:memberi
sumber
keyword
terminologi berasal dari fakta Anda melewati dict yang merupakan basis data pasangan kunci-nilai.Sebagai tambahan, Anda juga dapat mencampur berbagai cara penggunaan saat memanggil fungsi kwargs:
memberikan hasil ini:
Perhatikan bahwa ** kwarg harus menjadi argumen terakhir
sumber
kwargs adalah gula sintaksis untuk meneruskan argumen nama sebagai kamus (untuk fungsi), atau kamus sebagai argumen bernama (untuk fungsi)
sumber
Berikut adalah fungsi sederhana yang berfungsi untuk menjelaskan penggunaan:
Argumen apa pun yang tidak ditentukan dalam definisi fungsi akan dimasukkan ke dalam
args
daftar, ataukwargs
daftar, tergantung pada apakah itu argumen kata kunci atau tidak:Jika Anda menambahkan argumen kata kunci yang tidak pernah diteruskan ke suatu fungsi, kesalahan akan dimunculkan:
sumber
Berikut adalah contoh yang saya harap sangat membantu:
Saat Anda menjalankan program, Anda mendapatkan:
Kuncinya mengambil di sini adalah bahwa jumlah variabel argumen bernama dalam panggilan diterjemahkan ke dalam kamus dalam fungsi.
sumber
Ini adalah contoh sederhana untuk memahami tentang membongkar python ,
eg1:
sumber
Di Jawa, Anda menggunakan konstruktor untuk membebani kelas dan memungkinkan untuk beberapa parameter input. Dengan python, Anda bisa menggunakan kwargs untuk memberikan perilaku serupa.
contoh java: https://beginnersbook.com/2013/05/constructor-overloading/
contoh python:
hanya cara lain untuk memikirkannya.
sumber
Argumen kata kunci sering disingkat menjadi kwargs dengan Python. Dalam pemrograman komputer ,
Penggunaan dua tanda bintang sebelum nama parameter, ** kwargs , adalah ketika seseorang tidak tahu berapa banyak argumen kata kunci yang akan diteruskan ke dalam fungsi. Ketika itu terjadi, itu disebut Argumen Kata Kunci Sewenang-wenang / Wildcard.
Salah satu contohnya adalah fungsi penerima Django .
Perhatikan bahwa itu tidak harus disebut kwarg , tetapi harus memiliki ** (nama kwarg adalah konvensi).
sumber