Berhenti terlalu sering menggunakan * args dan ** kwargs dengan Python

Foto oleh Matthew Henry di Unsplash
Foto oleh Matthew Henry di Unsplash

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
      
      



Foto oleh Susan Holt Simpson di Unsplash
Photo by Susan Holt Simpson on Unsplash

*args



**kwargs



. , ?





, , , .





, . - Python






- ?

: , . , , . , , , , , ..





, *args



/ **kwargs



, , , .





, . , , .





, Python , , , .





Foto oleh Alexander Schimmeck di Unsplash
Photo by Alexander Schimmeck on Unsplash

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.








All Articles