1.利用python装饰器计算程序运行时间
import time
def time_it(func) {
def wrapper(*args, **kargs) {
start_time = time.time()
result = func(*args, **kargs)
end_time = time.time()
return end_time - start_time
}
return func
}
@time_it
def function() {
total = 0
for i in range(100000):
total += i
}
function()
1.*利用修饰器传参,这个是多次调用一个函数
def repeat(n):
def decorator(func):
def wrapper(*args, **kargs):
for _ in range(n):
result = func(*args, **kargs)
return result
return wrapper
return decorator
@repeat(3)
def function():
print("hello")
2.多进程计算1->100000
import threading
import time
# 装饰器用于测量函数运行时间
def time_it(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__} took {end_time - start_time:.6f} seconds")
return result
return wrapper
# 计算1到n的和的函数
@time_it
def compute_sum(start, end):
return sum(range(start, end + 1))
# 主函数,用于创建和启动线程
def main():
num_threads = 10
threads = []
# 计算每个线程需要处理的数据范围
chunk_size = 100000000 // num_threads
for i in range(num_threads):
start = i * chunk_size + 1
end = (i + 1) * chunk_size
thread = threading.Thread(target=compute_sum, args=(start, end))
threads.append(thread)
# 启动所有线程
for thread in threads:
thread.start()
# 等待所有线程完成
for thread in threads:
thread.join()
if __name__ == "__main__":
main()
3.一行代码生成所有模5余1的平方数x的列表
[x**2 for x in range(1, 32) if (x**2) % 5 == 1]
4.对形如[[1, 5], [1, 7], [2, 6], [2, 4], [9, 6], [5, 4], [1, 6]]排序,先对一个数从小到大排,如果第一个数相等,就对第二个数从小到大排
pairs = [[1, 5], [1, 7], [2, 6], [2, 4], [9, 6], [5, 4], [1, 6]]
sorted_pairs = sorted(pairs, key = lambda x : (x[0], x[1]))
5.python文件的读取与写入
file_path = "example.txt"
data_lines = ["Line {}".format(i) for i in range(10)]
try:
with open(file_path, "w") as file:
for line in data_lines:
file.write(line + "\n")
print("写入成功")
except IOError as e:
print("写入失败".format(e))
6.yield(让步)关键字的作用
一个带有yield关键字的函数是一个可迭代对象,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 __next__()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
f = fab(5)
print(f.__next__())
print(f.__next__())
print(f.__next__())
print(f.__next__())
print(f.__next__())