Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีเขียนฟังก์ชันใน Python ที่ยอมรับอาร์กิวเมนต์จำนวนเท่าใดก็ได้


ปัญหา

คุณต้องการเขียนฟังก์ชันที่ยอมรับอาร์กิวเมนต์อินพุตจำนวนเท่าใดก็ได้

วิธีแก้ปัญหา

อาร์กิวเมนต์ * ใน python สามารถยอมรับอาร์กิวเมนต์จำนวนเท่าใดก็ได้ เราจะเข้าใจสิ่งนี้ด้วยตัวอย่างการหาค่าเฉลี่ยของตัวเลขสองตัวหรือมากกว่าที่ระบุ ในตัวอย่างด้านล่าง rest_arg เป็นทูเพิลของอาร์กิวเมนต์พิเศษทั้งหมด (ในกรณีของเราเป็นตัวเลข) ฟังก์ชันใช้อาร์กิวเมนต์เป็นลำดับในการคำนวณค่าเฉลี่ย

# 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)

ผลลัพธ์

*** The average for the given numbers 1.5


# Call the function with more numbers
define_average(1, 2, 3, 4)

ผลลัพธ์

*** The average for the given numbers 2.5

หากต้องการยอมรับอาร์กิวเมนต์ของคีย์เวิร์ดจำนวนเท่าใดก็ได้ ให้ใช้อาร์กิวเมนต์ที่ขึ้นต้นด้วย **

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)

ผลลัพธ์

*** 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'

ในตัวอย่างด้านบนนี้ player_titles คือพจนานุกรมที่เก็บอาร์กิวเมนต์ของคีย์เวิร์ดที่ส่งผ่าน

หากคุณต้องการฟังก์ชันที่ยอมรับทั้งอาร์กิวเมนต์ตำแหน่งและคีย์เวิร์ดเท่านั้นจำนวนเท่าใดก็ได้ ให้ใช้ * และ ** ร่วมกัน

def func_anyargs(*args, **kwargs):
print(args) # A tuple
print(kwargs) # A dict

ด้วยฟังก์ชันนี้ อาร์กิวเมนต์ตำแหน่งทั้งหมดจะถูกใส่ลงใน tuple args และอาร์กิวเมนต์ของคีย์เวิร์ดทั้งหมดจะอยู่ในพจนานุกรม kwargs