代码改变世界

tank老师面试题,测试题----不定时更新

2019-07-15 21:51  在上海的日子里  阅读(186)  评论(0)    收藏  举报
with open('tank_test.txt','w',encoding='utf-8') as f:
    for line in range(500):
        f.write(f'www{line}aaa'*(line+1)+'\n')

# 求文件内容每一行的长度
# 方法1:运用列表生成式----缺点:占用内存。

res = [len(line) for line in open('tank_test.txt','r',encoding='utf-8')]
print(res)

# 方法2:生成器表达式----生成器对象,不占用内存随用随取
res = (len(line) for line in open('tank_test.txt','r',encoding='utf-8'))
print(res)  # <generator object <genexpr> at 0x02CE1930>

 

'''
面试题:
    请写出一下代码的执行结果并解释。
'''

def multipliers():

    return [lambda x,  i*x for i in range(4)]
    # 0, 1, 2, 3
    # [func(x): return 0*x, func(x): return 1*x,
    # func(x): return 2*x, func(x): return 3*x, ]

print([m(2) for m in multipliers()])  # [6, 6, 6, 6]

# [func(x): return 0*2, func(x): return 1*2,
# func(x): return 2*2, func(x): return 3*2, ]
# [0, 2, 4, 6]
# [6, 6, 6, 6]

# 闭包函数的延迟绑定
# 在内层函数执行时才会绑定变量i
def multipliers2():
    list1 = []
    for i in range(4):

        def func(x, i=i):

            return x * i

        list1.append(func)

    return list1

print([m(2) for m in multipliers2()])  # [0, 2, 4, 6]

# [0, 2, 4, 6]