Python笔试问题

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__())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值