关于生成器,列表表达式的面试题

#func = lambda : x (lambda相当于函数名)
v = [lambda :x for x in range(10)]
#[func0, func1, func2, ..., func9]
#只要这样写,在内存中已经定格在9值
#虽然lambda函数还没执行,但是range已经执行完了,x在内存里已经是9了
print(v)
print(v[0])
print(v[0]())
'''
[<function <listcomp>.<lambda> at 0x000001915CBD51E0>, <function <listcomp>.<lambda> at 0x000001915CBD5840>, <function <listcomp>.<lambda> at 0x000001915CBD57B8>, <function <listcomp>.<lambda> at 0x000001915CBD58C8>, <function <listcomp>.<lambda> at 0x000001915CBD5950>, <function <listcomp>.<lambda> at 0x000001915CBD59D8>, <function <listcomp>.<lambda> at 0x000001915CBD5A60>, <function <listcomp>.<lambda> at 0x000001915CBD5AE8>, <function <listcomp>.<lambda> at 0x000001915CBD5B70>, <function <listcomp>.<lambda> at 0x000001915CBD5BF8>]
<function <listcomp>.<lambda> at 0x000001915CBD51E0>
9
'''


#对于自定义函数内的循环,range只执行了一次,所以值也在0
def func():
    for i in range(10):
        return i
print(func)
print(func())
'''
<function func at 0x000001A4735E2EA0>
0
'''
v = (lambda : x for x in range(10))
print(v) #生成器地址
# 生成器不能按索引取值
# print(v[0]) #TypeError: 'generator' object is not subscriptable
# print(v[0]())
print(next(v)) #第一个函数的内存地址
print(next(v)()) #1 ,next一下运行一下
'''
<generator object <genexpr> at 0x00000249F6C61E60>
<function <genexpr>.<lambda> at 0x00000249F67A2EA0>
1
'''

 

posted @ 2022-02-17 11:43  夜色无边  阅读(33)  评论(0)    收藏  举报