python27期day11:f-strings格式化、迭代器、生成器、作业题。
1、建议小写f:
name = "宝元"
age = 18
sex = "男"
msg = F"姓名:{name},性别:{age},年龄:{sex}"
msg1 = f"姓名:{name},性别:{age},年龄:{sex}"
print(msg)
print(msg1)
结果: 姓名:宝元,性别:18,年龄:男
姓名:宝元,性别:18,年龄:男
2、表达式:字典取值、列表取值、函数表达式
函数计算:
def func(a,b):
return a + b
msg = f"运行结果{func(1,2)}"
print(msg)
结果:运行结果3
列表切片:
lst = [1,2,32,34,45,5]
msg = f"运行结果:{lst[0:3]}"
print(msg)
结果:运行结果:[1, 2, 32]
字典取值:
dic = {"key":1,"key1":22}
msg = f"运行结果:{dic['key1']}"
print(msg)
结果:运行结果:22
三元表达式:
a = 10
b = 20
msg = f"{a if a > b else b}"
print(msg)
结果:20
3、迭代器: 具有__iter__()和__next__()方法就是一个迭代器
优点: 节省内存
文件句柄就是迭代器
迭代器:一个一个取值
for循环就是一个迭代器
迭代器也是一个可迭代对象
缺点: 只能一个方向直行
一次性的
不能灵活操作、不能直接查看元素个数
应用: 内存小、数据量巨大时、建议使用迭代器
4、可迭代对象: str、list、tuple。。。
优点: python中规定、只要具有__iter__()方法就是可迭代对象
可迭代对象能重复取值
使用灵活(每个可迭代对象都有自己的方法)
能够直接查看元素的个数
缺点: 占内存
应用: 内存空间大、当数据量比较少、建议使用可迭代对象。
str.__iter__()
list.__iter__()
dict.__iter__()
set.__iter__()
tuple.__iter__()
lst = [1,2,3,4,5]
5、转换: 将可迭代对象转换成迭代器
l = lst.__iter__()
print(l)
结果:<list_iterator object at 0x00000000027187F0>
有多少个元素就只能next多少次
取值:print(l.__next__())
6、注意点:
lst = [1,2,3,4,5]
print(lst.__iter().__next__()) #lst.__iter__()是一个迭代器1
print(lst.__iter().__next__()) #lst.__iter__()是一个迭代器2
7、for循环本质:
s = "alex"
s1 = s.__iter__()
while True:
try: #尝试着运行一下缩进体中的代码
print(s1.__next__())
except StopIteration:
break
8、两种方法:
方法一:
lst = [1,2,3,54]
l = lst.__iter__()
print(l.__next__())
方法二:
lst = [1,2,3,54]
l = iter(lst)
print(next(l))
9、时间换空间:用大量的时间换取一些空间变小--只能一点点的next、例如迭代器、生成器
空间换时间:使用大量的空间来节省时间、例如列表、可迭代对象、
10、生成器的本质就是一个迭代器
11、生成器和迭代器的区别?
迭代器:文件句柄、通过数据转换python自带提供
生成器:程序员自己实现
12、生成器的目的:不在通过数据转换实现、而是通过代码编写实现。
生成器的定义:基于函数实现的生成器
表达式实现生成器
13、函数体中存在yield就是定义一个生成器
def func():
print(1)
yield 5
print(func()) #创建一个生成器对象的内存地址
print时打印的是一个生成器对象的内存地址
14、语法分析
词法分析
15、生成器怎么用?
特点:惰性机制
def func():
yield 1 #记录执行位置的
yield 2
yield 3
a = func() #获取的是生成器的内存地址
print(next(a)) #取值
print(next(a)) #取值
print(next(a)) #取值
结果:1
2
3
16、区分迭代器和生成器?
查看是否可用send方法
看内存地址(主推荐的)
17、生成器一定是一个迭代器、但是迭代器不一定是一个生成器
18、迭代器和生成器的优点:
节省空间
迭代器和生成器的缺点:
不能直接使用元素
不能直观查看元素的个数
使用不灵活
稍微消耗时间
一次性的、不能逆行
19、yield from--将列表整体返回
def func():
yield from [1,2,23,54,5]
g = func()
for i in g:
print(i)
结果: 1
2
23
54
5
20、yield from--将列表逐个返回
def func():
yield from [1,2,23,54,5]
g = func()
print(next(g))
21、yield from小坑
def func():
lst1 = ["卫龙","老冰棍","北冰洋","牛羊配"]
lst2 = ["馒头","花卷","豆包","大饼"]
yield from lst1
yield from lst2
g = func()
for i in g:
print(i)
结果: 卫龙
老冰棍
北冰洋
牛羊配
馒头
花卷
豆包
大饼
22、yield 能返回多个、以元组的形式存储
yield 能返回各种数据类型(python的对象)
yield 能够写多个并且都执行
yield 能够记录执行位置
yield 后边不写内容、默认返回None
yield 都是将数据一次性返回
23、作业题:
# 1.请写出下列代码的执行结果
def func1():
print('in func1')
def func2():
print('in func2')
ret = func1
ret() #in func1
ret1 = func2
ret1() #func2
ret2 = ret
ret3 = ret2
ret2() #in func1
ret3() #in func1
# 2、
def func1():
print ( 'in func1' )
def func2():
print ( 'in func2' )
def func3(x, y): #x = func2,y = func1
x () #func2()
print ( 'in func3' )
y () #func1()
print ( 111 ) #111
func3 ( func2, func1 ) #in func2
#in func3
#in func1
print ( 222 ) #222
# 3、选做题
def func1():
print('in func1')
def func2(x): #x == func1
print('in func2')
return x #return下func1就是把func1返回
def func3(y): #y == func2
print('in func3')
return y
ret = func2(func1) #ret == func1
ret() #func1()
ret2 = func3(func2) #ret == func2
ret3 = ret2(func1) #func2(func1) #ret3 == func1
ret3() #func1()
# 结果:in func2
# in func1
# in func3
# in func2
# in func1
# 4、
def func(arg):
return arg.replace('alex', '****')
def run():
msg = "Alex和大家都是好朋友"
result = func(msg)
print(result)
run()
data = run()
print(data)
# 结果:Alex和大家都是好朋友
# Alex和大家都是好朋友
# None
# 5、
data_list = []
def func(arg):
return data_list.insert(0, arg)
data = func('绕不死你')
print(data) #None
print(data_list) #data_list = ['绕不死你']
# 6、
def func():
print('你好呀')
return '好你妹呀'
func_list = [func, func, func]
for item in func_list:
val = item()
print(val)
#你好呀
# 好你妹呀
# 你好呀
# 好你妹呀
# 你好呀
# 好你妹呀
# 7、
def func():
print('你好呀')
return '好你妹呀'
func_list = [func, func, func]
for i in range(len(func_list)):
val = func_list[i]()
print(val)
# 你好呀
# 好你妹呀
# 你好呀
# 好你妹呀
# 你好呀
# 好你妹呀
# 8、
def func():
return '大烧饼'
def bar():
return '吃煎饼'
def base(a1, a2):
return a1() + a2()
result = base(func, bar)
print(result) #大烧饼吃煎饼
# 9、
def func():
for item in range(10):
pass
return item
func()
# 结果:空
# 10、
def func():
for item in range(10):
pass
yield item
func()
# 结果:空
# 11、
item = '老男孩'
def func():
item = 'alex'
def inner():
print(item)
for inner in range(10):
pass
inner()
func() #类型错误、int对象不可调用
# 12、
l1 = []
def func(args):
l1.append(args)
return l1
print(func(1)) #[1]
print(func(2)) #[1,2]
print(func(3)) #[1,2,3]
# 13、
name = '宝元'
def func():
global name
name = '男神'
print(name) #宝元
func()
print(name) #男神
# 14、
name = '宝元'
def func():
print(name)
func() #宝元
# 15、
name = '宝元'
def func():
print(name)
name = 'alex'
func() #报错赋值前引用的局部变量
# 16、
def func():
count = 1
def inner():
nonlocal count
count += 1
print(count)
print(count)
inner()
print(count)
func()
#结果: 1
# 2
# 2
# 17、
def extendList(val,list=[]):
list.append(val)
return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print('list1=%s'%list1) #list1 = [10,'a']
print('list2=%s'%list2) #list2 = [123]
print('list3=%s'%list3) #list3 = [10,'a']
# 18、
def extendList(val,list=[]):
list.append(val)
return list
print('list1=%s'% extendList(10)) #list1=[10]
print('list2=%s'% extendList(123,[])) #list2=[123]
print('list3=%s'% extendList('a')) #list3=[10, 'a']
#18、用你的理解解释一下什么是可迭代对象,什么是迭代器。
# python中规定、只要具有__iter__()方法就是可迭代对象、例如:str字符串、list列表、tuple元组
#具有__iter__()和__next__()方法就是一个迭代器、例如:文件句柄就是迭代器
#19、使用while循环实现for循环的本质(面试题)
s = "alex"
s1 = s.__iter__()
while True:
try:
print(s1.__next__())
except StopIteration:
break
python27期day11:f-strings格式化、迭代器、生成器、作业题。的更多相关文章
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- Python装饰器、迭代器&生成器、re正则表达式、字符串格式化
Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...
- python27期day02:while循环、break、格式化、运算符、编码初始、作业题。
1.while循环:不断的重复着某件事就是循环 2.while循环图解: 3.break:终止当前循环. 4.continue就是跳出本次循环.继续下次循环. 下方代码都不会执行. 改变循环条件来终止 ...
- 函数的第一类对象,f格式化,迭代器以及递归
函数名的第一类对象及使用,f格式化以及迭代器 1.函数的第一类对象 第一类对象 --特殊点 1.可以当作值被赋值给变量 def func(): print(1) a = func a() 2.可以当作 ...
- Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归
Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...
- python各种模块,迭代器,生成器
从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...
- Python 迭代器&生成器
1.内置参数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice ...
- Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式
目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...
- python 迭代器 生成器
迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...
随机推荐
- luoguP2178 [NOI2015]品酒大会(后缀自动机)
题意 承接上篇题解 考虑两个后缀的\(lcp\)是什么,是将串反着插入后缀自动机后两个前缀(终止节点)的\(lca\)!!!于是可以在parent tree上DP了. 比后缀数组又简单又好写跑的还快. ...
- Angular7入门总结篇
- 小程序-promise封装小程序的请求方法
// 在utils-->base.js中,封装一个Base类,有一个axios方法 class Base{ constructor(){ } axios(method,url,data){ co ...
- QBXT模拟赛1
总结 期望得分:\(100 + 80 + 10 = 190\) 实际得分:\(90 + 80 + 10 = 180\) 这是在清北的第一场考试,也是在清北考的最高的一次了吧..本来以为能拿\(190\ ...
- Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) E. Rock Is Push dp
E. Rock Is Push You are at the top left cell (1,1) of an n×m labyrinth. Your goal is to get to the b ...
- Apache Maven 3.6.3配置安装
1.maven 3.5 下载地址:http://maven.apache.org/download.cgi 2.下载了解压到 3.配置环境变量 4.测试看是否安装成功 5.maven配置(全局配置,用 ...
- 明解C语言 入门篇 第十一章答案
练习11-1 /* 用指针实现的字符串的改写 */ #include <stdio.h> int main(void) { "; printf("p = \" ...
- 【Oracle】rman基于时间点恢复
rman基于时间点恢复 场景: 由于某研究的误操作,导致财务模块的数据丢失,如何使用rman基于时间点恢复数据. 思路 1.克隆数据库的虚拟机,直接对数据库的数据进行恢复 RMAN> shutd ...
- mysql批量更新数据(性能优化) 第一种方式
首先想到的是,一条一条更新的速度太慢了,然后就想批量更新,一次更新N条数据.实践是检验真理的唯一标准,不一会儿,代码就敲完了,重新试了一下,效果依旧不理想.啊哦,真是要崩溃!后面又想到了利用异步,我一 ...
- .net core 3.0中的Json API
在.net core 3.0中,内置了一套新的json api,主要用于去除asp.net core对json.net的依赖,同时也提供了更好的性能(直接处理 UTF-8,而无需转码到 UTF-16) ...