Python 型別判斷 變數存在判斷 None與空字串 is和==區別 nan inf判斷
阿新 • • 發佈:2019-02-17
一、型別變數
type
#判斷是否為整數
type(varObj) is types.IntType
StringType
FloatType
DictType
TupleType
ListType
BooleanType
isinstance
isinstance(aaa,str)
type與isinstance區別
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B (), A) # returns True
type(B()) == A # returns False
二、變數存在
異常捕獲
try:
print self.fileReadOpen
except Exception:
pass
else:
del self.fileReadOpen
def isset(v):
try :
type (eval(v))
except :
return 0
else :
return 1
isset('varname' ) //變數只能在try裡呼叫才會捕獲異常,所以採用字串引數。
名稱空間
'varname' in locals().keys()
'varname' in dir()
dir()不帶引數時,返回當前範圍內的變數、方法和定義的型別列表;帶引數時,返回引數的屬性、方法列表。如果引數包含方法dir(),該方法將被呼叫。如果引數不包含dir(),該方法將最大限度地收集引數資訊。
三、None與空字串
有句話說的Python中萬物皆為物件。None也是物件。這就好理解None與空字串NULL區別:
type(None)
<class 'NoneType'>
type('')
<class ''str'>
>>> None == 0 //(int)
False
>>> None == ' ' //(str)
False
>>> None == False //(boolean)
False
四、is和==區別
is判斷的是a物件是否就是b物件,是通過id來判斷的。
==判斷的是a物件的值是否和b物件的值相等,是通過value來判斷的。
>>> d = {"a":1}
>>> dd = d.copy()
>>> d is dd
False
>>> d == dd
True
五、nan inf
記憶:對於is判斷,符合is的物件比較定義:物件is物件本身,物件不is新建物件。對於==判斷,除了nan,符合==的值比較的定義。對於nan在用==值比較時,可以認為,nan物件的值不==該nan物件的值,nan物件的值不==新建nan物件的值。
>>> inf = float("inf")
>>> ninf = float("-inf")
>>> nan = float("nan")
>>> inf is inf
True
>>> ninf is ninf
True
>>> nan is nan
True
>>> inf == inf
True
>>> ninf == ninf
True
>>> nan == nan // nan物件時本身物件nan
False
>>> inf is float("inf")
False
>>> ninf is float("-inf")
False
>>> nan is float("nan")
False
>>> inf == float("inf")
True
>>> ninf == float("-inf")
True
>>> nan == float("nan") //前一個nan值不等於新建物件float("nan")的值
False
判斷nan方法:
使用math模組:
>>> import math
>>> math.isinf(inf)
True
>>> math.isinf(ninf)
True
>>> math.isnan(nan)
True
>>> math.isinf(float("inf"))
True
>>> math.isinf(float("-inf"))
True
>>> math.isnan(float("nan"))
True
利用自身判斷:
>>> def isnan(num):
return num != num
>>> isnan(float("nan"))
True
使用numpy:
>>> import numpy as np
>>>
>>> np.isnan(np.nan)
True
>>> np.isnan(float("nan"))
True
>>> np.isnan(float("inf"))
False