zoukankan      html  css  js  c++  java
  • 你没见过的python语法

    目录:

    1、不一样的列表

    2、改变type中的规则,创建类:类属性大写

    3、%s字串格式化,不用元组用字典

    4、没有参数抛出异常

    5、字符串签名加f 格式化字符串

    6、attr库

    7、python的十大装B操作

    8、for ... else ... 用法


    1、不一样的列表

    list1 = ["a", "b", "c"]
    self, *args = list1
    print(self)
    print(args)
    

    输出:

    a
    ['b', 'c']
    

      

    2、改变type中的规则,创建类:类属性大写

    class UpperAttrMetaClass(type):
        def __new__(cls, class_name, class_parents, class_attrs):
            # 遍历属性字典,把不是__开头的属性名字变为大写
            newAttr = {}
            for k, v in class_attrs.items():
                if not k.startswith("__"):
                    newAttr[k.upper()] = v
    
            # 方法1:通过‘type’来创建类对象
            # return type(class_name, class_parents, newAttr)
    
    
            # 方法2:复用type.__new__方法创建类对象
            # return type.__new__(cls, class_name, class_parents, newAttr)
    
            # 方法3:使用super方法创建类对象
            return super(UpperAttrMetaClass, cls).__new__(cls, class_name, class_parents, newAttr)
    
    
    # python3的用法
    class Foo(object, metaclass=UpperAttrMetaClass):
        bar = "bip"
    
    
    # 判断Foo类中是否有某个属性
    print(hasattr(Foo, 'bar'))
    print(hasattr(Foo, "BAR"))
    
    f = Foo()
    print(f.BAR)
    

    输出:

    False
    True
    bip
    

      

    3、%s字串格式化,不用元组用字典

    str= """
    第一个:%(delim)s
    第二个:%(id)s
    """
    str_new = str % {'delim': "$", 'id': 9}
    print(str_new)
    

    输出:

    第一个:$
    第二个:9
    

      

    4、没有参数抛出异常

    def func1(*args, **kwargs):
        if not args:  # 无参数报错
            raise TypeError("descriptor 'format' of 'Formatter' object needs an argument")
        else:
            n_args = len(args)
            pattern = " ".join("%s," for x in range(n_args))
            # print(pattern)
        return "I am func1, my args is: " + pattern % args
    
    
    if __name__ == '__main__':
        # 有参数正常
        res1 = func1("a1", "a2", "a3")
        print(res1)
    
        # 无参数报错
        res2 = func1()
        print(res2)
    

      

    输出:

    I am func1, my args is: a1, a2, a3,
    
    Traceback (most recent call last):
      File "D:/aaa-py/tmp/my00-tool.py", line 17, in <module>
        res2 = func1()
      File "D:/aaa-py/tmp/my00-tool.py", line 3, in func1
        raise TypeError("descriptor 'format' of 'Formatter' object needs an argument")
    TypeError: descriptor 'format' of 'Formatter' object needs an argument
    

      

    5、字符串签名加f 格式化字符串

    例子:

    https://blog.csdn.net/sunxb10/article/details/81036693

     

    6、attr库

    https://www.attrs.org/en/latest/glossary.html 

    7、python的十大装B操作

    https://blog.csdn.net/xufive/article/details/102856921

      

    8、for ... else ... 用法

    和break联合使用。当没有运行break时,else中语句会执行。否则,不执行。

    else可以理解为没有发生break。

    https://blog.csdn.net/u011675334/article/details/105097521/

  • 相关阅读:
    详解扩展欧几里得算法(扩展GCD)
    NOIP 2012 同余方程
    NOIP 2011 观光公交
    NKOJ4330 逛公园
    NKOJ 7.7练习题A IP地址
    NKOJ3777 卡牌操作
    NKOJ3772 看电影
    NKOJ3765 k个最小和
    NKOJ3775 数列操作
    NKOJ3768 数列操作
  • 原文地址:https://www.cnblogs.com/andy9468/p/9716231.html
Copyright © 2011-2022 走看看