Python *args மற்றும் **kwargs
இயல்பாக, ஒரு செயல்பாடு சரியான எண்ணிக்கையிலான வாதங்களுடன் அழைக்கப்பட வேண்டும்.
இருப்பினும், சில நேரங்களில் உங்கள் செயல்பாட்டிற்கு எத்தனை வாதங்கள் அனுப்பப்படும் என்பது உங்களுக்குத் தெரியாமல் இருக்கலாம்.
*args மற்றும் **kwargs செயல்பாடுகள் தெரியாத எண்ணிக்கையிலான வாதங்களை ஏற்க அனுமதிக்கின்றன.
*args
Arbitrary Arguments
தெரியாத எண்ணிக்கையிலான நிலை வாதங்களை ஏற்கிறது
def func(*args)
**kwargs
Arbitrary Keyword Arguments
தெரியாத எண்ணிக்கையிலான சாவி வாதங்களை ஏற்கிறது
def func(**kwargs)
நினைவில் கொள்ளுங்கள்: செயல்பாட்டு வரையறைகளில் *args மற்றும் **kwargs பயன்படுத்தி வாதங்களைச் சேகரிக்கவும், மற்றும் செயல்பாட்டு அழைப்புகளில் வாதங்களைப் பிரிப்பதற்குப் பயன்படுத்தவும்.
Arbitrary Arguments - *args
உங்கள் செயல்பாட்டிற்கு எத்தனை வாதங்கள் அனுப்பப்படும் என்பது உங்களுக்குத் தெரியாவிட்டால், அளவுருப் பெயருக்கு முன் ஒரு * சேர்க்கவும்.
இந்த வழியில், செயல்பாடு வாதங்களின் ஒரு டூப்பிளைப் பெறும் மற்றும் உருப்படிகளை அதற்கேற்ப அணுகலாம்:
எடுத்துக்காட்டு
def my_function(*kids):
print("The youngest child is " + kids[2])
my_function("Emil", "Tobias", "Linus")
Arbitrary Arguments பைதான் ஆவணங்களில் பெரும்பாலும் *args என சுருக்கப்படுகிறது.
*args செயல்பாட்டு ஓட்டம்:
my_function("Emil", "Tobias", "Linus")
அனைத்து வாதங்களும்
kids என்ற டூப்பிளில் சேகரிக்கப்படுகின்றன
kids = ("Emil", "Tobias", "Linus")
kids[2] = "Linus" → "The youngest child is Linus"
*args என்றால் என்ன?
*args அளவுரு எந்த எண்ணிக்கையிலான நிலை வாதங்களையும் ஏற்க ஒரு செயல்பாட்டை அனுமதிக்கிறது.
செயல்பாட்டிற்குள், args அனுப்பப்பட்ட அனைத்து வாதங்களையும் கொண்ட ஒரு டூப்பிளாக மாறும்:
எடுத்துக்காட்டு
def my_function(*args):
print("Type:", type(args))
print("First argument:", args[0])
print("Second argument:", args[1])
print("All arguments:", args)
my_function("Emil", "Tobias", "Linus")
my_function("E", "T", "L")
("E", "T", "L")டூப்பிளாக மாற்றப்பட்டது
முக்கிய குறிப்பு:
*args என்ற பெயர் ஒரு கட்டமைப்பு. நீங்கள் எந்தப் பெயரையும் பயன்படுத்தலாம் (எ.கா., *kids, *names, *values), ஆனால் *args என்பது பரிந்துரைக்கப்பட்ட மரபு.
சாதாரண வாதங்களுடன் *args பயன்படுத்துதல்
நீங்கள் சாதாரண அளவுருக்களை *args உடன் இணைக்கலாம்.
சாதாரண அளவுருக்கள் *args க்கு முன் வர வேண்டும்:
எடுத்துக்காட்டு
def my_function(greeting, *names):
for name in names:
print(greeting, name)
my_function("Hello", "Emil", "Tobias", "Linus")
"Hello", "Emil", "Tobias", "Linus"
greeting = "Hello"names = ("Emil", "Tobias", "Linus")
இந்த எடுத்துக்காட்டில், "Hello" என்பது greeting க்கு ஒதுக்கப்படுகிறது, மீதமுள்ளவை names இல் சேகரிக்கப்படுகின்றன.
நடைமுறை எடுத்துக்காட்டுகள் *args உடன்
*args நீங்கள் நெகிழ்வான செயல்பாடுகளை உருவாக்க விரும்பும் போது பயனுள்ளதாக இருக்கும்:
எந்த எண்ணிக்கையிலான மதிப்புகளின் கூட்டுத்தொகை
def calculate_sum(*numbers):
total = 0
for num in numbers:
total += num
return total
print(calculate_sum(1, 2, 3)) # 6
print(calculate_sum(10, 20, 30, 40)) # 100
print(calculate_sum(5)) # 5
அதிகபட்ச மதிப்பைக் கண்டறிதல்
def find_max(*numbers):
if len(numbers) == 0:
return None
max_num = numbers[0]
for num in numbers:
if num > max_num:
max_num = num
return max_num
print(find_max(3, 7, 2, 9, 1)) # 9
print(find_max()) # None
சரங்களை இணைக்கும் செயல்பாடு
def join_strings(*words, separator=" "):
return separator.join(words)
print(join_strings("Hello", "World")) # Hello World
print(join_strings("Python", "is", "awesome")) # Python is awesome
print(join_strings("a", "b", "c", separator="-")) # a-b-c
Arbitrary Keyword Arguments - **kwargs
உங்கள் செயல்பாட்டிற்கு எத்தனை சாவி வாதங்கள் அனுப்பப்படும் என்பது உங்களுக்குத் தெரியாவிட்டால், அளவுருப் பெயருக்கு முன் இரண்டு நட்சத்திரங்கள் ** சேர்க்கவும்.
இந்த வழியில், செயல்பாடு வாதங்களின் ஒரு அகராதியைப் பெறும் மற்றும் உருப்படிகளை அதற்கேற்ப அணுகலாம்:
எடுத்துக்காட்டு
def my_function(**kid):
print("His last name is " + kid["lname"])
my_function(fname = "Tobias", lname = "Refsnes")
Arbitrary Keyword Arguments பைதான் ஆவணங்களில் பெரும்பாலும் **kwargs என சுருக்கப்படுகிறது.
**kwargs என்றால் என்ன?
**kwargs அளவுரு எந்த எண்ணிக்கையிலான சாவி வாதங்களையும் ஏற்க ஒரு செயல்பாட்டை அனுமதிக்கிறது.
செயல்பாட்டிற்குள், kwargs அனுப்பப்பட்ட அனைத்து சாவி வாதங்களையும் கொண்ட ஒரு அகராதியாக மாறும்:
எடுத்துக்காட்டு
def my_function(**myvar):
print("Type:", type(myvar))
print("Name:", myvar["name"])
print("Age:", myvar["age"])
print("All data:", myvar)
my_function(name = "Tobias", age = 30, city = "Bergen")
name="Tobias", age=30, city="Bergen"
{"name": "Tobias", "age": 30, "city": "Bergen"}அகராதியாக மாற்றப்பட்டது
சாதாரண வாதங்களுடன் **kwargs பயன்படுத்துதல்
நீங்கள் சாதாரண அளவுருக்களை **kwargs உடன் இணைக்கலாம்.
சாதாரண அளவுருக்கள் **kwargs க்கு முன் வர வேண்டும்:
எடுத்துக்காட்டு
def my_function(username, **details):
print("Username:", username)
print("Additional details:")
for key, value in details.items():
print(" ", key + ":", value)
my_function("emil123", age = 25, city = "Oslo", hobby = "coding")
**kwargs நன்மைகள்:
1. நெகிழ்வான API - புதிய விசைகளை மாற்றங்கள் இல்லாமல் சேர்க்கலாம்
2. தகவல் தொகுப்பு - தொடர்புடைய தரவை ஒரே இடத்தில் வைத்திருக்கவும்
3. மேம்பாட்டு சாய்வு - புதிய அம்சங்களை பின்னூட்ட ஏற்புடையதாக சேர்க்கவும்
நடைமுறை எடுத்துக்காட்டுகள் **kwargs உடன்
பயனர் சுயவிவர செயல்பாடு
def create_user_profile(username, **user_info):
profile = {"username": username}
profile.update(user_info)
return profile
user1 = create_user_profile("john_doe",
age=30,
city="New York",
occupation="Engineer")
user2 = create_user_profile("jane_smith",
age=25,
city="London")
print(user1)
print(user2)
HTML உறுப்பு உருவாக்கம்
def create_html_element(tag, content, **attributes):
attr_string = ""
for key, value in attributes.items():
attr_string += f' {key}="{value}"'
return f'<{tag}{attr_string}>{content}</{tag}>'
# பயன்பாடு
div = create_html_element("div", "Hello World",
class_="container",
id="main",
style="color: blue;")
print(div) # <div class="container" id="main" style="color: blue;">Hello World</div>
*args மற்றும் **kwargs இரண்டையும் இணைத்தல்
நீங்கள் ஒரே செயல்பாட்டில் *args மற்றும் **kwargs இரண்டையும் பயன்படுத்தலாம்.
வரிசை பின்வருமாறு இருக்க வேண்டும்:
def func(regular1, regular2, ...)
def func(..., *args, ...)
def func(..., **kwargs)
எடுத்துக்காட்டு
def my_function(title, *args, **kwargs):
print("Title:", title)
print("Positional arguments:", args)
print("Keyword arguments:", kwargs)
my_function("User Info", "Emil", "Tobias", age = 25, city = "Oslo")
"User Info", "Emil", "Tobias", age=25, city="Oslo"
title = "User Info"args = ("Emil", "Tobias")kwargs = {"age": 25, "city": "Oslo"}
வாதங்களைப் பிரித்தல் (Unpacking)
* மற்றும் ** ஆபரேட்டர்கள் செயல்பாடுகளை அழைக்கும்போது பட்டியல் அல்லது அகராதியை தனி வாதங்களாகப் பிரிக்க (விரிவுபடுத்த) பயன்படுத்தப்படலாம்.
* உடன் பட்டியல்களைப் பிரித்தல்
def my_function(a, b, c):
return a + b + c
numbers = [1, 2, 3]
# பிரித்தல்
result = my_function(*numbers) # my_function(1, 2, 3) போன்றது
print(result) # 6
# பிரிக்காமல் (பிழை)
# result = my_function(numbers) # பிழை!
** உடன் அகராதிகளைப் பிரித்தல்
def my_function(fname, lname):
print("Hello", fname, lname)
person = {"fname": "Emil", "lname": "Refsnes"}
# பிரித்தல்
my_function(**person) # my_function(fname="Emil", lname="Refsnes") போன்றது
# பிரிக்காமல் (பிழை)
# my_function(person) # பிழை!
முக்கிய குறிப்பு:
செயல்பாட்டு வரையறைகளில் வாதங்களைச் சேகரிப்பதற்கு * மற்றும் ** பயன்படுத்தவும், மற்றும் செயல்பாட்டு அழைப்புகளில் வாதங்களைப் பிரிப்பதற்குப் பயன்படுத்தவும்.
பிரித்தலின் நடைமுறை எடுத்துக்காட்டுகள்
தரவு பரிமாற்றத்திற்கு பிரித்தல்
# பல்வேறு ஆதாரங்களிலிருந்து தரவு
basic_info = {"name": "Alice", "age": 30}
contact_info = {"email": "alice@example.com", "phone": "123-456-7890"}
def create_user(name, age, email, phone):
return {
"full_name": name,
"years_old": age,
"contact": {"email": email, "phone": phone}
}
# பல அகராதிகளை இணைத்து பிரிக்கவும்
combined = {**basic_info, **contact_info}
user = create_user(**combined)
print(user)
*args உடன் செயல்பாடுகளை அழைத்தல்
# பல செயல்பாடுகளை ஒரே வடிவத்தில் அழைக்கவும்
def multiply(a, b, c):
return a * b * c
def add(a, b, c):
return a + b + c
# அதே வாதங்களைப் பயன்படுத்தவும்
numbers = [2, 3, 4]
print(multiply(*numbers)) # 24
print(add(*numbers)) # 9
# பகுதி பட்டியலைப் பிரித்தல்
first_two = [2, 3]
print(multiply(*first_two, 4)) # 24
பொதுவான பயன்பாட்டு வழக்குகள்
| பயன்பாடு | *args | **kwargs |
|---|---|---|
| கணித செயல்பாடுகள் | கூட்டுத்தொகை, சராசரி, பெருக்கல் | ஒதுக்கீடுகளுடன் கணக்கீடுகள் |
| தரவு செயலாக்கம் | மாறி நீள தரவு | மாறி விசைகளுடன் கட்டமைப்புகள் |
| வலை மேம்பாடு | URL பாதைகள் | கோரிக்கை அளவுருக்கள் |
| API வடிவமைப்பு | அடிப்படை வாதங்கள் | விருப்ப அம்சங்கள் |
| செயல்பாட்டு மேப்பிங் | செயல்பாட்டு வாதங்கள் | செயல்பாடு விருப்பங்கள் |
*args மற்றும் **kwargs சிறந்த நடைமுறைகள்
*args மற்றும் **kwargs க்குப் பதிலாக *values, **options போன்ற பெயர்களைப் பயன்படுத்தவும்
1. சாதாரண அளவுருக்கள்
2. *args
3. **kwargs
அனைத்து வாதங்களுக்கும் *args/**kwargs பயன்படுத்த வேண்டாம். சரியான வாதங்களை வரையறுக்கவும்
*args மற்றும் **kwargs எதிர்பார்க்கிறது என்பதை ஆவணப்படுத்தவும்
def process_data(*values, **options):
"""செயலாக்க தரவு மதிப்புகள் மற்றும் விருப்பங்கள்.
Args:
*values: செயலாக்க வேண்டிய மதிப்புகள்
**options: செயலாக்க விருப்பங்கள்
- method: செயலாக்க முறை ('sum', 'avg', 'max')
- verbose: விரிவான வெளியீடு
"""
# செயல்பாட்டு உடல்
pass
பயிற்சி
உங்கள் அறிவைச் சரிபார்க்க பின்வரும் பயிற்சியை முயற்சிக்கவும்:
சாவி வாதங்கள் பெரும்பாலும் எவ்வாறு அழைக்கப்படுகின்றன?
பின்வரும் குறியீட்டின் வெளியீடு என்னவாக இருக்கும்?
def my_func(*args):
return len(args)
print(my_func(1, 2, 3, 4, 5))
பின்வரும் குறியீடு என்ன செய்யும்?
def greet(**kwargs):
for key in kwargs:
print(key, ":", kwargs[key])
greet(name="Alice", age=25, city="New York")
சுருக்க அட்டவணை
| அம்சம் | *args | **kwargs |
|---|---|---|
| பொருள் | Arbitrary Arguments | Arbitrary Keyword Arguments |
| சின்னம் | * (ஒரு நட்சத்திரம்) | ** (இரண்டு நட்சத்திரங்கள்) |
| தரவு வகை | டூப்பிள் (Tuple) | அகராதி (Dictionary) |
| பயன்பாடு | நிலை வாதங்கள் | சாவி வாதங்கள் |
| எடுத்துக்காட்டு | def func(*args) |
def func(**kwargs) |
| பிரித்தல் | func(*list) |
func(**dict) |
| பயன்பாடு | மாறி நீள உள்ளீடு | மாறி விசைகள் உள்ளீடு |