day21 生成器,列表解析,三元表达式
Python之路,Day9 = Python基础9
判断可迭代对象和迭代器
from collections import Iterable, Iterator # 导入模块功能,用来判断对象是否为Iterable(可迭代对象)、Iterator(迭代器)
isinstance() # 使用这个功能辅助完成判断 isinstance(a, Iterable) 查看a是否为可迭代对象
# 判断对象为可迭代对象还是迭代器
生成器
生成器就属于迭代器(包含yield的函数)
yield 可以进行返回值操作,如果后面没有yield拦住,作为返回值,会报错 StopIteration
def foo():
print(111)
yield 1 # 如果打印下面.__next__的结果的话,会打印这个返回值
print(222)
f = foo() # 运行这一句的时候,系统不会运行 foo(),而是直接生成一个生成器
f.__next__()
f.__next__()
yield功能:
说明:在定义函数的时候,如果发现函数中有 yield 那么,在调用的时候,不执行,直接生成 生成器
1.与 return 类似,都可以返回值,但yield可以多次返回数值
2.为函数封装好了 __iter__ 和 __next__ 方法
3.遵循迭代器的取值方式 obj.__next__(), 触发的函数的执行,函数暂停后,通过__next__再继续
列表解析
# 要求:将 s = 'hello' 放到新列表中
[i.upper() for i in s] # for 循环得到i,将i作为列表的元素
# 要求:判断列表 l = [1,31,73,84,57]中的元素, 如果大于30,就将i加入新列表
res = [i for i in l if i > 30]
加入字典的值(i) 循环( for i in l ) 条件( if i > 30 )
三元表达式
res = 2 if 2 > 3 else 3 # 正确时执行 判断条件 错误时执行
print(res)
结果:3 # 执行结果为 3
=============================homework================
1 编写 tail -f a.txt |grep 'error' |grep '404'命令,周一默写
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Always"
# Date: 2017/6/16 import time def tail(file_path):
with open(file_path, encoding='utf-8') as f:
f.seek(0,2)
while True:
line = f.readline()
if line:
yield line
else:
time.sleep(0.5) def grep(lines, pattern):
for line in lines:
if pattern in line:
yield line g = grep(grep(tail('te.txt'), 'error'), '')
for i in g:
print(i)
2 文件a.txt内容
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
要求使用列表解析,从文件a.txt中取出每一行,做成下述格式
[{‘name’:'apple','price':10,'count':3},{...},{...},...]
3 格式与2一样,但只保留价格大于1000的商品信息
print([{'name':i.strip().split()[0], 'price':i.strip().split()[1], 'count':i.strip().split()[2]} for i in open('a.txt')])
print([{'name':i.strip().split()[0], 'price':i.strip().split()[1], 'count':i.strip().split()[2]} for i in open('a.txt') if int(i.strip().split()[1]) > 1000])
执行结果
[{'name': 'apple', 'count': '3', 'price': '10'}, {'name': 'tesla', 'count': '1', 'price': '100000'}, {'name': 'mac', 'count': '2', 'price': '3000'}, {'name': 'lenovo', 'count': '3', 'price': '30000'}, {'name': 'chicken', 'count': '3', 'price': '10'}]
[{'name': 'tesla', 'count': '1', 'price': '100000'}, {'name': 'mac', 'count': '2', 'price': '3000'}, {'name': 'lenovo', 'count': '3', 'price': '30000'}]
day21 生成器,列表解析,三元表达式的更多相关文章
- 函数---迭代器&生成器&列表解析&三元表达式
可迭代对象:obj.__iter__ 迭代器:iter1=obj.__iter() 1iter1.__next__ 2iter2.__next__ 迭代器: 优点:不依赖索引 ...
- xpinyin-函数返回多个值-lambda匿名函数-列表生成式-三元表达式
import xpinyinp=xpinyin.Pinyin() #实例化print(p.get_pinyin('小白','')) 函数返回多个值:1.函数如果返回多个值的话,它会把这几个值放到一个元 ...
- day17 生成器, 面向过程, 三元表达式, 生成式
1. 生成器 生成器:就是一种自定义的迭代器,是用来返回多次值自定义迭代器的好处:节省内存 return只能返回一次值,函数就立即结束了yield 1.可以挂起函数,保存函数的运行状态 2.可以用来返 ...
- 函数与函数式编程(生成器 && 列表解析 && map函数 && filter函数)-(四)
在学习python的过程中,无意中看到了函数式编程.在了解的过程中,明白了函数与函数式的区别,函数式编程的几种方式. 函数定义:函数是逻辑结构化和过程化的一种编程方法. 过程定义:过程就是简单特殊没有 ...
- python迭代器 生成器 三元运算 列表解析
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...
- python3 三元表达式,列表解析
python3 三元表达式,列表解析 三元表达式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 x=2 y=3 if x > y ...
- Python(迭代、三元表达式、列表生成、生成器、迭代器)
迭代 什么是迭代 1 重复 2 下次重复一定是基于上一次的结果而来 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). ...
- Python基础:08列表解析与生成器表达式
一:列表解析 列表解析(List comprehensions)来自函数式编程语言Haskell .它可以用来动态地创建列表.它在 Python 2.0 中被加入. 列表解析的语法: [exp ...
- Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化
一.装饰器 一.装饰器的知识储备 1.可变长参数 :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...
随机推荐
- if控制器
因为比较的是字符串,所以要在两边加双引号哦
- <%#Eval() %>的常用方法
<%# %>用于数据绑定,通常是用在数据源控件里,比如GridView,Repeater等. 1.绑定Repeater 基础用法 <%# Eval("DriverName& ...
- Linux 父进程发送信号杀死子进程
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <signal. ...
- JS Window对象 计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码。
计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互 ...
- 支付宝支付接口-app支付沙箱环境
说明 开发阶段 需要验证自己的app支付加签是否正确,这里使用沙箱环境来进行模拟,使用ali的沙箱测试app和沙箱钱包app进行校验 准备阶段 1.进入沙箱页面 2.找到app支付文档 https:/ ...
- 每天进步一点点-WPF-根据数据类型加载控件
目的,根据数据类型的不同,动态的加载适用于不同数据类型的控件(布局) 原理:为自定义的数据类型添加数据魔板,绑定的时候绑定这些数据类型的实例. 例子: 数据类型: 数据模板: <DataTemp ...
- wordpress非弹窗表单多文件上传插件
插件名:Drag and Drop Multiple File Upload - Contact Form 7 (ps:如果是弹窗表单,不要使用这个插件Drag and Drop Multiple F ...
- 容斥原理解一般不定方程——cf451E经典题
/* 给定n个盒子,第i个盒子有ai朵花,现在从中选取m朵花,问选取方案数 用容斥定理解决 m=x1+x2+..+xn C(m+n-1,n-1)+sum{ (-1)^p * C(m+n-1-(1+n1 ...
- DELPHI中如何闪烁应用程序窗口或任务栏按钮
使用FlashWindowEx函数: 一.设置FlashWInfoDelphi中TFlashWInfo申明如下:TypeTFlashWInfo = record cbSize : LongInt; h ...
- NX二次开发-设置WCS显示UF_CSYS_set_wcs_display
NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //设置WCS显示 //1显示WCS, 0不显 ...