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