Python *args and **kwargs

பைதான் *args மற்றும் **kwargs ஐக் கற்றுக்கொள்ளுங்கள்

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 செயல்பாட்டு ஓட்டம்:

1
செயல்பாடு அழைப்பு:
my_function("Emil", "Tobias", "Linus")
2
வாதங்கள் சேகரிக்கப்படுகின்றன:
அனைத்து வாதங்களும் kids என்ற டூப்பிளில் சேகரிக்கப்படுகின்றன
3
உள்ளே செயல்பாடு:
kids = ("Emil", "Tobias", "Linus")
4
முடிவு:
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")
*args உள்ளே
("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"
**kwargs உள்ளே
{"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 இரண்டையும் பயன்படுத்தலாம்.

வரிசை பின்வருமாறு இருக்க வேண்டும்:

1
சாதாரண அளவுருக்கள்
def func(regular1, regular2, ...)
2
*args (நிலை வாதங்கள்)
def func(..., *args, ...)
3
**kwargs (சாவி வாதங்கள்)
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

பயிற்சி

உங்கள் அறிவைச் சரிபார்க்க பின்வரும் பயிற்சியை முயற்சிக்கவும்:

சாவி வாதங்கள் பெரும்பாலும் எவ்வாறு அழைக்கப்படுகின்றன?

kwargs
✓ சரி! சாவி வாதங்கள் Python ஆவணங்களில் kwargs என சுருக்கப்படுகின்றன
type 2 arguments
✗ தவறு! இது Python இல் பயன்படுத்தப்படும் சொல் அல்ல
B arguments
✗ தவறு! இது Python இல் பயன்படுத்தப்படும் சொல் அல்ல

பின்வரும் குறியீட்டின் வெளியீடு என்னவாக இருக்கும்?

def my_func(*args):
  return len(args)

print(my_func(1, 2, 3, 4, 5))
15
✗ தவறு! இது மதிப்புகளின் கூட்டுத்தொகை அல்ல
5
✓ சரி! len(args) args டூப்பிளில் உள்ள உறுப்புகளின் எண்ணிக்கையை வழங்குகிறது
(1, 2, 3, 4, 5)
✗ தவறு! இது args டூப்பிள், len(args) அல்ல

பின்வரும் குறியீடு என்ன செய்யும்?

def greet(**kwargs):
  for key in kwargs:
    print(key, ":", kwargs[key])

greet(name="Alice", age=25, city="New York")
அனைத்து சாவி-மதிப்பு ஜோடிகளையும் அச்சிடும்
✓ சரி! இது kwargs அகராதியில் உள்ள அனைத்து விசைகளையும் மதிப்புகளையும் அச்சிடுகிறது
பிழையை உருவாக்கும்
✗ தவறு! குறியீடு சரியானது, பிழை இல்லை
"Alice" என்று மட்டுமே அச்சிடும்
✗ தவறு! இது அனைத்து விசை-மதிப்பு ஜோடிகளையும் அச்சிடுகிறது

சுருக்க அட்டவணை

அம்சம் *args **kwargs
பொருள் Arbitrary Arguments Arbitrary Keyword Arguments
சின்னம் * (ஒரு நட்சத்திரம்) ** (இரண்டு நட்சத்திரங்கள்)
தரவு வகை டூப்பிள் (Tuple) அகராதி (Dictionary)
பயன்பாடு நிலை வாதங்கள் சாவி வாதங்கள்
எடுத்துக்காட்டு def func(*args) def func(**kwargs)
பிரித்தல் func(*list) func(**dict)
பயன்பாடு மாறி நீள உள்ளீடு மாறி விசைகள் உள்ளீடு