Python語言學習講解八:型別判斷type與isinstance的區別
注:每週一到週五都會進行相關python基礎知識更新,歡迎大家提寶貴的意見
type和isinstance共同點:用於驗證引數型別
在遊戲專案中,我們會在每個介面驗證客戶端傳過來的引數型別,如果驗證不通過,返回給客戶端“引數錯誤”錯誤碼。
這樣做不但便於除錯,而且增加健壯性。因為客戶端是可以作弊的,不要輕易相信客戶端傳過來的引數。
驗證型別用type函式,非常好用,比如
>>type('foo') == str
True
>>type(2.3) in (int,float)
True
區別:在判斷子類上。
type()不會認為子類是一種父類型別。
isinstance()
eg:
1. class Foo(object):
2. pass
3.
4. class Bar(Foo):
5. pass
6.
7. print type(Foo()) == Foo
8. print type(Bar()) == Foo
9. print isinstance(Bar(),Foo)
輸出
True
False
True
需要注意的是,舊式類跟新式類的type()結果是不一樣的。舊式類都是<type 'instance'>。
1. class A:
2. pass
3.
4. class B:
5. pass
6.
7. class C(object):
8. pass
9.
10. print 'old style class',type(A())
11. print 'old style class',type(B())
12. print 'new style class',type(C())
13. print type(A()) == type(B())
輸出
old style class <type 'instance'>
old style class <type 'instance'>
new style class <class '__main__.C'>
True
不存在說isinstance比type更好。看情況使用
相關推薦
Python語言學習講解八:型別判斷type與isinstance的區別
注:每週一到週五都會進行相關python基礎知識更新,歡迎大家提寶貴的意見 type和isinstance共同點:用於驗證引數型別 在遊戲專案中,我們會在每個介面驗證客戶端傳過來的引數型別,如果驗證不通過,返回給客戶端“引數錯誤”錯誤碼。 這樣做不但便於除錯,而且
Python型別判斷type與isinstance
def compute_entropy(self, dataset): """ 計算資料集dataset的資訊熵 dataset: 第一列為資料集的label """ if isinstance(dataset, np.ndarray): pass e
python資料型別判斷type與isinstance的區別
type()不會認為子類是一種父類型別,isinstance()會認為子類是一種父類型別 class Foo(object): pass class Bar(Foo): pass print type(Foo()) == Foo print
型別判斷type與isinstance的區別
在遊戲專案中,我們會在每個介面驗證客戶端傳過來的引數型別,如果驗證不通過,返回給客戶端“引數錯誤”錯誤碼。 這樣做不但便於除錯,而且增加健壯性。因為客戶端是可以作弊的,不要輕易相信客戶端傳過來的引數。 驗證型別用type函式,非常好用,比如 >>type('fo
Python 語言學習 第一篇:資料型別(數字,集合,布林型別,操作符)
Python語言最常用的物件是變數和常量,常量的值是字面意思,其值是不可變的,變數的值是可變的,例如,123,"上海"是常量,而a=1,a=2,其中a是變數名。內建的核心資料型別有:數字、字串、列表、字典、元組、檔案、集合、None和布林型別。Python是強型別的語言,變數的資料型別是由初始化的常量來指定的
Python 語言學習 第八篇:函式2(引數、lamdba和函式屬性)
函式的引數是引數暴露給外部的介面,向函式傳遞引數,可以控制函式的流程,函式可以0個、1個或多個引數;在Python中向函式傳參,使用的是賦值方式。 一,傳遞引數 引數是通過賦值來傳遞的,傳遞引數的特點是: 引數的傳遞是通過自動把物件賦值給函式的本地變數名來實現的, 在函式內部的變數名的賦值不會
Python語言學習講解十四:python之用純屬性取代get和set方法
注:每週一到週五都會進行相關Python基礎知識更新,歡迎大家提寶貴的意見 一、從其他語言轉入python的開發者,一般可能在設計類的時候,在其中填寫get和set方法,用來獲取和設定類的成員屬性。
Python語言學習講解十六:python之描述符__set__和__get__ 等解釋
注:每週一到週五都會進行相關Python基礎知識更新,歡迎大家提寶貴的意見 一、方法: 首先說下python中存在的幾種方法:物件方法、靜態方法、類方法等,歸屬權分別為obj、cls、cls 其實可以從他們的引數中就可以看的出來 物件方法引數中含有self,這個
Python 語言學習 第二篇:數據類型(字符串)
拼接 查找字符 保留 upper gis 原始的 一次 \n 處的 字符串是一個有序的字符的不可變序列,用於存儲基於文本的信息。字符串所包含的字符存在從左至右的位置順序,不可以在原處(in-place)修改。Python沒有C語言的字符和字符串之分,只有字符串。從嚴格意義上
Android學習筆記八:SQLite判斷一張表是否存在
CREATE TABLE sqlite_master ( type TEXT, name TEXT, tbl_name TEXT, rootpage INTEGER, sql TEXT ); 對於表來說,type 欄位永遠是 ‘table’,name 欄位永遠是表的名字。所以,要獲得資料庫中所有表的列表,
Python 語言學習 第三篇:陣列型別(列表、字典和元組)
列表和欄位都可以在原處進行修改,可以按照需求增長或縮短,並且可以包含任何型別的物件或被巢狀。列表和字典儲存的是物件的引用,而不是拷貝。 一,列表 列表是有序的序列,每一個列表項的順序是固定的,這使得列表可以通過指定的偏移來索引和分片。列表是可變的序列,支援在原處修改。 列表項可以是任何型別,或物件,也可
Python 語言學習 第四篇:動態型別模型
Python的變數不用宣告,賦值之後就可以直接使用,型別是在執行過程中自動確定的,這就是動態型別模型。該模型把變數和物件設計成兩個不同的實體,物件是儲存資料的地方,物件的型別是由初始值自動決定的,而變數僅僅是物件的引用。變數是通用的,同一個變數名可以引用任何型別的物件。 一,變數、物件和引用 動態型別模型
Web安全學習筆記(八):SQL-結構化查詢語言
.com 時也 create 取數據 數據操作 date 簡單的 esc 標準 SQL概述: 結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系數據庫
Java語言學習(八):集合類框架
Java中提供了各種資料集合類,這些類主要用於儲存複雜結構的資料。下面將介紹常用的幾種集合類的用法。 ArrayList集合可以看做一個動態的陣列,比普通陣列更加靈活,更適合儲存未知數量的資料。它突破了普通陣列固定長度的限制,可以隨時向陣列
golang語言學習第二課:變數型別及常量與列舉
go語言的變數型別: bool (true為0,false不等於0), string int 分好多種int,有點頭暈,但用預設的int就足夠了,根據機器判斷,是32位的用int32,是64位的用int64. byte, 又是uint8的別名。 rune(類似char,但是
Cris 學習Python日記(二):條件判斷語句
1、if 語句和input 函式 # 條件判斷語句(if 語句) # 語法:if 條件表示式: # 程式碼塊 # 預設情況下,if 語句只會控制僅僅跟在後面的那條語句,如
Python 語言學習 第六篇:迭代和解析
Python 語言學習 第六篇:迭代和解析 Python中的迭代是指按照元素的順序逐個呼叫的過程,迭代概念包括:迭代協議、可迭代物件和迭代器三個概念。 迭代協議是指有__next__()函式的物件會前進到下一個結果,而到達系列的末尾時,則會引發StopIteration異常。為了支援迭代協議
Python 語言學習 第七篇:函式1(定義、呼叫和變數的作用域)
函式是把一些語句集合在一起的程式結構,用於把複雜的流程細分成不同的元件,能夠減少程式碼的冗餘、程式碼的複用和修改程式碼的代價。 函式可以0個、1個或多個引數,向函式傳遞引數,可以控制函式的流程。函式還可以返回程式碼執行的結果,從技術上講,任何函式都要返回結果,一個沒有返回值的函式會自動返回none物件。如果
Python 語言學習 第九篇:模組
模組是把程式程式碼和資料封裝的Python檔案,也就是說,每一個以副檔名py結尾的Python原始碼檔案都是一個模組。每一個模組檔案就是一個獨立的名稱空間,用於封裝頂層變數名;在一個模組檔案的頂層定義的所有的變數名(函式名也是一個變數名),稱作模組的屬性。匯入模組給予了對模組的全域性作用域中的變數名的讀取權,
Python語言學習:常見的幾個坑
1、混用空格和tab python是嚴格縮排的,全用空格或者全用tab就沒錯,如果是混用就會有問題。如果用vim開發的話,一般是在配置中把tab轉成4個空格。 2、用可變物件作為預設引數 def f(a=[]): a.append('kzc') return