01 昨日内容回顾

函数名的运用:
1,特殊的变量。
2,函数名可以当做变量赋值。
3,函数名可以当做容器类类型的元素。
4,函数名可以当做函数的参数。
5,函数名可以当做函数的返回值。

闭包:
1,内层函数对外层函数的变量(非全局)的引用。
2,闭包存在于函数中。
3,闭包要逐层返回,最终返回到函数的最外层。
特点:
解释器遇到闭包,不会随着函数的结束而结束空间。

闭包应用:
装饰器。
爬虫。

可迭代对象:
obj
'__iter__' in dir(obj)
from collections import Iterable
isinstance(obj, Iterable)
可迭代对象不能直接取值,必须转化成迭代器进行取值(__next__)

迭代器:
'__iter__' in dir(obj) and '__next__' in dir(obj)
from collections import Iterator
isinstance(obj, Iterator)
一个next 对应一个元素
l1 = [1, 2, 3,]
obj = iter(l1)
while True:
try:
print(obj.__next__())
except Exception:
break

02 作业讲解
03 生成器
04 列表推导式,生成器表达式(字典推导式等)
05 匿名函数lambda

# 下午:考试题,购物车讲解

# 03 生成器

# 生成器本质就是迭代器,生成器是自己用python代码写的迭代器。    # 生成器函数    # 生成器表达式

# 将一个函数变成生成器函数# 生成器函数# def func():#     print(333)#     print(555)#     yield 666#     yield 999# ret = func()# print(ret)    #地址# next(ret)     #输出yield之前# # 一个next 对应一个yield# print(next(ret))# print(next(ret))

# yield return共同点和不同点:#  return 终止函数,yield 不会终止生成器函数。#  都会返回一个值,return给函数的执行者返回值,yield是给next()返回值

# 生产衣服

# def cloth():#     for i in range(5001):#         print('我写的代码没有bug 衣服%s号' % i)# cloth()## def cloth2():#     for i in range(5001):#         yield  '有志青年 衣服%s号' % i## genor = cloth2()# for i in range(100):#     print(next(genor))## for i in range(50):#     print(next(genor))

# send与next

# def func():#     print(3)#     count = yield 666#     print(count)#     num = yield '计划'#     print(num)#     yield '太白金星'#     n1 = yield '小虎'#     print(n1)# genor = func()# print(next(genor))# print(next(genor))# send不仅能对应yield取值,而且可以给上一个yield发送一个值# print(genor.send(None))# print(genor.send('alex'))# print(genor.send('111'))# print(genor.send('222'))##yield不赋值就跳过# print(genor.send('333'))# 第一次取值能否用send传参? 不能,会报错,先使用next,或send(None)# 最后一个yield 永远也得不到send的传的值

# yild from

# def func():#     lst = ['明亮', '容先', '王子', '万赵']#     print(6)#     yield lst# genor = func()  # [['明亮', '容先', '王子', '万赵'],]# print(next(genor))# next(genor)#输出6# for i in genor:#     print(i)

# # yield from 将一个可迭代对象变成一个迭代器返回# def func():#     print(3)#     lst = ['明亮', '容先', '王子', '万赵']#     yield from lst# genor = func()# print(next(genor))# print(next(genor))# for i in genor:#     print(i)

# 04 列表推导式 生成器表达式

#  创建列表:[1,2,3,。。。100]# l1 = []# for i in range(1,101):#     l1.append(i)# print(l1)

# 列表推导式:用一行代码构建简单,较复杂的列表。# 减少代码量,装逼。#三种:# 循环模式。 [变量(加工后的变量) for 变量 in iterable ]# print([i for i in range(1,101)])# 构建一个列表:['python1期', 'python2期',....'python25期']# l1 = ['python%s期' %i for i in range(1,26)]# print(l1)

# 三元模式(循环模式)# 构建一个列表:列表里面的元素是1~20,但是能被3整除元素替换成*。# ret = '*' if 3>2 else 1# print(ret)# print(['*' if i % 3 == 0 else i for i in range(1,21)])

# 筛选模式  [变量(加工后的变量) for 变量 in iterable if 条件]# 三十以内所有的偶数留到列表中# print([i for i in range(1,31) if i % 2 == 0])

# 30以内所有能被3整除的数# print([i for i in range(1,31) if i % 3 == 0])# 30以内所有能被3整除的数的平方# print([i**2 for i in range(1,31) if i % 3 == 0])# ['地球1号', '地球3号','地球5号',....'地球99号',]# print(['地球%s号'% i for i in range(1,100,2)])

# 将至少含有两个e的名字放到一个列表中# names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],#          ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]# l1 = []# for l in names:#     for name in l:#         if name.count('e') >= 2:#             l1.append(name)# print(l1)# print([name for l in names for name in l if name.count('e') >= 2])

# 列表推导式:# 优点:一行搞定,节省代码行数,高逼格。# 缺点:#   1,不能用debug模式。#   2,列表推导式有毒,任何列表都可以通过常规构建去构建,复杂的列表不能通过列表推导式。

# 生成器表达式?# 与列表推导式几乎一模一样, 就是[] 换成 ()# l1 = ['python%s期' %i for i in range(1,26)]# print(l1)#列表# gentor = ('python%s期' %i for i in range(1,26))# print(gentor)#地址

# for i in gentor:#     print(i)

# 字典推导式, 集合推导式  (了解)# print({i:None for i in range(1,10)})# mcase = {'a': 10, 'b': 34, 'c': 20, 'd': 15}# print({value:key for key,value in mcase.items()})

# set1 = {1, -2, 3, -4, 4}# print({i ** 2 for i in set1})

# 05 匿名函数

# def func(x, y): return x + y# print(func(3,4))# 针对于只有返回值的这样的函数:python 提供了一个函数可以简化:# 匿名函数。一行函数

# func2 = lambda x,y: x + y# print(func2(3,4))

# 写一个匿名函数:需要三个数字参数,返回值为三个数相乘
func = lambda x,y,z:x*y*zprint(func(2,3,4))
												

day11_python_1124的更多相关文章

随机推荐

  1. 【UML】NO.50.EBook.5.UML.1.010-【UML 大战需求分析】- 考勤系统

    1.0.0 Summary Tittle:[UML]NO.50.EBook.1.UML.1.010-[UML 大战需求分析]- 考勤系统 Style:DesignPattern Series:Desi ...

  2. git----------SourceTree如何连接ssh的仓库地址,这里记录的是客户端需要做的事

    1. 2. 打开命令行以后输入ssh-keygen -t rsa -C "example@example.com"  这个地方输入的是你注册gitlab所使用的邮箱.按回车,之后还 ...

  3. Openstack-Ceilometer-Alarm运行机制

    1校验 对alarm列表进行定时监测,如果发现与设置的limit值不满足,则发出警报 监控服务分为三种:默认服务,单进程校验服务和分布式校验服务.根据配置来决定,默认配置:default Alarm状 ...

  4. 在oracle中如何把前台传过来的日期字符串转换成正确格式

    insert into ibill_sys_version(versionId,productCode,versionCode,versionDesc,versionUrl, upgradeWay,u ...

  5. Beaglebone板子修改usb连接时的默认IP192.168.0.2

    首先除了有个USB线外,你还需要一个USB转串口的线(目的是防止修改错误,无法使用原来的usb的IP地址登陆,心大的可以跳过这步直接进入重点),串口线连接方法如下图: ​ 将USB以及串口和PC机相连 ...

  6. Html h1-h6 标签

    Html h1-h6 标签 <html> <body> <!-- h1-h6标签:标题标签 --> <h1>XSK</h1> <h2& ...

  7. Python RabbitMQ消息持久化

    RabbitMQ消息持久化:就是将队列中的消息永久的存放在队列中.   处理方案: # 在实例化时加入durable=True来确认消息的实例化,客户端服务端都要写 channel.queue_dec ...

  8. Learning-Python【15】:内置函数

    截止到Python版本3.6.2,一共为我们提供了68个内置函数.它们就是Python提供的直接可以拿来使用的所有函数. 这个表的顺序是按照首字母的排列顺序来的,都混乱的堆在一起.比如,oct和bin ...

  9. 用python写MapReduce函数——以WordCount为例

    尽管Hadoop框架是用java写的,但是Hadoop程序不限于java,可以用python.C++.ruby等.本例子中直接用python写一个MapReduce实例,而不是用Jython把pyth ...

  10. js实现千位分隔

    最近一个项目中使用到了千位分隔这个功能,在网上也看见一些例子,但是实现起来总觉有些复杂.因此,自己实现了一个千位分隔,留给后来的我们. 先上源码吧. 该方法支持传入的是一个数字字符串,数字.第二个参数 ...