型態種類
Python是弱型語言, 不用宣告型態. 所以在函數傳回時, 可以是任何型態的資料. 但到底是傳回什麼東西, 這就很重要了
型態判斷-type()
Python裏的資料類型, 都是物件型態. type()函數可以列出每種類型的型態.
def f(): pass class Pokemon(object): pass class Pikachu(Pokemon): pass print(type('computer')) print(type(1234)) print(type(1234.0)) print(type(f)) print(type(pow)) print(type(None)) p1=Pokemon(); p2=Pikachu() print(type(p1)) print(type(p2)) 結果: <class 'str'> <class 'int'> <class 'float'> <class 'function'> <class 'builtin_function_or_method'> <class 'NoneType'> <class '__main__.Pokemon'> <class '__main__.Pikachu'>
使用 if 判斷型態時, 可使用 type(123)== int, str. 但如果是要判別函數, 則需import types, 再使用 types.FunctionType, types.BuiltinFunctionType. 如下範例if type(‘abc’)==str:
print("字串") import types if type(f)==types.FunctionType: print("自訂函數") if type(abs)==types.BuiltinFunctionType: print("系統內建函數") if type(lambda x: x) == types.LambdaType: print("Lambda函數") if type((x for x in range(10)))==types.GeneratorType: print("產生器")
type的特異功能
type其實是一個很強大的函數, Python裏的物件導向功能, 都是經由type完成, 這部份將留待講解物件導向時再說明, 有興趣的人可以先參考下面的章節
/index.php/2019/05/21/python_property/
isinstance()
isinstance可以判別class繼承的關係, 也可以拿來判別 int, str, 函數
所以isinstance大小通吃
if isinstance(p2, Pokemon): print("是Pokemon") if isinstance(123, int): print("數字") if isinstance(f, types.FunctionType): print("自訂函數") 結果 : 是Pokemon 數字 自訂函數
另外還有一個特異功能, 就是可以判斷變數是否是屬於某些類型其中的一種. 下面代碼可以判斷是否是list或者tuple
if isinstance([1,2,3,4], (tuple, list)): print("True")