【1.27】lambda 的理解

li_1 = [lambda :x for x in range(10)]
 
这个理解看看下面的:
 
li = [lambda : x]
 
x=1
li[0]()  返回 1
 
 
x = 100
li[0]()  返回 100
 
这样就可以理解
 
 
 
 
 
 
在看看li_1  就可以理解为:
 
li_1 = [lambda :x for x in range(10)]
 
x for x in range(10) 为一个整体 就是取出0 -9 的10个数 为一个列表
 
li_1 就是 10个元素的列表
 
 
 
每一个列表都是一个lambda 函数在内存中的地址
这样 就需要   li_1[0]() 这样的方式来运行   函数名是内存中的地址 也就是内存中的地址的门牌号
 
需要加一个( ) 才能运行
 
这也就是 定义函数要加括号的原因
 
 
 
 
 
>>>
>>> li =[lambda :x for x in range(10)]
>>> li
[<function <listcomp>.<lambda> at 0x00C33270>,
<function <listcomp>.<lambda> at0x00C331E0>,
<function <listcomp>.<lambda> at 0x00C33390>,
<function <listcomp>.<lambda> at 0x00C33420>,
<function <listcomp>.<lambda> at 0x00C33468>,
<function <listcomp>.<lambda> at 0x00C334B0>,
<function <listcomp>.<lambda> at 0x00C334F8>,
<function <listcomp>.<lambda> at 0x00C33540>,
<function <listcomp>.<lambda> at 0x00C335D0>,
<function <listcomp>.<lambda> at 0x00C33588>]
 
li[0] 
返回 [<function <listcomp>.<lambda> at 0x00C33270>]
 
li[0]() 结果就是 9 
 
 
但是这里 x for x in range(10)   运行是取出了 0- 9 10个数   但是x的最后值是 for 执行完的值  9
 
这样
 
执行 li_1[ ]() 的结果一直都是就是 9
posted @ 2016-03-17 19:13  科学小怪癖  阅读(129)  评论(0)    收藏  举报