标签:ret play hello list 表达 str 合数 spl 机制
一般列表生成式 list1 = list(range(1,10)) #不使用列表生成式生成列表 list2 = [x for x in range(1,10)] #使用列表生成式生成列表 print(list1) print(list2) 运行结果: [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9] 带过滤功能的列表生成式 L = [3, 7, 11, 14,19, 33, 26, 57, 99] # 不使用列表生成式实现 list5 = [] for x in L: if x < 20: list5.append(x) # 使用列表生成式实现 list6 = [x for x in L if x > 20]
把列表推导式的[]换成()就是生成器表达式
list = (i for i in range(1,10)) print(list) print(next(list)) print(next(list))
list = (i for i in range(1,10)) for x in list: print(x)
def my_range(start,end): for i in range(start,end): ret = yield 2*i +1 print(ret) res = my_range(2,5) print(res.send(None)) print(res.send(‘hello‘)) 运行结果: 5 hello 7
需要注意的是:第一次调用生成器的send()方法时,参数只能为None,否则会抛出异常。当然也可以在调用send()方法之前先调用一次next()方法,目的是让生成器先进入yield表达式。
from collections import Iterable print(isinstance([], Iterable))
from collections import Iteratorprint(isinstance((x for x in range(5)), Iterator))
输出结果为:True
生成器也是这样的,因为生成器也是迭代器。
#直接调用本身def f1(): print(‘from f1‘) f1() f1() #间接调用本身def f1(): print(‘from f1‘) f2() def f2(): print(‘from f2‘) f1() f1() # 调用函数会产生局部的名称空间,占用内存,因为上述这种调用会无需调用本身,python解释器的内存管理机制为了防止其无限制占用内存,对函数的递归调用做了最大的层级限制
二分法
l=[1,2,10,30,33,99,101,200,301,311,402,403,500,900,1000] #从小到大排列的数字列表 def search(n,l): print(l) if len(l) == 0: print(‘not exists‘) return mid_index=len(l) // 2 if n > l[mid_index]: #in the right l=l[mid_index+1:] search(n,l) elif n < l[mid_index]: #in the left l=l[:mid_index] search(n,l) else: print(‘find it‘) search(3,l) 实现类似于in的效果
标签:ret play hello list 表达 str 合数 spl 机制
原文地址:https://www.cnblogs.com/kumunotes/p/10589935.html