Tham số dạng *args và **kwargs trong Python

0
63

*args và **kwargs dùng để làm gì?

Khi khai báo 1 hàm, sử dụng *args và **kwargs cho phép bạn truyền vào bao nhiêu tham số cũng được mà không cần biết trước số lượng.

//với giả sử các tham số truyền vào đều là số
  def sum(*args):
  	total = 0
  	for number in args:
    	total += number
    return total

  // gọi hàm
  sum(1, 2, 3,19)
  sum( 1, 100)

*args và **kwargs khác gì nhau?

Cho những bạn chưa biêt: Khi gọi hàm trong Python, có 2 kiểu truyền tham số:

  • Truyền tham số theo tên.
  • Truyền tham số bình thường theo thứ tự khai báo đối số.
    def register(name, password):
        	....
        #Truyền tham số theo kiểu thông thường, phải theo đúng thứ tự
        register( 'Coulson', 'hail_Hydra')
        #Truyền tham số theo tên, Không cần phải theo thứ tự khai báo thao số
        register( password='cookHim', name='Skye')
    • *args nhận các tham số truyền bình thường. Sử dụng args như một list.
    • **kwargs nhận tham số truyền theo tên. Sử dụng kwargs như một dictionary
def test_args(*args):
 	for item in args:
    	print item
        
 >>test_args('Hello', 'world!')
 Hello
 world!

 def test_kwargs(*kwargs):
 	for key, value in kwargs.iteritems():
    	print '{0} = {1}'.format(key, value)
        
 >>test_kwargs(name='Dzung', age=10)
 age = 10
 name = Dzung

Thứ tự sử dụng và truyền tham số *args, **kwargs và tham số bình thường

Khi sử dụng phải khai báo đối số theo thứ tự:

đối số xác đinh –> *args –> **kwargs

Đây là thứ tự bắt buộc. Và khi truyền tham số bạn cũng phải truyền theo đúng thứ tự này. Không thể truyền lẫn lộn giữa 2 loại.

Chú ý : Khi sử dụng đồng thời *args **kwargs thì không thể truyền tham số bình thường theo tên

def show_detail(name, *args, **kwargs):
  	.....
    
  show_detail(name='Coulson', 'agent', age='40', level='A')
  >>Error
  
  def show_detail_2(name, **kwargs):
  	....
    
  show_detail_2(name='Coulson', age='40', level='A')
  >> Chạy Ok

 

0

BÌNH LUẬN

Nhập bình luận của bạn
Vui lòng nhập tên