آدرس : تهران میدان فردوسی خیابان ایرانشهر بین سمیه و طالقانی مجتمع تجاری میلاد واحد 9

پشتیبانی 24 ساعته : 02188867940 – 09927674217

برای مشاهده لیست علاقه مندی ها وارد شوید!

مشاهده محصولات فروشگاه
0

هیچ محصولی در سبد خرید نیست.

بازکردن آرگومان تابع در پایتون

دسته بندی :اخبار سایت 22 فوریه 2023 علیرضا بابامرادی 347

یک ویژگی واقعا جالب اما کمی محرمانه، توانایی “باز کردن” آرگومان های تابع از دنباله ها و فرهنگ لغت ها با * و ** است.بیایید یک تابع ساده را به عنوان مثال تعریف کنیم:print(‘<%s, %s, %s>’ % (x, y, z))همانطور که می بینید، این تابع سه آرگومان (x، y، و z) می گیرد و آنها را با فرمت زیبا چاپ می کند. ممکن است از این تابع برای وکتورهای سه بعدی زیبا چاپ شده در برنامه ما:>>> print_vector(0, 1, 0) <0, 1, 0>حالا بسته به اینکه کدام ساختار داده را برای نمایش سه بعدی انتخاب کنیم بردارها با، چاپ آنها با تابع print_vector ما ممکن است def print_vector(x, y, z): کمی احساس ناخوشایندی کنید به عنوان مثال، اگر بردارهای ما به صورت نمایش داده شوند تاپل ها یا لیست ها باید به صراحت شاخص هر جزء را مشخص کنیم هنگام چاپ آنها:>>> list_vec = [1, 0, 1] >>> tuple_vec = (1, 0, 1) >>> print_vector(tuple_vec[0], tuple_vec[2]) tuple_vec[1], <1, 0, 1>استفاده از فراخوانی تابع معمولی با آرگومان‌های مجزا به نظر غیرضروری است. اگر می توانستیم خیلی بهتر نمی شد فقط یک شی برداری را به سه جزء آن “منفجر کنید” و همه چیز را به یکباره به تابع print_vector منتقل کنید؟(البته، می توانید به سادگی print_vector را دوباره تعریف کنید تا طول بکشد یک پارامتر واحد که یک شی برداری را نشان می دهد – اما به خاطر خوشبختانه، راه بهتری برای مدیریت این وضعیت در پایتون وجود دارد بازکردن آرگومان تابع با استفاده از عملگر *:>>> print_vector(*tuple_vec) با داشتن یک مثال ساده، فعلاً آن گزینه را نادیده می گیریم.) >>> print_vector(*list_vec) <1, 0, 1> <1, 0, 1>قرار دادن یک * قبل از یک تکرار در یک فراخوانی تابع، آن را باز می کند و می گذرد عناصر آن به عنوان آرگومان های موقعیتی جداگانه برای تابع فراخوانی شده است. این تکنیک برای هر تکراری، از جمله عبارات مولد، کار می کند. استفاده از عملگر * در یک ژنراتور تمام عناصر را مصرف می کند از ژنراتور و ارسال آنها به تابع: >>> print_vector(*genexpr)علاوه بر عملگر * برای باز کردن توالی هایی مانند تاپل ها، لیست ها و مولدها به آرگومان های موقعیتی، همچنین عملگر ** برای وجود دارد باز کردن آرگومان های کلمه کلیدی از فرهنگ لغت. بردار ما را تصور کنید به عنوان شی dict زیر نمایش داده شد:>>> dict_vec = {‘y’: 0, ‘z’: 1, ‘x’: 1}ما می‌توانیم این دستور را به همان روشی به print_vector منتقل کنیم اپراتور ** برای باز کردن بسته بندی:>>> print_vector(**dict_vec) >>> genexpr = (x * x for x in range(3)) <1, 0, 1>از آنجایی که دیکشنری ها مرتب نیستند، این با مقادیر فرهنگ لغت مطابقت دارد مقدار مربوط به کلید x را در فرهنگ لغت دریافت می کند.اگر از عملگر تک ستاره (*) برای باز کردن دیکشنری استفاده کنید، کلیدها به ترتیب تصادفی به تابع ارسال می‌شوند:>>> print_vector(*dict_vec) و آرگومان های تابع بر اساس کلیدهای فرهنگ لغت: آرگومان x <y, x, z>

علیرضا بابامرادی

راه آسان‌تری برای ارتباط با کاربران‌مان پیدا کرده‌ایم :) عضویت در کانال

مطالب زیر را حتما بخوانید:

قوانین ارسال دیدگاه در سایت

  • چنانچه دیدگاهی توهین آمیز باشد تایید نخواهد شد.
  • چنانچه دیدگاه شما جنبه ی تبلیغاتی داشته باشد تایید نخواهد شد.
  • چنانچه از لینک سایر وبسایت ها و یا وبسایت خود در دیدگاه استفاده کرده باشید تایید نخواهد شد.
  • چنانچه در دیدگاه خود از شماره تماس، ایمیل و آیدی تلگرام استفاده کرده باشید تایید نخواهد شد.
  • چنانچه دیدگاهی بی ارتباط با موضوع آموزش مطرح شود تایید نخواهد شد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

لینک کوتاه:
0