0 امتیاز
قبل در کامپیوتر و اینترنت توسط (2.6هزار امتیاز)
ویرایش شده قبل توسط

آیا در پایتون به غیر از انتساب (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"

 

 

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

2 پاسخ

+1 امتیاز
قبل توسط (1.9هزار امتیاز)
ویرایش شده قبل توسط

مشکل از در خواستی که در کد نویشتین هست ، شما فکر می کنم موقه کد نوشتن به جزءیات ساخناری که استفاده می کنید نیستید کد اول رو 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

 

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

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

قبل توسط (2.6هزار امتیاز)
منظور من روشی مشابه generic ها توی جاوا بود که با استفاده از اون می شد نوع رو محدود کرد
قبل توسط (1.1هزار امتیاز)
کلا مزیت زبان های داینامیک همین داینامیک بودن آنهاست و قابلیت های static type check  که در زبان های استاتیک وجود دارد را ندارند.

سوالات مشابه

+1 امتیاز
2 پاسخ 668 بازدید
+1 امتیاز
2 پاسخ 2.7هزار بازدید
+1 امتیاز
0 پاسخ 239 بازدید
0 امتیاز
0 پاسخ 1.0هزار بازدید
0 امتیاز
1 پاسخ 217 بازدید
0 امتیاز
2 پاسخ 304 بازدید
0 امتیاز
4 پاسخ 716 بازدید
...