Python 3.2.3. Ada beberapa ide yang tercantum di sini , yang bekerja pada var biasa, tetapi tampaknya ** kwargs bermain dengan aturan yang berbeda ... jadi mengapa ini tidak berhasil dan bagaimana saya bisa memeriksa untuk melihat apakah ada kunci di ** kwargs?
if kwargs['errormessage']:
print("It exists")
Saya juga berpikir ini seharusnya berhasil, tetapi tidak -
if errormessage in kwargs:
print("yeah it's here")
Saya menebak karena kwargs dapat diulang? Apakah saya harus mengulanginya hanya untuk memeriksa apakah ada kunci tertentu?
python
dictionary
python-3.x
kwargs
Zamphatta
sumber
sumber
Jawaban:
Kamu ingin
Untuk mendapatkan nilai
errormessage
Dengan cara ini,
kwargs
hanyalah hal laindict
. Contoh pertama Andaif kwargs['errormessage']
,, berarti "dapatkan nilai yang terkait dengan kunci" errormessage "di kwargs, lalu periksa nilai bool-nya". Jadi jika tidak ada kunci seperti itu, Anda akan mendapatkanKeyError
.Contoh kedua Anda
if errormessage in kwargs:
,, berarti "jikakwargs
berisi elemen yang dinamai oleh"errormessage
", dan kecuali"errormessage
"adalah nama variabel, Anda akan mendapatkanNameError
.Saya harus menyebutkan bahwa kamus juga memiliki metode
.get()
yang menerima parameter default (dengan sendirinya defaultNone
), sehinggakwargs.get("errormessage")
mengembalikan nilai jika kunci itu ada danNone
sebaliknya (jugakwargs.get("errormessage", 17)
melakukan apa yang mungkin Anda pikirkan). Jika Anda tidak peduli tentang perbedaan antara kunci yang ada dan yang memilikiNone
nilai atau kunci yang tidak ada, ini bisa berguna.sumber
kwargs.get("errormessage", 17)
mungkin mengembalikan nilainya atau17
jika pesan kesalahan tidak ada - tapi saya tidak yakin. Apakah itu benar?Jawaban DSM dan Tadeck menjawab pertanyaan Anda secara langsung.
Dalam skrip saya, saya sering menggunakan kemudahan
dict.pop()
untuk menangani argumen opsional, dan tambahan. Berikut contohprint()
pembungkus sederhana :Kemudian:
Seperti yang Anda lihat, jika
prefix
tidak ada di dalamnyakwargs
, maka default''
(string kosong) disimpan diprefix
variabel lokal . Jika diberikan, maka nilainya digunakan.Ini umumnya adalah resep yang ringkas dan dapat dibaca untuk menulis pembungkus untuk segala jenis fungsi: Selalu sampaikan argumen yang tidak Anda pahami, dan bahkan tidak tahu apakah argumen itu ada. Jika Anda selalu melewatinya
*args
dan**kwargs
membuat kode Anda lebih lambat, dan membutuhkan lebih banyak pengetikan, tetapi jika antarmuka dari fungsi yang dipanggil (dalam hal iniprint
) berubah, Anda tidak perlu mengubah kode Anda. Pendekatan ini mengurangi waktu pengembangan sekaligus mendukung semua perubahan antarmuka.sumber
prefix
.Hanya ini:
Anda perlu memeriksa, apakah kuncinya ada di kamus. Sintaksnya adalah
some_key in some_dict
(di manasome_key
ada sesuatu yang dapat dicirikan, tidak harus berupa string).Ide-ide yang telah Anda hubungkan ( ide-ide ini ) berisi contoh-contoh untuk memeriksa apakah ada kunci spesifik dalam kamus yang dikembalikan oleh
locals()
danglobals()
. Contoh Anda serupa, karena Anda memeriksa keberadaan kunci tertentu dalamkwargs
kamus (kamus yang berisi argumen kata kunci).sumber
Salah satu caranya adalah dengan menambahkannya sendiri! Bagaimana? Dengan menggabungkan
kwargs
dengan banyak default. Ini tidak selalu sesuai di semua kesempatan, misalnya, jika kunci tidak diketahui sebelumnya. Namun, jika ya, berikut adalah contoh sederhananya:Standarnya disetel dalam kamus
args
, yang menyertakan semua kunci yang kami harapkan. Kami pertama kali memeriksa untuk melihat apakah ada kunci yang tidak terduga di kwargs. Kemudian kita updateargs
dengankwargs
yang akan menimpa nilai-nilai baru bahwa pengguna telah ditetapkan. Kami tidak perlu menguji apakah ada kunci, kami sekarang menggunakanargs
sebagai kamus argumen kami dan tidak membutuhkan lagikwargs
.sumber
Anda dapat menemukan hal-hal itu dengan mudah sendiri:
sumber
in
operator itu sendiri tidaklah mudah jika Anda belum pernah memprogram dan / atau baru mengenal Python. Ini hanya diisyaratkan dalamdict.get()
dandict.setdefault()
bantuan.sumber