面试题

---恢复内容开始---

# 1、下面代码的输出结果是什么?
list1 = ['a', 'b', 'c', 'd', 'e']
print(list1[10:]) # []

# 2、各行打印的结果应该是多少?
list1 = [ [ ] ] * 5 [[],[],[],[],[]]
list1[0].append(10)
print(list1) [[10], [10], [10], [10], [10]]
list1[1].append(20)
print(list1) [[10, 20], [10, 20], [10, 20], [10, 20], [10, 20]]
list1.append(30)
print(list1)[[10, 20], [10, 20], [10, 20], [10, 20], [10, 20], 30]

 3、写一个函数:

查出字符串中每个单词的首字母在整个字符串的位置。把这些首字母的索引添加到result列表中,并返回给调用者。

names = 'Jack Eason Max'

答案:

1:def get_num(name):
result = []
result.append(0)
for index,val in enumerate(name):
if val == ' ':
result.append(index+1)
return result
print(get_num(names))

生成器:

def get_num(name):
yield 0
for index,val in enumerate(name):
if val == ' ':
yield index+1


res = get_num(names)
print(list(res))

文件操作
def func(f):
index = 0
for line in f:
if line:
yield index
for val in line:
index+=1
if val == ' ':
yield index+1

with open('test','r',encoding='utf-8') as f:
res = func(f)
print(list(res))

def add(n,i):
    return n+i

def test():
    for i in range(4):
        yield i


g = test() #这个时候不是调用函数而是生成器初始化

for  n in [1,10]: # 这是循环2次,第一次为1第二次为10
    g = (add(n,i) for i in g)  # 后面的g是前面的生成器对象,前面的只是一个变量
    #第一次循环后长沙呢个的生成器对象g = (add(n,i) for i in test())
    #第二次循环的时候就是再in 前面的生成器对象g = (add(n,i) for i in (add(n,i) for i in test()) )
    # 但这2步我都不执行代码

res = list(g)
print(res)  # 这一步我才会去执行函数体代码,这个时候我的n将会找最近的就是10,所以我也只会执行第二次循环,这样结果就是[20,21,22,23]
'''
闭包延迟绑定,因为我在定义阶段我不去调用的话不会去进行传值,当我调用的时候我会去找离我最近的,这个时候才会进行绑定
'''

---恢复内容结束---

原文地址:https://www.cnblogs.com/xinfan1/p/11215812.html