zoukankan      html  css  js  c++  java
  • (python)getattr等用法

    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
    ....

  • 相关阅读:
    Hua Dan stories | Hua Dan
    字典树(前缀树)的应用 乖兔子的专栏 博客频道 CSDN.NET
    《算法精解:C语言描述》勘误
    curl
    javascript实现的gzip压缩(deflate)和解压缩(inflate)算法 sudone.com服务器系统架构分析日志
    python处理gzip压缩的http数据 XII 博客大巴
    Zlib与GZip woaidongmao C++博客
    文件压缩/解压算法 cutepig 博客园
    url
    转:Ubuntu Terminal 使用和常用快捷键
  • 原文地址:https://www.cnblogs.com/ChenKe-cheng/p/11236915.html
Copyright © 2011-2022 走看看