美文网首页小资料工程师乐园
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