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()
蟹蟹
网友评论