迭代器

双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的
1. 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir(数据) )
可迭代的一定可以被for循环
2. 迭代器协议:含有__iter__、__next__的方法
迭代器一定可迭代,可迭代的通过调用iter()方法就能得到一个迭代器
迭代器的特点:
  很方便使用,且只能取所有的数据取一次
  节省内存空间
for 循环其实就是在使用迭代器

判断是不是迭代器,其实是为了使用for循环
当我们遇到一个新的变量,不确定能不能for循环时,就判断它是否可迭代

生成器

生成器的表现形式
  1. 生成器函数
  2. 生成器表达式
生成器函数:
含有yield关键字的函数就是生成器函数
特点:
  调用函数之后函数不执行,返回一个生成器
  调用next方法的时候会取到一个值
  直到取完最后一个,再执行next会报错
从生成器中取值的几个方法
  1. next
  2. for
  3. 数据类型的强制转换:占用内存 关于send()
其实next()和send()在一定意义上作用是相似的
区别是send()可以传递yield表达式的值进去,而next()不能传递特定的值,只能传递None进去
因此,我们可以看做c.next() 和 c.send(None) 作用是一样的
需要提醒的是,第一次调用时,请使用next()语句或是send(None),不能使用send发送一个非None的值,否则会出错
最后一个yield不能接受外部的值 生成器的表达式和列表推导式以及其他推导式 1. 生成器表达式:
g = (i for i in range(10))      # g是一个生成器
for i in g:
print(i) 2. 列表推导式
[每一个元素或是和元素相关的操作 for 元素 in 可迭代数据类型]                 # 遍历之后挨个处理
[满足条件才进行操作的元素 for 元素 in 可迭代数据类型 if 元素相关的条件 ] # 筛选功能
egg_list = ['鸡蛋%s'%i for i in range(10)]      # 列表推导式
print(egg_list)

3. 字典推导式
  将一个字典的key和value对调
mcase = {'a': 10, 'b': 34}
dic = {mcase[k]:k for k in mcase}
print(dic)

4. 集合推导式
  计算列表中每个值的平方,自带去重功能
squared = {x*x for x in [1, -1, 2]}
print(squared)

没有元组推导式

内置函数

在此仅列出几个重要的内置函数:

其他:input,print,type,hash,open,import,dir

str类型代码执行:eval,exec

数字:bool,int,float,abs,divmod,min,max,sum,round,pow

序列——列表和元组相关的:list和tuple

序列——字符串相关的:str,bytes,repr

序列:reversed,slice

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,zip,filter,map

匿名函数

  为了解决那些功能很简单的需求而设计的一句话函数

函数名 = lambda 参数 :返回值
匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值

返回值和正常的函数一样可以是任意数据类型
看到匿名函数,就要想到肯定会带着考内置函数,而和匿名函数相关的内置函数只有5个:min max filter map sorted
例题:现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

没用匿名函数:
tu1 =(('a'),('b'))
tu2 =(('c'),('d'))
res = zip(tu1,tu2)
def func(tup):
return {tup[0]:tup[1]}
ret = map(func,res)
# for i in ret:
# print(i)
list(ret)

用匿名函数:

tu1 =(('a'),('b'))
tu2 =(('c'),('d'))
res = zip(tu1,tu2)
# def func(tup):
# return {tup[0]:tup[1]}
ret = map(lambda tup:{tup[0]:tup[1]},res)
# for i in ret:
# print(i)
print(list(ret))

简化后一行:

print(list(map(lambda tup:{tup[0]:tup[1]},zip((('a'),('b')),(('c'),('d'))))))

python学习之老男孩python全栈第九期_第二周学习总结的更多相关文章

  1. python学习之老男孩python全栈第九期_第一次周末考试题(over)第三次添加完毕

    day 6python基础数据类型考试题 考试时间:两个半小时 满分100分(80分以上包含80分及格) 一,基础题. 1. 简述变量命名规范(3分) 答:(1) 变量为数字,字母以及下划线的任意组合 ...

  2. python学习之老男孩python全栈第九期_数据库day005知识点总结 —— MySQL数据库day5

    三. MySQL视图(不常用) 给某个查询语句设置个别名(视图名),日后方便使用 - 创建: create view 视图名 as SQL; PS:视图是虚拟的 - 修改: alter view 视图 ...

  3. python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4

    复习: 1. MySQL:文件管理的软件 2. 三部分: - 服务端 - SQL语句 - 客户端 3. 客户端: - MySQL - navicat 4. 授权操作: - 用户操作 - 授权操作 5. ...

  4. python学习之老男孩python全栈第九期_数据库day002知识点总结 —— MySQL数据库day2(全部)

    一. 复习1. MySQL: - 服务端 - 客户端2. 通信交流 - 授权 - SQL语句 - 数据库 创建数据库: create database db1 default charset utf8 ...

  5. python学习之老男孩python全栈第九期_数据库day002 -- 作业 (数据库为day001创建的数据库)

    1.自行创建测试数据 对score表进行优化: 添加数据: 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 为了方便做题,额外增加几条数据 查询: 3.查询平均成绩大于60分的同学的学号和 ...

  6. python学习之老男孩python全栈第九期_数据库day001知识点总结 —— MySQL操作数据库以及数据表、基本数据类型、基本增删改查、外键定义以及创建

    一. 学习SQL语句规则以及外键 1. 操作文件夹 create database db2; 创建文件夹 create database db2 default charset utf8; 创建文件夹 ...

  7. python学习之老男孩python全栈第九期_数据库day004 -- 作业

    https://www.cnblogs.com/YD2018/p/9451809.html 11. 查询学过“001”并且也学过编号“002”课程的同学的学号.姓名 select student.si ...

  8. python学习之老男孩python全栈第九期_数据库day003知识点总结 —— MySQL数据库day3

    复习: 1. 增 insert into xx(name) values('root'),('xxx'); insert into xx(name) select id from tb1; 2. 自增 ...

  9. python学习之老男孩python全栈第九期_数据库day003 -- 作业

    数据库: class:  course: student: teacher: score: /* Navicat Premium Data Transfer Source Server : local ...

随机推荐

  1. Bootstrap框架(一)

    day57 参考:https://www.cnblogs.com/liwenzhou/p/8214637.html 下载:http://www.bootcss.com/   选择用于生产环境的 Boo ...

  2. eclipse常见使用方法

    1.修改字体大小,字符类型(设置为中欧字符) window-preferences-General-Appearance-Colors and Fonts-Basic-Text Font修改 2.展示 ...

  3. Educational Codeforces Round 25 C. Multi-judge Solving

    题目链接:http://codeforces.com/contest/825/problem/C C. Multi-judge Solving time limit per test 1 second ...

  4. 压缩VBox虚拟机空间的方法

      虚拟机使用久了就会发现虚拟文件越来越大,删除虚拟机中的文件之后物理主机的磁盘空间并不会相应减少,所以实际占用的空间并没有虚拟文件大小那么大,因此我们很有必要进行压缩.不过VirtualBox貌似没 ...

  5. maven项目报错--Cannot change version of project facet Dynamic Web Module to 3.0 Error in Eclipse

    错误原因: 使用ecplise构建的maven骨架默认支持的是web2.3的版本,当使用这个创建3.0版本的web项目时则会报这样的错误: Cannot change version of proje ...

  6. leetcode 73 矩阵置零 Python

    矩阵置零     给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [   [1,1,1],   [1,0,1],   [1 ...

  7. python3中文件操作及编码

    #之前一直没明白文件处理中的w和wb的区别到底是什么,#在看过视频后才知道,原来在linux里面是没有区别的,#但是在windows里面就能够看出区别来了#下面来个例子: with open(&quo ...

  8. leetcode-917-仅仅反转字母

    题目描述: 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转. 示例 1: 输入:"ab-cd" 输出:"dc-b ...

  9. 【qboi冲刺NOIP2017复赛试题4】 全套题目+题解+程序

    作为一个好人(验题人),我给大家奉上下这套题的题解,并且预祝大家这套题能够AK: T1题面:Alice现在有n根木棍,他们长度为1,2,3....n,Bob想把某一些木棍去掉,使得Alice剩下的木棍 ...

  10. WebDriverAPI(9)

    操作JavaScript的Alert窗口 测试网址代码 <html> <head> <title>你喜欢的水果</title> </head> ...