資料型態

      在〈資料型態〉中尚無留言

型態種類

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")

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *