列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 ] 列表的推导式, 循环模式[ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 if 条件] 列表的推导式, 筛选模式 1.[变量(加工后的变量) for 变量 in iterable] 循环模式 l = [i for i in range(10)] print(l) l1 = ['选项%…
一.迭代器 迭代器就是迭代的工具,迭代是一个重复的过程,每次重复都是一次迭代并且每次迭代的结果都是下次迭代的初始值. lst=[1,2,3,4,5] count=0 while count<len(lst): print(lst[count]) count +=1 既然有for循环为什么还要用迭代器呢? 当然对于序列类型:字符串.列表.元组,我们可以使用索引的方式迭代取出其包 含的元素.但对于字典.集合.文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引 的迭代方式,…
一,生成器表达式 #生成器表达式比列表解析更省内存,因为惰性运算 #!/usr/bin/env python #_*_coding:utf-8_*_ new_2 = (i*i for i in range(100)) #生成器表达式 print(list(new_2)) #注意括号是小括号 对比 #!/usr/bin/env python #_*_coding:utf-8_*_ # egg_list=['鸡蛋%s' %i for i in range(10)] 列表推倒式 # print(egg…
一.生成器函数进阶 需求:求取移动平均数 1.应用场景之一,在奥运会气枪射击比赛中,每打完一发都会显示平均环数! def show_avg(): print('你已进入显示移动平均环数系统!') a = yield avg = a/1 b = yield avg = (a + b)/2 print('目前的平均环数是:') yield avg generator = show_avg() generator.__next__() print(generator.send(10)) # 第一发打了…
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield None print('value',x) g=foo() print(g.__next__()) #停到yield位置,生成器初始化,遇到yield返回一个None print('---分割线君---') print(g.send(1)) #传值给yield,然后yield传给x,最后触发一次next…
一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() yield 'alex' g_obj = func1() # 生成器函数对象 print(g_obj) # <generator object func1 at 0x000002760D700BA0> print(g_obj.__next__()) print(g_obj.__next__())…
一.可迭代对象.迭代器 1.可以被for循环的数据类型(可迭代对象): 字符串(str).列表(list).字典(dict).元祖(tuple).range() 2.迭代器 2.1 将可迭代对象==>迭代器(__iter__()) st = 'abc' # 可迭代对象 st_iter = st.__iter__() # 迭代器 print(st_iter) # 返回 :<str_iterator object at 0x00000117E93A2F98> 2.2 将可迭代对象==>…
一,可迭代的&可迭代对象 1.一个一个的取值就是可迭代的   iterable#str list tuple set dict#可迭代的 ——对应的标志 __iter__ 2.判断一个变量是不是一个可迭代的 # print('__iter__' in dir(list))# print('__iter__' in dir([1,2,3])) 3.可迭代协议——凡是可迭代的内部都有一个__iter__方法 二,迭代器 1.将可迭代的转化成迭代器 #!/usr/bin/env python #_*_…
一,匿名函数 #简单的需要用函数去解决的问题 匿名函数的函数体 只有一行#也叫lambda表达式# cal2(函数名) = lambda n(参数) : n*n(参数怎么处理,并且返回值)#参数可以有多个,用逗号隔开#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值#返回值和正常的函数一样可以是任意数据类型1.函数和匿名函数 #!/usr/bin/env python #_*_coding:utf-8_*_ def cal(n): return n*n print(cal(1…
一,装饰器本质 闭包函数 功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能 作用:解耦,尽量的让代码分离,小功能之前的分离. 解耦目的,提高代码的重用性 二,设计模式 开放封闭原则 *对扩展是开放的 *对修改是封闭的 三,代码解释 *通用代码 #!/usr/bin/env python #_*_coding:utf-8_*_ def timmer(func): #---> jjj def inner(*args,**kwargs): ret = func(*args,**kw…
一,内置函数 #内置的模块#拿过来直接就用的:内置的函数 #!/usr/bin/env python #_*_coding:utf-8_*_ #内置的模块 #拿过来直接就用的:内置的函数 #作用域相关(2)(了解) #1.globals()==获取全局变量的字典 #2.locals()==获取执行方法所在命名空间内的局部变量的字典 #str类型代码执行相关(3) #1.eval()==将字符串类型的代码执行并返回结果==(掌握) #print(eval('1+2+3+4')) #print(ev…
一,什么叫递归 #递归#在一个函数里调用自己#python递归最大层数限制 997#最大层数限制是python默认的,可以做修改#但是我们不建议你修改 例子和尚讲故事 #!/usr/bin/env python #_*_coding:utf-8_*_ #:基础版本 def story(): print("从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?") while True: story() #:递归版本 def story(): #递归函数,在一个函数内调用自己 #最大…
一,命名空间 #局部命名空间#全局命名空间#内置命名空间 #三者的顺序#加载顺序       内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载) 取值 *在局部调用:局部命名空间>全局命名空间>内置命名空间 #!/usr/bin/env python #_*_coding:utf-8_*_ max = 1 def f(): print(max) #局部调用max会找全局max=1,如果没有就会打印内置max f()…
Python进阶(四)----生成器.列表推导式.生成器推导式.匿名函数和内置函数 一丶生成器 本质: ​ 就是迭代器 生成器产生的方式: ​ 1.生成器函数…
一,复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascll进行比较 # print('a' > 'A') #True # print('ac' > 'ab') #True # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函数调用时()中出现的参数 # 2)实参的分类 # -- 位置实参:给位置形参,必须按位置 # -- 关键字实参:给位置与关键字形参,不需要按顺序 # 3)形参的分类 # -- 无值位置 #…
[转]Python之函数进阶 本节内容 上一篇中介绍了Python中函数的定义.函数的调用.函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一.递归函数 函数是可以被调用的,且一个函数内部可以调用其他函数.如果一个函数在内部调用本身,这个函数就是一个递归函数.函数递归调用的过程与循环相似,而且理论上,所有的递归函数都可以写成循环的方式,但是递归函数的优点是定义简单,逻辑清晰.递归和循环都是一个重复的操作过程,这些重复…
lambda表达式和推导式,可实现使用一行语句完成功能开发的效果,减少代码量. 1.lambda表达式 匿名函数,即没有名字的函数 1.1基本语法: lambda argument_list: expression 其中,lambda是预留关键字,argument_list和expression由用户自定义. 说明:argument_list中参数形式可以是单个参数,如:a,也可以是多个参数,如:a,b 或者a,*args或者**kwargs expression是一个关于参数的表达式,表达式中…
目录 迭代器 可迭代对象 迭代器对象 总结 三元表达式(三目表达式) 列表推导式 字典生成式 迭代器 可迭代对象 拥有iter方法的对象就是可迭代对象 # 以下都是可迭代的对象 st = '123'.__iter__() lis = [1, 2, 3].__iter__() tup = (1, 2, 3).__iter__() dic = {1: 'one', 2: 'two', 3: 'three'}.__iter__() se = {1, 2, 3}.__iter__() with open…
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================================== 一.三元表达式.列表推导式.生成器表达式 1. 三元表达式 #三元表达式格式: ''' 判定条件? 为真时的结果 : 为假时的结果 ''' # 例 result = 5>3? 1 : 0 ''' 定义函数比较两个值 ''' def max(x, y): if x…
三元表达式 三元表达式仅应用于: 1.条件成立返回一个值 2.条件不成立返回一个值 res = x if x>y else y print(res) name= input("姓名>>: ") res="sb" if name == "alex" else "nb" print(res) 函数的递归 函数的递归:函数递归调用,即在函数调用过程中, 又直接或间接的调用了函数本身. 直接调用 def foo():…
递归和迭代 小明问路篇解释说明 递归:小明——>小红——>小于——>小东:小东——>小于——>小红——>小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不知道,所以向小东问路, 小东知道路,告诉小于,小于知道后,告诉小红,小红知道后,告诉小明 迭代: 小明向小红问路,因小红不知道,所以告诉小明去问小红, 于是,小明向小于问路,因小于不知道,所以向告诉小明去问小东, 于是,小明向小东问路,然后小东告诉小明. 什么是迭代器协议? 迭代器协议:对象必须有一个next…
昨日内容:函数的有用信息.带参数的装饰器.多个装饰器修饰一个函数 迭代器 可迭代对象:内部含有__iter__方法 迭代器 定义:可迭代对象.__iter__()就是迭代器,含有__iter__且__next__ 3个特点:1.节省内存:2.惰性运算:3.取值过程不可逆(一条龙走到黑) 两种取值方法:1.__next__:2.for循环 for循环机制:1.将可迭代对象通过__iter__()方法生成迭代器:2.通过__next__()逐个取值:3.用try异常处理方法防止报错 模拟for循环l…
首先要明确序列值类型是否可哈希,因为可哈希的值很简单就可以用 in /not in 写个生成器去判断,如果是不可哈希的就要去转换为可哈希的再用 in/not in 去判断 原地不可变类型(可哈希): 数字类型:int, float, decimal.Decimal, fractions.Fraction, complex 字符串类型:str, bytes tuple frozenset 布尔类型:True, False None 原地可变类型(不可哈希): list dict set 举例可哈希…
1.三元表达式:如果成立返回if前的内容,如果不成立返回else的内容 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(res) 2.列表推导式:l=['egg'+str(i) for i in range(1,11)] print(l) 3.生成器表达式: l=('egg'+str(i) for i in range(1,11) if i >6) for i in l: print(i)…
一.生成器函数 1.生成器 就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.构建生成器的两种方式 1,生成器函数:跟常规函数定义类似,但是,使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行. 2,生成器表达式:类似于列表推导,但是,返回的是生成器的一个对象,而不是一次构建一个结果列表. 3.生成器函数 3-1…
1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/day13视频与课堂笔记/day13课堂笔记/day13/02 迭代器.py" 1 2 3 True False Process finished with exit code 0 示例结果 int object is not iterable for i in 123: print(i) Int…
本文档主要内容: 一 装饰器函数的信息打印 二 迭代器 三 生成器 四 生成器表达式和列表推导式 五 内置函数 一 装饰器函数的信息打印 一个函数一旦被装饰器给装饰后,这个函数的信息使用原来的命令打印的就是装饰器函数的信息了,如何改为被装饰函数的信息呢? from functools import wraps def logger(f): @wraps(f) def inner(*args, **kwargs): """ :param args: 函数名,密码 :param…
一.初识生成器: 生成器就是自己用Python代码写的迭代器,生成器的本质就是迭代器. 1.Python中提供的生成器: 1.生成器函数: 使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行. 2.生成器表达式: 类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表. 2.生成器Generator: 本质:迭代器(所以自带了__iter__方法和__next__方法,不需要…
一.生成器补充 1.什么是生成器? 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象. 2.生成器分类 (1)生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行. (2)生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表. 3.为何使用生…
1. 生成器 什么是⽣成器?⽣成器实质就是迭代器. 在python中有三种⽅式来获取⽣成器: 1. 通过⽣成器函数 2. 通过各种推导式来实现⽣成器 3. 通过数据的转换也可以获取⽣成器 ⾸先,我们先看⼀个很简单的函数: def func(): ") return 222 ret = func() print(ret) 结果: 111 222 将函数中的return换成yield就是⽣成器 def func(): ") yield 222 ret = func() print(ret)…