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 生成器,列表解析,三元表达式的更多相关文章

  1. 函数---迭代器&生成器&列表解析&三元表达式

    可迭代对象:obj.__iter__   迭代器:iter1=obj.__iter() 1iter1.__next__ 2iter2.__next__   迭代器: 优点:不依赖索引         ...

  2. xpinyin-函数返回多个值-lambda匿名函数-列表生成式-三元表达式

    import xpinyinp=xpinyin.Pinyin() #实例化print(p.get_pinyin('小白','')) 函数返回多个值:1.函数如果返回多个值的话,它会把这几个值放到一个元 ...

  3. day17 生成器, 面向过程, 三元表达式, 生成式

    1. 生成器 生成器:就是一种自定义的迭代器,是用来返回多次值自定义迭代器的好处:节省内存 return只能返回一次值,函数就立即结束了yield 1.可以挂起函数,保存函数的运行状态 2.可以用来返 ...

  4. 函数与函数式编程(生成器 && 列表解析 && map函数 && filter函数)-(四)

    在学习python的过程中,无意中看到了函数式编程.在了解的过程中,明白了函数与函数式的区别,函数式编程的几种方式. 函数定义:函数是逻辑结构化和过程化的一种编程方法. 过程定义:过程就是简单特殊没有 ...

  5. python迭代器 生成器 三元运算 列表解析

    1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...

  6. 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 ...

  7. Python(迭代、三元表达式、列表生成、生成器、迭代器)

    迭代 什么是迭代 1 重复 2 下次重复一定是基于上一次的结果而来 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). ...

  8. Python基础:08列表解析与生成器表达式

    一:列表解析 列表解析(List comprehensions)来自函数式编程语言Haskell .它可以用来动态地创建列表.它在 Python 2.0 中被加入. 列表解析的语法:     [exp ...

  9. Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化

    一.装饰器 一.装饰器的知识储备 1.可变长参数  :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...

随机推荐

  1. python的三种特性

    1.封装 什么时候用函数? 各个函数之间是独立的且无共用的数据. 什么时候用类? 函数之间是相关的,且有共用的数据,则可以使用类来封装. 所谓的封装: (1)使用构造方法将内容封装到 对象 中. (2 ...

  2. wpf mvvm datagrid 中button绑定命令方法

    <DataGridTemplateColumn Header="设备状态" IsReadOnly="True" Width="150" ...

  3. zero udp

    Description UDP transport can only be used with the ZMQ_RADIO and ZMQ_DISH socket types.

  4. AN之文献综述

    1.在北京工业大学的<Prediction of effluent Ammonia Nitrogen using FNN-based CBR>这篇文章中,它将温度.pH.ORP.NO3-N ...

  5. vue $emit 子传父

    我们使用子组件传递值给父组件使用 $emit 代码 <!DOCTYPE html> <html lang="en"> <head> <me ...

  6. on windows in superset sql lab error "module object has no attribute sigalrm"

    改下  utils.py   文件 It works after doing the following change (sorry for the massed up alignment, prob ...

  7. css导行下拉动画

    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

  8. 关于移动端使用swiper做图片文字轮播的思考

    最近做移动端网页的时候,需要在首页添加一个公告的模块,用来轮播公告消息标题并且能链接到相应的详情页面,最开始用的是swiper插件,在安卓上测试完全没有问题,但是在苹果机上就没有那么灵敏了,来回切换首 ...

  9. Visual Studio Code 的简单试用体验

    首先对Visual Studio Code做一个大概的介绍.首先明确一下,这个Visual Studio Code(以下简称 vscode)是一个带GUI的代码编辑器,也就是只能完成简单的代码编辑功能 ...

  10. 大神给你分析HTTPS和HTTP的区别

    今天在做雅虎的时候,发现用第三方工具截取不到客户端与服务端的通讯,以前重来没碰到过这种情况,仔细看了看,它的url请求时基于https的,gg了下发现原来https协议和http有着很大的区别.总的来 ...