最赞回答 / ES716
初学,不知道解释的对不对啊第一个问题:fs.append(lambda i=i: i*i) 相当于 fs.append(lambda j=i: j*j)(lambda i=i: i*i)中的第一个 i 是lambda自己声明的局部变量 , 会屏蔽掉外部的 i 变量值。第二个问题:fs.append(lambda a=i: i*i) 相当于 fs.append(lambda : i*i)(lambda a=i: i*i) 中的 i是引用外部变量 ,所以会发生变化,闭包要求不是不能引用外部会发生变化的变量么第...
2015-10-11
我觉得老师讲得很棒,但是有些细节还不够完整。我把关于函数式编程的内容总结了一下:
http://blog.csdn.net/u012759878/article/details/49007869
欢迎各位共同交流~
http://blog.csdn.net/u012759878/article/details/49007869
欢迎各位共同交流~
2015-10-09
def is_need(item):
key = "__"
return item and not item.startswith(key) and not item.endswith(key)
print "result = ", filter(is_need, L)
key = "__"
return item and not item.startswith(key) and not item.endswith(key)
print "result = ", filter(is_need, L)
2015-10-07
def is_need2(item):
return len(item) >= 2 and item[0:2].find("__") and item[-2:].find("__")
f = lambda item: item and not item.startswith("__") and not item.endswith("__")
print "result2 = ", filter(is_need2, L)
print "lambda result = ", filter(f, L)
return len(item) >= 2 and item[0:2].find("__") and item[-2:].find("__")
f = lambda item: item and not item.startswith("__") and not item.endswith("__")
print "result2 = ", filter(is_need2, L)
print "lambda result = ", filter(f, L)
2015-10-07
已采纳回答 / 轮回无极限
因为filter()是让函数依次作用于列表中的元素,根据函数来判断是否留下该元素,所以你在函数中希望返回值是x的平方并没有什么用,它还是原来列表中的元素。而且这也不该是做题的顺序啊,你倒是先想出了答案在往上套它的平方了。可以把is_sqr函数中的语句改成return math.sqrt(x) % 1 == 0
2015-10-05
import math
def is_sqr(x):
return math.ceil(math.sqrt(x))**2==x
print filter(is_sqr, range(1,100+1))
def is_sqr(x):
return math.ceil(math.sqrt(x))**2==x
print filter(is_sqr, range(1,100+1))
2015-10-05
def cmp_ignore_case(s1, s2):
if s1.lower() < s2.lower():
return -1
if s1.lower() > s2.lower():
return 1
return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
if s1.lower() < s2.lower():
return -1
if s1.lower() > s2.lower():
return 1
return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
2015-10-04