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异常,以终止迭代 (只能往后走不能往前 ...
随机推荐
- 《LinuxTools》
https://zhuanlan.zhihu.com/p/37196870 Linux基础 Linux工具进阶 工具参考篇 1. gdb 调试利器 2. ldd 查看程序依赖库 3. lsof 一切皆 ...
- vbs实现c++的vector
代码(待更新): class Vector Private length Private data() Sub Class_Initialize() length= End Sub '插入元素' pu ...
- Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) D. Power Products 数学 暴力
D. Power Products You are given n positive integers a1,-,an, and an integer k≥2. Count the number of ...
- Luogu P3646 [APIO2015]巴厘岛的雕塑
深夜写题解系列,话说这题暑假的时候就在LOJ上做掉了,然后今天看到Luogu上有就去交了一下,发现没写过题解,赶紧来补一下 说句题外话APIO2015的题目好水啊 首先考虑按位取或的过程,很显然要从二 ...
- SpringDataRedis入门Demo
步骤: 约定>配置>代码 在pom.xml中导入依赖(redis和jedis以及其他所需的依赖) > 配置相关配置文件(redis-config.properties 和applic ...
- redis 阻塞原因
1.内因: A.api或数据结构使用不合理: 如:对一个包含上万元素的hash结构执行hgetall操作,数据量大且命令复杂度O(n),必然阻塞 B.慢查询:前面有介绍 C.大对象: 执行./redi ...
- 云原生生态周报 Vol. 12 | K8s 1.16 API 重大变更
本文作者:源三.临石.张磊.莫源 业界要闻 1. K8s 1.16 将废弃一系列旧的 API 版本 影响面涉及 NetworkPolicy.PodSecurityPolicy.DaemonSet, D ...
- Python 简单爬虫案例
Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a ...
- Kubernetes Secret(机密存储)
Kubernetes Secret(机密存储) 官方文档:https://kubernetes.io/docs/concepts/configuration/secret/ 加密数据并存放Etcd中, ...
- select 获取option中其他的属性的值
<select name="tag_keys[]" id="category_type" required> <option value=&q ...