# 奇数生成器def_odd_iter():
n =1whileTrue:
n = n +2yield n
# 筛选条件def_not_divisible(n):returnlambda x: x% n >0# 生成素数defprimes():yield2
it = _odd_iter()whileTrue:
n =next(it)yield n
it =filter(_not_divisible(n),it)
感觉还是别试图去搞清楚它的具体细节,是先生成奇数再过滤还是怎样
# 筛选出回文数defis_palindrome(num):
s =str(num)
i,j =0,-1while i<=len(s)/2:if s[i]!=s[j]:returnFalse
i +=1
j -=1returnTrueprint(list(filter(is_palindrome,range(1,200))))# 这里可以用s[::-1] 翻转字符串 这样更简便
defby_name(t):return t[0].lower()defby_score(t):return t[1]
L =[('Bob',75),('Adam',92),('Bart',66),('Lisa',88)]print(sorted(L, key=by_name))# 按姓名忽略大小写字典序排序print(sorted(L, key=by_score,reverse=True))# 按分数从大到小排序
返回函数
将函数作为函数的返回值 返回
好处1: 返回一个函数,可以先不计算,等到需要时再使用
这样就很快
很像一个游戏道具,放你背包里,需要的时候拿来用
内部函数可以引用外部函数的参数与变量
每次都会返回一个新的函数,即使传入相同的参数
两次调用不影响
defcreateCounter():
x =0defcounter():nonlocal x # 有此声明,解释器会将x视作是外部的变量,已被初始化
x +=1return x
return counter
countA = createCounter()print(countA())print(countA())print(countA())