美文网首页小资料工程师乐园
python: 生成器,装饰器以及列表推导式写法

python: 生成器,装饰器以及列表推导式写法

作者: luffynoonepiece | 来源:发表于2020-07-09 15:42 被阅读0次

    1.连接字符串尽量用format,两个的时候可以用 +

    name = "lxw"
    age = 24
    x = "{0}{1}".format(name, age)   #YES
    print(type(x))
    

    2.避免在循环中用+和+=操作符来累加字符串. 由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间.

    # 可以将每个子串加入列表, 然后在循环结束后用 .join 连接列表.
    list_ = ['m','i','t','c','hell']
    print(''.join(list_))
    

    3.推荐使用with语句以管理文件

    with open(...) as f:
        f.write(...)
    

    4.在不复杂的前提下建议使用列表推导式

    for i in [1,2,3,4,5]:
        if i != 1:
            print('Yes')
        else:
            print('No')
    # 有if和else的列表推导式
    [print('Yes') if i == 1 else print('No') for i in [1,2,3,4,5]]
    # 只有if的列表推导式
    [print('Yes') for i in [1,2,3,4,5] if i == 1]
    # 列表推导式实现对list的append,一行完成定义list和append。
    def num0():
        a = [x for x in range(10)]
        print(a)
    num0()
    # 两层for循环
    matrix = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ]
    
    flattened = []
    '''
    for row in matrix:
        for i in row:
            flattened.append(i)
    '''
    [flattened.append(i) for row in matrix for i in row ]
    print(flattened)
    # 字典的推导式
    input_dict = {'Name':'Mitchell'}
    changed = {value: key for key, value in input_dict.items()} # 将字典的value和key互换
    print(changed)
    # 集合的推导式
    words_list = ['Apple','Banana','Cat','Dog']
    chars = {w[0] for w in words_list} # 用列表所有元素的首字母生成集合
    print(chars)
    

    5.装饰器

    from functools import wraps
    import time
    
    # 定义装饰器
    def login(text): # 定义一个可以传入参数的装饰器,需要在嵌套一个函数
        def time_calculate(func):
            def wrapper(*args,**kargs):
                start_time = time.time()
                f = func(*args,**kargs)
                exec_time = time.time() - start_time
                print('执行时间为: {}s'.format(exec_time))
                return f
            return wrapper
        print(text)
        return time_calculate
    
    @login('Hello World!')
    def add_num2(a, b):
        return a + b
    add_num2(1, 2)
    

    6.生成器

    # 例子:根据DataFrame中的列的索引返回Excel中的对应的列标签(如0对应A),用到了生成器。
    from string import ascii_lowercase,ascii_uppercase # 小写大写字母
    import itertools
    
    def iter_all_strings():
            for size in itertools.count(1):
                for s in itertools.product(ascii_uppercase, repeat=size):
                    yield "".join(s)
    def dict_location():
            list_location = []
            for s in iter_all_strings():
                list_location.append(s)
                if s == 'ZZ':
                    break
            a = list(range(0,716))
            excel_dict = dict(zip(a,list_location))
            return excel_dict
    dict_location()
    
    蟹蟹

    相关文章

      网友评论

        本文标题:python: 生成器,装饰器以及列表推导式写法

        本文链接:https://www.haomeiwen.com/subject/felscktx.html