getattr() 函數用於返回一個對象屬性值;
語法
getattr(object, name[, default])
參數
object -- 對象。 name -- 字符串,對象屬性。 default -- 默認返回值,如果不提供該參數,在沒有對應屬性時,將觸發 AttributeError
返回值:對象的屬性
使用:
class A: def __init__(self): self.name = 'chen_ke_cheng' def method(self): print('method print') # 實例化 Instance = A() #%% #如果Instance 對象中有屬性name則打印self.name的值,否則打印'not find' print(getattr(Instance, 'name', 'not find')) >> chen_ke_cheng print(getattr(Instance, 'age', 'not find')) >> not find #%% #如果子函數method,否則打印其地址,否則打印default,優先匹配_init_里的屬性,如果添加self.method='ckc', 則這句話將打印輸出'ckc' print(getattr(Instance, 'method', 'default')) >><bound method A.method of <__main__.A object at 0x000001E39B6B1160>> #如果有子函數method,實例化后運行函數並打印None否則打印default print(getattr(Instance, 'method', 'default')()) >>method print None
express1 for var in list (if express2)
語法
在 for 語句后面跟上一個 if 判斷語句,用於過濾掉那些不滿足條件的結果項。
返回值:一般為一個list類型
用法1:express1 for var in list
def_model = 'LstmModel' def find_class_by_name(name, modules): #module 在modules中迭代, 且module 用於判斷有無name屬性,並賦值 modules = [getattr(module, name, None) for module in modules] return next(a for a in modules if a) #find_class_by_name返回的值為類LstmModel的地址,需要對此類進行實例化,得到類變量model,list中為兩個文件 model = find_class_by_name(def_model,[frame_level_models,video_level_models])() #則對model類的子函數進行實例化,則運行子函數。 print(model.create_model()) >>LstmModel None #%% frame_level_models.py class FrameLevelLogisticModel: def create_model(self): print('FrameLevelLogisticModel') class LstmModel: def create_model(self): print('LstmModel') #%% video_level_models.py class FrameLevelLogisticModel: def create_model(self): print('FrameLevelLogisticModel') class ModaModel: def create_model(self): print('ModaModel')
用法2:express1 for var in list if express2
L = [1, 2, 3, 4, 5, 6] L = [x for x in L if x % 2 != 0] >>L = [1, 3, 5]
next() 返回迭代器的下一個項目
語法
next(iterator[, default])
參數
iterator -- 可迭代對象
default -- 可選,用於設置在沒有下一個元素時返回該默認值,如果不設置,又沒有下一個元素則會觸發 StopIteration 異常。
用法
# 首先獲得Iterator對象 #注意加括號是產生一個迭代器 #如 g = (x * x for x in range(10)) g = iter([1,2,3,4,5,6....])就是產生一個迭代器 it = iter([1, 2, 3, 4, 5]) # 循環: while True: try: # 獲得下一個值: x = next(it) print(x) except StopIteration: # 遇到StopIteration就退出循環 break >>1 >>2 >>3 ....