Vấn đề
Bạn muốn viết một hàm chấp nhận bất kỳ số lượng đối số đầu vào nào.
Giải pháp
Đối số * trong python có thể chấp nhận bất kỳ số lượng đối số nào. Chúng ta sẽ hiểu điều này với một ví dụ về việc tìm ra giá trị trung bình của hai hoặc nhiều số đã cho. Trong ví dụ dưới đây, rest_arg là một tập hợp của tất cả các đối số bổ sung (trong trường hợp của chúng tôi là số) được truyền vào. Hàm coi các đối số như một chuỗi để thực hiện phép tính trung bình.
# Sample function to find the average of the given numbers def define_average(first_arg, *rest_arg): average = (first_arg + sum(rest_arg)) / (1 + len(rest_arg)) print(f"Output \n *** The average for the given numbers {average}") # Call the function with two numbers define_average(1, 2)
Đầu ra
*** The average for the given numbers 1.5
# Call the function with more numbers define_average(1, 2, 3, 4)
Đầu ra
*** The average for the given numbers 2.5
Để chấp nhận bất kỳ số lượng đối số từ khóa nào, hãy sử dụng đối số bắt đầu bằng **.
def player_stats(player_name, player_country, **player_titles): print(f"Output \n*** Type of player_titles - {type(player_titles)}") titles = ' AND '.join('{} : {}'.format(key, value) for key, value in player_titles.items()) print(f"*** Type of titles post conversion - {type(titles)}") stats = 'The player - {name} from {country} has {titles}'.format(name = player_name, country=player_country, titles=titles) return stats player_stats('Roger Federer','Switzerland', Grandslams = 20, ATP = 103)
Đầu ra
*** Type of player_titles - <class 'dict'> *** Type of titles post conversion - <class 'str'>
'The player - Roger Federer from Switzerland has Grandslams : 20 AND ATP : 103'
Ở đây trong ví dụ trên, player_titles là một từ điển chứa các đối số từ khóa được truyền vào.
Nếu bạn muốn một hàm có thể chấp nhận bất kỳ số lượng đối số chỉ vị trí và từ khóa nào, hãy sử dụng * và ** cùng nhau
def func_anyargs(*args, **kwargs): print(args) # A tuple print(kwargs) # A dict
Với chức năng này, tất cả các đối số vị trí được đặt vào một bộ tuple args và tất cả các đối số từ khóa được đặt vào một kwargs từ điển.