day11_python_1124
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的更多相关文章
随机推荐
- Git环境配置
1,下载Git-2.16.2-64-bit.exe并安装, 全部为默认设置 下载地址:http://git-scm.com/download/win 2 在开始菜单中,单击Git CMD,执行下面命令 ...
- centos共享目录
使用VirtualBOX自带的共享文件夹功能 运行环境: - 宿主机:windows 10 - 虚拟机:CentOS 7(我当初是按照Ubuntu环境下的教程弄的,所以其他Linux版本也可以参考 ...
- Java UTC时间与本地时间互相转换
协调世界时,又称世界统一时间.世界标准时间.国际协调时间.由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC. 这套时间系统被应用于许多互联网和万维网的标准中,例如,网络时间协议就是协 ...
- 无需激活直接同步登入discuz,php代码(直接可用)
<?php /** * 抽奖 * @param int $total */ function getReward($total=1000) { $win1 = floor((0.12*$tota ...
- Android Studio NDK开发环境搭建
一. 下载安装Android studio 和 NDK 二. 在Android studio中配置NDK(和SDK配置一样) 三. 用Android studio建立一个工程,打开proj ...
- 模块_pip、os模块
一个python文件就是一个模块 1.标准模块 python自带的模块就是标准模块,也就是可以直接import进来的就是标准模块 import json import random import da ...
- 使用SVN提交代码,快速简单的换地址方法
1.找到你项目所在的文档,然后删除.svn文件,如下图: 2.然后在使用小乌龟的图标,进行项目的导入,界面如下: 3.然后输入SVN库的地址,点击ok界面如下: 4.同步到eclipse的方法是,复制 ...
- CentOS 6.5安装squashfs-tools
在sourceforge.net网站下载源码包 需要安装的依赖项有zlib-devel.xz-devel.x86_64 修改Makefile文件以支持xz压缩的squashfs文件,去掉Makefil ...
- git将本地项目上传码云
1.首先在码云新建项目. 2.使用git bash工具,进入本地项目所在的文件夹. 3.执行命令 git init,初始化本地git仓库 4.执行命令 git remote add [short-na ...
- Learning-Python【29】:网络编程之粘包
粘包问题 上一篇博客遗留了一个问题,在接收的最大字节数设置为 1024 时,当接收的结果大于1024,再执行下一条命令时还是会返回上一条命令未执行完成的结果.这就是粘包问题. 因为TCP协议又叫流式协 ...