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异常,以终止迭代 (只能往后走不能往前 ...
随机推荐
- 设计模式-单例模式(Singleton) (创建型模式)
//以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Singleton.h #pragma once #include<iostream> class Sin ...
- C++ string push_back()
函数功能: 在后面添加一项 vector头文件的push_back函数,在vector类中作用为在vector尾部加入一个数据.string中的push_back函数,作用是字符串之后插入一个字符. ...
- Git仓库占用空间太大的解决方法
git gc --aggressive对本地git库进行更彻底清理和优化,这个指令花费的时间也会更长. 胡云飞系统部署搭建整体把控:git gc --auto这是一个设置的指令,并不会进行gc操作.如 ...
- 数据仓库010 - MySQL查看所有存储过程,函数,视图,触发器
.查询数据库中的存储过程和函数 方法一: select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE ...
- 【12月13日】A股ROE最高排名
个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名 中公教育(SZ002607) - ROE_TTM:92.66% - ...
- 明解C语言 中级篇 第四章答案
练习4-1 /* 珠玑妙算 */ #include <time.h> #include <ctype.h> #include <stdio.h> #include ...
- 移动端rem布局,用户调整手机字体大小或浏览器字体大小后导致页面布局出错问题
一.用户修改手机字体设置大小,影响App里打开的web页面. 手机字体设置大小,影响App的页面.Android的可以通过webview配置webview.getSettings().setTextZ ...
- sitecore 如何创建一个渠道分类
您可以通过渠道跟踪联系人与您的品牌的所有互动.您可以将渠道与广告系列活动相关联,以便跟踪联系人与您的品牌互动的方式.通过比较各个渠道的目标转化率,您可以了解哪些渠道可以带来更好的联系参与度.您可以在体 ...
- vs2017离线包下载安装并且不占用C盘空间使用教程
安装vs2017,前提是你的环境是.NET4.6,VS2017在下载好安装程序安装的时候,会根据你选择的功能模块来下载所需要的安装程序,微软.安卓和苹果等平台的SDK.模拟器和第三方扩展功能等会在用户 ...
- 统一批处理流处理——Flink批流一体实现原理
实现批处理的技术许许多多,从各种关系型数据库的sql处理,到大数据领域的MapReduce,Hive,Spark等等.这些都是处理有限数据流的经典方式.而Flink专注的是无限流处理,那么他是怎么做到 ...