1. 程式人生 > >Python 型別判斷 變數存在判斷 None與空字串 is和==區別 nan inf判斷

Python 型別判斷 變數存在判斷 None與空字串 is和==區別 nan inf判斷

一、型別變數

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