ورود

View Full Version : تعریف اولیهء متغییر بدون مشخص کردن مقدار در پایتون



eshpilen
یک شنبه 26 دی 1389, 10:10 صبح
وقتی میخوایم یک متغییر رو پیشاپیش تعریف کنیم اما بهش مقدار خاصی رو اختصاص ندیم، باید از چه روشی استفاده کنیم؟
مثلا از v=None باید استفاده کنیم؟

Mehdi Asgari
یک شنبه 26 دی 1389, 11:05 صبح
در پایتون همچین چیزی معنی نداره؛ هر مقداری می تونی بدی. None یک convention هست، نه یک rule
ضمنا وظیفۀ اصلی None مشخص کردن اینه که مقدار یک آرگومان اختیاری به یک تابع ارسال نشده

eshpilen
یک شنبه 26 دی 1389, 11:30 صبح
خیلی ممنون از پاسخ سریع شما.
آره میدونم هر مقداری میشه داد. ولی گاهی هست که میخوایم مشخص باشه که متغییر مقدار مشخصی نداره، تا اگر اشتباها بعدا در جایی بدون دادن مقدار بهش ازش استفاده شد، برنامه دچار خطا بشه یا بهرحال خیلی راحت این وضعیت مشخص بشه.
اگر هم مقدار اولیه رو از نوع دیگری بدیم (مثلا به یک متغییر رشته ای مقدار عددی بدیم) بنظرم اصلا اصولی نیست و گیج کننده هم هست.
اگر هم یک مقدار پیشفرض بدیم، مثلا به یک متغییر رشته ای، مقدار رشتهء خالی رو بعنوان مقدار اولیه اختصاص بدیم، یا به یک متغییر عددی مقدار 0 یا -1 و غیره رو بر اساس محدودهء مقادیری که در اون ذخیره خواهند شد بدیم، بازهم ابهام و امکان باگ این حالت بیشتر از None هست و با دستکاری ها و تغییرات در بقیهء الگوریتم، ممکنه معنا و کاربرد خودش رو از دست بده و تصحیح مقدار اولیهء اون از زیر دست در بره.

روش دیگه ای پیدا نکردم مثل var v و امثالهم که در زبانهای دیگر بکار میرن. ظاهرا برای تعریف پیشاپیش یک متغییر حتما باید مقداری رو بهش اختصاص بدیم. درسته؟
فکر میکنم تنها مزیت فنی اختصاص یک مقدار اولیه از نوعی که بعدا در متغییر ذخیره میشه اینه که یک تبدیل نوع روی اون متغییر صورت نمیگیره و از اول نوع مقادیری رو که درش ذخیره خواهند شد داره. اما بنظرم چنین عملیاتی تبدیلی در یک زبان سطح بالا از نوع داینامیک تایپ متداول و بی اشکال محسوب میشه (بخصوص وقتی که از None به دیگر کلاسها باشه) و هزینهء اجرایی ای که داره عملا بحساب نمیاد (مگر در شرایط خاص).

r00tkit
یک شنبه 26 دی 1389, 11:47 صبح
ولی گاهی هست که میخوایم مشخص باشه که متغییر مقدار مشخصی نداره، تا اگر اشتباها بعدا در جایی بدون دادن مقدار بهش ازش استفاده شد، برنامه دچار خطا بشه یا بهرحال خیلی راحت این وضعیت مشخص بشه.


تو پایتون متغیر ها نوع ندارن این مقدار متغیره که نوع ان رو مشخص می کنه و ممکنه این متغیر در حال اجرا به هر چیز دیگه bound بشه
و اگه متغیری مقدار نداشته باشه یعنی وجود نداره در کل این زبان یه زبان داینامیکه و نباید به دید استاتیک نگاه کنی

------
من برنامه نویس پایتون نیستم پس ممکنه اشتباه بگم

eshpilen
یک شنبه 26 دی 1389, 12:00 عصر
حقیقتش در زمینهء ساختار داخلی پایتون بحثی ندارم. فقط از نظر خوانایی و منطق خود برنامه و پایین آوردن احتمال اشتباه و باگهای بعدی در برنامه بود که دنبال این بودم که، متغییر خودم رو چطور تعریف اولیه بکنم درحالیکه که هنوز از نظر الگوریتم برنامه مقدار صحیح اون قابل محاسبه نیست.
تا اینجا فکر میکنم انتخاب None مناسب بوده باشه. چون هم اسمش و هم نوعش برای چنین کاربردهایی هست ظاهرا و روش دیگه ای در پایتون برای مشخص کردن مقدار نامعلوم یا تخصیص داده نشده نداریم. یعنی هم خوانایی برنامم اینطوری بالا میره و هرکس که کد رو بررسی کنه میفهمه که این مقدار حتی یک مقدار پیشفرض هم نیست و مقدار اون متغییر حتما باید جای دیگری در برنامه بهش اختصاص داده بشه، و هم اگر جایی از متغییر مورد نظر قبل از اختصاص مقداری بهش استفاده شد، احتمال توقف برنامه یا شناسایی این خطا بالا هست.

r00tkit
یک شنبه 26 دی 1389, 12:29 عصر
متغییر خودم رو چطور تعریف اولیه بکنم درحالیکه که هنوز از نظر الگوریتم برنامه مقدار صحیح اون قابل محاسبه نیستهر چی دلت می خواد بزار چون زمانی که مقدار معلوم شد rebind می شه