Jika saya memiliki fungsi seperti ini:
def foo(name, opts={}):
pass
Dan saya ingin menambahkan petunjuk tipe ke parameter, bagaimana saya melakukannya? Cara saya berasumsi memberi saya kesalahan sintaks:
def foo(name: str, opts={}: dict) -> str:
pass
Berikut ini tidak menimbulkan kesalahan sintaksis tetapi sepertinya bukan cara intuitif untuk menangani kasus ini:
def foo(name: str, opts: dict={}) -> str:
pass
Saya tidak dapat menemukan apa pun di typing
dokumentasi atau pencarian Google.
Sunting: Saya tidak tahu bagaimana argumen default bekerja di Python, tetapi demi pertanyaan ini, saya akan menyimpan contoh di atas. Secara umum jauh lebih baik untuk melakukan hal berikut:
def foo(name: str, opts: dict=None) -> str:
if not opts:
opts={}
pass
python
python-3.x
type-hinting
Astaga
sumber
sumber
scala
halnya dengan bahasa.Jawaban:
Cara kedua Anda benar.
output ini
Memang benar bahwa itu tidak tercantum dalam PEP 484 , tetapi petunjuk jenis adalah aplikasi anotasi fungsi, yang didokumentasikan dalam PEP 3107. Bagian sintaksis memperjelas bahwa argumen kata kunci bekerja dengan anotasi fungsi dengan cara ini.
Saya sangat menyarankan agar tidak menggunakan argumen kata kunci yang dapat diubah. Informasi lebih lanjut di sini .
sumber
Jika Anda menggunakan mengetik (diperkenalkan di Python 3.5) Anda dapat menggunakan
typing.Optional
, di manaOptional[X]
setara denganUnion[X, None]
. Ini digunakan untuk memberi sinyal bahwa nilai eksplisitNone
diperbolehkan. Dari mengetik. Opsional :sumber
=
diOptional[int] = None
dalamnya seperti itu adalah konvensi untuk argumen kata kunci non-type-hinted?Saya baru-baru ini melihat ini satu-liner:
sumber
None
default dan kemudian memeriksa di dalam metode menghindari masalah ini dengan mengalokasikan dict baru setiap kali metode dipanggil.