انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: [پایتون] - منظور از این کد چیه؟(حل شد)  (دفعات بازدید: 1782 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین سالار مقدم

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 2074
  • جنسیت : پسر
  • هر چقدر بدونی بازم کمه.
    • سالار مقدم
[پایتون] - منظور از این کد چیه؟(حل شد)
« : 28 آبان 1392، 07:28 ب‌ظ »
سلام دوستان
از اونجایی که پایتونی کا خیلی کاربر فعال داره بر آن شدم که اینجا پست بدم :|
امروز داشتم آموزش های پایتون رو می خوندم که به کد زیر بر خوردم:
1 def total(initial=5, *numbers, **keywords):
2     count = initial
3     for number in numbers:
4         count += number
5     for key in keywords:
6         count += keywords[key]
7         return count
8 print(total(10, 1, 2, 3, vegetables=50, fruits=100))
هر چی فکر کردم نتونستم دقیق کد رو درک کنم، تاجایی که می تونم حدس بزنم numbers* و keywords** اینجا گروهی از متغیر ها هستند(شبیه به آرایه ها) که به وسیله ی اونا می تونیم چندین مقدار رو توشون ذخیره کنیم.
از جمله مشکلات دیگه هم اینه که فرق * با ** چیه؟ تو قسمت آرگومان ها چجوری مفسر متوجه میشه که کدوم مقدار برای کدوم یکی از این هاست؟ کلا در مورد این مبحث توضیح بدید ممنون میشم
« آخرین ویرایش: 03 آذر 1392، 10:09 ب‌ظ توسط سالار مقدم »

آفلاین xubuntu4iran

  • Hero Member
  • *
  • ارسال: 748
  • جنسیت : پسر

آفلاین !

  • High Sr. Member
  • *
  • ارسال: 586
  • جنسیت : پسر
  • Don't Panic!
    • مانیتورینگ سایت
پاسخ : [پایتون] - منظور از این کد چیه؟
« پاسخ #2 : 28 آبان 1392، 08:22 ب‌ظ »
فکر کنم اون استار ( * ) واسه فرستادن مجموعه ای از مقادیر تک داده ای مثل یک لیست به عنوان آرگومان به یک فانکشنه :

list = (5, 10 ,15)

و دابل استار (**) دیکشنری میفرسته (که مقادیر شناسه و مقدارشناسه دارند) به یک فانکشن :

dictionary = {'singleDariush':5,'doubleDariush':10,'tripleDariush':15}
I just felt like running

Altern AI Directory --- GitHub

آفلاین امید توانا

  • Hero Member
  • *
  • ارسال: 981
  • جنسیت : پسر
پاسخ : [پایتون] - منظور از این کد چیه؟
« پاسخ #3 : 28 آبان 1392، 08:31 ب‌ظ »
اول اینکه کد دارای خطای منطقی هست و اون هم اینه که return باید یک تب عقب بیاد، در غیر این صورت فقط یکبار for دوم رو اجرا می‌کنه. ‌*something برای چند تایی مرتب به کار می‌ره و **something برای دیکشنری. دیکشنری لیستی بدون ترتیب از keyword = value است. در کد شما ۱۰ جای initial می‌شینه، ۱ و ۲ و ۳ جای numbers، و vegetables=50, fruits=100 جای keywords. اگر کد شما رو به همین شکل اجرا کنیم جواب ۱۱۶ می‌شه که حاصل ۱۰+۱+۲+۳+۱۰۰ است، چون حلقهٔ دوم تنها یکبار اجرا می‌شود و تنها مقدار fruit  جمع می‌گردد چون در دیکشنری جلوتر از vegetable است. اما اگر return رو به عقب بکشید مقدار vegetable هم اضافه می‌شود و حاصل ۱۶۶ است.

آفلاین سالار مقدم

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 2074
  • جنسیت : پسر
  • هر چقدر بدونی بازم کمه.
    • سالار مقدم
پاسخ : [پایتون] - منظور از این کد چیه؟
« پاسخ #4 : 28 آبان 1392، 10:25 ب‌ظ »
فکر کنم اون استار ( * ) واسه فرستادن مجموعه ای از مقادیر تک داده ای مثل یک لیست به عنوان آرگومان به یک فانکشنه :

list = (5, 10 ,15)

و دابل استار (**) دیکشنری میفرسته (که مقادیر شناسه و مقدارشناسه دارند) به یک فانکشن :

dictionary = {'singleDariush':5,'doubleDariush':10,'tripleDariush':15}
اول اینکه کد دارای خطای منطقی هست و اون هم اینه که return باید یک تب عقب بیاد، در غیر این صورت فقط یکبار for دوم رو اجرا می‌کنه. ‌*something برای چند تایی مرتب به کار می‌ره و **something برای دیکشنری. دیکشنری لیستی بدون ترتیب از keyword = value است. در کد شما ۱۰ جای initial می‌شینه، ۱ و ۲ و ۳ جای numbers، و vegetables=50, fruits=100 جای keywords. اگر کد شما رو به همین شکل اجرا کنیم جواب ۱۱۶ می‌شه که حاصل ۱۰+۱+۲+۳+۱۰۰ است، چون حلقهٔ دوم تنها یکبار اجرا می‌شود و تنها مقدار fruit  جمع می‌گردد چون در دیکشنری جلوتر از vegetable است. اما اگر return رو به عقب بکشید مقدار vegetable هم اضافه می‌شود و حاصل ۱۶۶ است.
مرسی امید و داریوش، جواباتون کامل و عالی بودند :) آره اونجا اشتباه شد، چون از تو ویم کپی کردم یکم به هم ریخته بود درستش کردم اون ریترن جا افتاده بود :)
باکلی آزمون و خطا یه چیزایی فهمیدم.پس تک ستاره لیستی از اعداد میگیره، پس با این حساب به جز اولی که میره واسه initial هر آرگومان که عدده میره به numbers، این اعداد می تونن متغیر هم باشن. بعد توی فور این اعداد به ترتیب جایگزین میشن. حالا دو سوال پیش میاد .سوال اول اینه که ما می تونیم به هر مقدار مثل آرایه دسترسی داشته باشیم؟ مثلا مقدار سوم رو با چیزی شبیه numbers[2]n داشته باشیم؟سوال دوم اینه که درواقع توی دو ستاره متغیر هایی با مقدار اعلان میشن؟ یعنی ما یه متغیر رو با مقدارش می فرستیم؟ من پایگاه داده نخوندم منظور رو از کی ولیو دقیق متوجه نمیشم.

پ.ن : اون n ها رو که می بینین اضافه کردم برای این بود که پرانتز ها به هم نخوره