摘要:迭代器 我们已经知道,可以直接用作于for循环的数据类型有以下几种: 一类是集合数据类型,如list、tuple 、dict 、set、str等; 一类是generator包括生成器和带yield的gunerator function。 这些可以直接作用 for循环的对象统称为可迭代人:Iterab
阅读全文
摘要:一个函数有yield在里面就变成一个生成器 函数有了yield之后 1.函数名加()就变得到了生成器 2.return 在生成器里,代表 生成器的中止,直接报错 next 唤醒生成器并继续执行 send(‘stop’) 1.唤醒并继续执行 2.发送一个信息到生成器内部。
阅读全文
摘要:生成器的创建方式: 1.列表生成式() 2.函数 yield vs return return 返回并中止function yield 返回 数据,并冻结当前的执行过程。。。 next 唤醒冻结的执行过程,继续执行,知道遇到下一个yield。
阅读全文
摘要:>>> a = (i for i in range(10))>>> while True:... print(next(a))...0123456789Traceback (most recent call last): File "<stdin>", line 2, in <module>Stop
阅读全文
摘要:我们讲过,generator保存的是算法,每次调用next(g) 就计算出g 的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出stopIteration 的错误 当然,上面这种不断调用 next(g) 实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象:
阅读全文
摘要:>>> a = list(range(10))>>> a[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> a = [i+1 if i<10 else i*i for i in a]>>> a[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>>
阅读全文
摘要:user_state = Falsedef login(auth_tpye): def out(func): def inner(*args,**kwargs): global user_state db = {'kingforn': 'abc123', 'alex': 'abc!@#'} if u
阅读全文
摘要:user_state = Falsedef login(func): def inner(*args,**kwargs): global user_state db = {'kingforn': 'abc123', 'alex': 'abc!@#'} if user_state == False:
阅读全文
摘要:老王:算了,估计你也想不出来。。。学过嵌套函数没有? 你:yes,然后呢? 老王:想实现一开始你写的america = login(america)不触发你函数的执行,只需要在这个login里面再定义一层函数,第一次调用america = login(america) 用到外层login ,这个lo
阅读全文
摘要:想象一下: 你是一家视频网站的后端开发工程师,你们网站有以下几个版本: def home(): print(" 首页 ") def america(): print(" 欧美专区 ") def japan(): print(" 日韩专区 ") def henan(): print(" 河南专区 ")
阅读全文
摘要:def func(): n = 10 def func2(): print('func2', n) return func2 f = func() print(f) f() 执行结果 func2: 10 这就是闭包
阅读全文
摘要:n = 10 def func() n = 20 print('func:',n) def func2() n = 30 print('func2',n) def func3() print('func3',n) func3() func2() func() 执行结果: func:20 func2:
阅读全文
摘要:命名空间又称名称空间 又名name space,顾名思义就是存放名字的地方,存声明名字呢?举例说明,若变量x=1,1存放在内存中,那名字x存放在哪里呢? 名称空间正是存放名字x与1绑定关系的地方 名称空间共3种,分别如下: locals:是函数内的名称空间,包括局部变量和形参 globals:全局变
阅读全文
摘要:python 的len为什么你可以直接用?肯定是解释器启动时就定义好了! abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii(
阅读全文
摘要:求阶乘: 任何大于1的自然数n阶乘表示方法: n!= 1*2*3*4*......*n 或 n! = n*(n-1)! 即举例:4!= 4*3*2*1 =24
阅读全文
摘要:def count(n): v = int(n/2) print(v) if v == 0: return 'Done' count(v) print(v) count(10) #执行结果: 5 2 1 0 1 2 5 总结递归的机柜特点: 1.必须有一个明确的结束条件,要不就会变成死循环了,最终撑
阅读全文
摘要:例子10除以2得到的结果一直除以2直到零为止! 用递归来做: def count(n): v = int(n/2) print(v) if v == 0: return 'Done' count(v)
阅读全文
摘要:递归与栈的关系: 可是为何执行了900多次就出错了呢?还说超过了最大递归深度现在,为什么要限制呢? 通俗来讲,是因为每个函数在调自己的时候还没有退出,占内存,多了肯定会导致内存崩溃。 本质上讲呢,在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每
阅读全文
摘要:递归就是函数在执行过程调用自己。 def func(n): print(n) func(n+1) python 默认递归次数为1000次,这个默认值是可以修改的。
阅读全文
摘要:变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。 只需满足以下任意一个条件,即是高阶函数: 接受一个或多个函数作为输入 return返回另一个函数
阅读全文