Computer >> Máy Tính >  >> Lập trình >> Python

Cách viết các hàm trong Python chấp nhận bất kỳ số lượng đối số nào

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.