Jadilah holivar! Menggunakan args / kwargs atau tidak, apakah itu indikator profesionalisme atau pengetahuan dasar, tanpanya Anda harus malu? Seringkali membalik-balik github berbagai proyek, Anda menemukan kehadiran argumen ini dalam fungsi hanya karena. Dan artikel ini mendorong saya untuk membicarakan topik ini. Secara umum, saya mencoba untuk tidak menggunakan argumentasi yang tidak terkontrol dalam praktiknya, tetapi seberapa umum metode pemrograman ini? Bagikan di komentar. Dan selamat membaca.
, *args
**kwargs
Python. , , . , .
!
. , , , .
?
Python :
, .
, .
def foo(start, end):
print(start, end)
, foo ('Hi', end = 'Bye!')
"Hi"
"Bye!"
, end
foo
. ; , , . .
*args
. *
- . .
def foo(*args):
print(type(args))
for arg in args:
print(arg)
foo(1, 2, 'end')
# <class 'tuple'>
# 1
# 2
# end
, **kwargs
. , .
def foo2(**kwargs):
print(type(kwargs))
for keyword, value in kwargs.items():
print(f'{keyword}={value}')
foo2(a=1, b=2, z='end')
# <class 'dict'>
# a=1
# b=2
# z=end
*args
**kwargs
. , ?
, , , .
, . - Python
- ?
: , . , , . , , , , , ..
, *args
/ **kwargs
, , , .
, . , , .
, Python , , , .
Dalam contoh berikut, kami membuatnya
yang menampilkan nama fungsi yang sedang dieksekusi sebagai health check. Dekorator diterapkan ke fungsi menggunakan @trace
di atas fungsi seperti yang ditunjukkan di bawah ini. Karena kami ingin menerapkan dekorator ini ke fungsi apa pun dengan sejumlah argumen, kami perlu menggunakan *args
dan **kwargs
.
def trace(func):
def print_in(*args, **kwargs):
print('Executing function', func.__name__)
return func(*args, **kwargs)
return print_in
@trace
def calc(a,b):
print(f'a+b is {a+b}, a-b is {a-b}.')
calc(1,2)
# Executing function calc
# a+b is 3, a-b is -1.
@trace
def add_all(*args):
print(reduce(lambda a,b:a+b, args))
a = add_all(1,2,3,4,5)
# Executing function add_all
# 15
kesimpulan
Hindari mereka jika memungkinkan.
Perhatikan bahwa args
dan kwargs
disebut hanya dengan kesepakatan. Anda dapat memanggil mereka apapun yang Anda inginkan. Bintang *
- **
bintanglah yang memberikan fungsi yang sangat kuat.