آیا در پایتون به غیر از انتساب راهی برای تعیین نوع یک متغیر وجود دارد؟

0 رأی
میانگین بازدید روزانه 0.08125 بازدید

آیا در پایتون به غیر از انتساب (assignment) راهی برای تعیین نوع یک متغیر وجود دارد؟

من الان موقع استفاده از آرگومان هایی که برای توابعم می فرستم ، باید type رو چک کنم تا مشکلی پیش نیاد

ولی اگه موقع تعریف ، نوعش مشخص شه دیگه نیازی به چک کردن نیست و خیلی کارم راحت تر می شه.

برای مثال:

def powt(a):
	if type(a)==int:
		return a**2

print powt([5])#print "None"
print powt(5)#print "25"

--------------------------------------------

def powt(a):
    return a**2

print powt([5])#Error
print powt(5)#print "25"

 

 

سوال 4 سال قبل در تالار کامپیوتر و اینترنت توسط moeenzarrinfam (2,569 امتیاز)
ویرایش 4 سال قبل توسط ایمان
اینم بگم همن طوری که وقتی تو یک بطری خالی می توانید نوشابه آب دوغ و هر چیز دیگه بنزین و و و هر مایع دیگه بریزید همین طوری که بطری خالی مایه درون ندارد و قابل تشخیص نیست در python هم نمی توان تشخیص داد یک متغیر حاوی چه نوع مقداری است

2 جواب

+1 رأی

مشکل از در خواستی که در کد نویشتین هست ، شما فکر می کنم موقه کد نوشتن به جزءیات ساخناری که استفاده می کنید نیستید کد اول رو trace می کنم :

def powt(a):
    if type(a)==int:
        return a**2
 
print powt([5])#print "None"

در اینجا None به دلیل اینکه مقداری که پاس می دهید عدد نیست بلکه List است و چون در def powt ارسال میشه و از نوع صحیح شناخته نمی شود None برگشت می شود و نمی توانید یک Place رو به توان برسونید همون انتظاری که در دنیای واقعی داری همون انتظار رو هم باید از کد خود داشته باشید ولی بر حالهمون طوری که گفته شد زبان Python دینامیک و Smart است ولی قواعد برای خود دارد که باید رعایت شود مثلا a*2 خروجی رو به 2 می برد ولی کاری به مقدار ندارد بلکه Place رو در دید خود دارد پس در این کد بالا مقدار مد نظر نیست پس توان هم کاربردی ندارد (**) و در کد زیر 

def powt(a):
    return a**2
 
print powt([5])#Error

هم به همین دلیل چون مقدار که برگشت می دهد انتظار List ندارد با خطا مواجه می شوید و در آخر بیشتر وقت بزارید زیر ساخت کد رو یاد بگیرید و برای تعیین نوع می توانید و __name__ , __class__ و همین طور از isinstance استفاده کنید :

__class__ , __name__ :

def powt(a):
    return a**2
 
#print powt([5])#print "None"
print powt(5).__class__;

جواب :

<type 'int'>

-----------------------------------

def powt(a):
    return a**2

#print powt([5])#print "None"
print powt(5).__class__.__name__;

جواب :

int

-----------------------

 

isinstance :

d = {}
isinstance(d, dict)

#Javab => True

ویرایش :

می توانید نوع مورد نظر را Assignment کنید به Variable خودتون البته در ورژن 2 :

_int = int();
_String = str();

print _int
print _String

#_Int = > 0

#_String =>   

 

توصیه نمی کنم بعضی از library ها مشترک هستند که مشکل ایجاد میکند  هنگام ByteCode

 

جواب 4 سال قبل توسط hosseini (1,852 امتیاز)
ویرایش 4 سال قبل توسط hosseini
ممنون
 ولی ای کاش جای جواب به این طویلی ، به گفتن نظرتون + مطالبی که در مورد __name__ و __class__  گفتین اکتفا می کردین.
خواهش می کنم
خودم به شخصه دوست دارم  متوجه بشم پشته پرده چه کار می کنه یک قطعه کد خیلی کمک می کنه در ادامه نظر شخصیه منه
0 رأی

پایتون یک زبان داینامیک است و نیازی به تعریف یک متغیر همانند زبان های استاتیک در آن وجود ندارد و در پایتون هم روشی برای تعریف متغییر به روشی که مد نظر شما است وجود ندارد.

جواب 4 سال قبل توسط Saeed Zarinfam (1,385 امتیاز)
منظور من روشی مشابه generic ها توی جاوا بود که با استفاده از اون می شد نوع رو محدود کرد
کلا مزیت زبان های داینامیک همین داینامیک بودن آنهاست و قابلیت های static type check  که در زبان های استاتیک وجود دارد را ندارند.

سوال های مشابه

+1 رأی
2 جواب میانگین بازدید روزانه 0.07104 بازدید
+1 رأی
2 جواب میانگین بازدید روزانه 0.56744 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.43956 بازدید
+1 رأی
0 جواب میانگین بازدید روزانه 0.0566 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.29321 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.0446 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.05105 بازدید
0 رأی
2 جواب میانگین بازدید روزانه 0.28254 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.09126 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.24402 بازدید
کانال تلگرام جواب یاب
...