Python基于yield遍历多个可迭代对象

使用itertools工具类中的chain方法,可以很方便的将多个iterable对象一起遍历. 不过,对于dict类型的iterable对象,只会遍历key.

from itertools import chain
my_list = [1, 2, 3]
my_dict = {
  'name': 'zs',
  'age': 45
}
# 使用chain将三个可迭代对象一起遍历, dict是打印key
for value in chain(my_list, my_dict, range(20, 30)):
  print(value, end=",") # 1,2,3,name,age,20,21,22,23,24,25,26,27,28,29,

下面自定义一个my_chain,用于实现上面的功能

def my_chain(*args, **kwargs):
  """注意: args是一个tuple, tuple是一个可迭代对象"""
  for iterable_obj in args:
    for value in iterable_obj:
      yield value
for value in my_chain(my_list, my_dict, range(20, 30)):
  print(value, end=",") # 1,2,3,name,age,20,21,22,23,24,25,26,27,28,29,

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python yield的用法实例分析

    本文实例讲述了Python yield的用法.分享给大家供大家参考,具体如下: yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist(alist): for i in alist: yield i + 1 取出alist的每一项,然后把i + 1塞进去.然后通过调用取出每一项: alist = [1, 2, 3, 4] for x in addlist

  • python使用yield压平嵌套字典的超简单方法

    我们经常遇到各种字典套字典的数据,例如: nest_dict = { 'a': 1, 'b': { 'c': 2, 'd': 3, 'e': {'f': 4} }, 'g': {'h': 5}, 'i': 6, 'j': {'k': {'l': {'m': 8}}} } 有没有什么简单的办法,把它压扁,变成: { 'a': 1, 'b_c': 2, 'b_d': 3, 'b_e_f': 4, 'g_h': 5, 'i': 6, 'j_k_l_m': 8 } 你肯定想到了使用递归来解决这个问题,那

  • python生成器/yield协程/gevent写简单的图片下载器功能示例

    本文实例讲述了python生成器/yield协程/gevent写简单的图片下载器功能.分享给大家供大家参考,具体如下: 1.生成器: '''第二种生成器''' # 函数只有有yield存在就是生成器 def test(i): while True: i += 1 res = yield i print(res) i += 1 return res def main(): t = test(1) # 创建生成器对象 print(next(t)) # next第一次执行从上到下,yield是终点 p

  • 通过实例简单了解Python中yield的作用

    这篇文章主要介绍了通过实例简单了解Python中yield的作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 介绍 我们有时候会发现代码中return的地方,有用yield的,难道他们一样吗?其实,yield与return看起来很像,但实际上完全不同. 使用 def test(): print("****start****") while 1: res = yield 1 print("res:", res) t

  • python yield和Generator函数用法详解

    这篇文章主要介绍了python yield和Generator函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写 import math def is_Prims(number): if number == 2: return True //除2以外的所有偶数都不是素数 elif number % 2 == 0: return False //如果一个数能被除1和

  • 基于Python中的yield表达式介绍

    python生成器 python中生成器是迭代器的一种,使用yield返回函数值.每次调用yield会暂停,而可以使用next()函数和send()函数可以恢复生成器. 这里可以参考Python函数式编程指南:对生成器全面讲解 注意到yield是个表达式而不仅仅是个语句,所以可以使用x = yield r 这样的语法. 这个知识点在协程中需要使用.协程的概念指的是在一个线程内,一个程序中断去执行另一个程序,有点类似于CPU中断.这样减少了切换线程带来的负担,同时不需要多线程中的锁机制,因为不存在

  • Python协程 yield与协程greenlet简单用法示例

    本文实例讲述了Python协程 yield与协程greenlet简单用法.分享给大家供大家参考,具体如下: 协程 协程,又称微线程,纤程.英文名Coroutine. 协程是啥 协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源). 为啥说它是一个执行单元,因为它自带CPU上下文.这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程. 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的. 通俗的理解:在一个线程中的某个函数,可以在任

  • Python基于yield遍历多个可迭代对象

    使用itertools工具类中的chain方法,可以很方便的将多个iterable对象一起遍历. 不过,对于dict类型的iterable对象,只会遍历key. from itertools import chain my_list = [1, 2, 3] my_dict = { 'name': 'zs', 'age': 45 } # 使用chain将三个可迭代对象一起遍历, dict是打印key for value in chain(my_list, my_dict, range(20, 30

  • Python reversed反转序列并生成可迭代对象

    英文文档: reversed(seq) Return a reverse iterator. seq must be an object which has a __reversed__() method or supports the sequence protocol (the __len__() method and the __getitem__() method with integer arguments starting at 0). 反转序列生成新的可迭代对象 说明: 1. 函数

  • Python中for循环可迭代对象迭代器及生成器源码学习

    目录 问题: 1. 迭代 1.1 可迭代对象Iterable 1.2 迭代器Iterator 1.3 for循环 1.3.1 iter()方法和next()方法 1.3.2 iter()和__iter__() 1.3.3 next()和__next__() 1.3.4 自定义类实现__iter__()和__next__() 1.3.5 探究for循环 2 生成器 2.1 获取生成器 2.2 next(生成器) 2.3 生成器和迭代器 2.4 生成器解析式 问题: 之前在学习list和dict相关

  • Python基于生成器迭代实现的八皇后问题示例

    本文实例讲述了Python基于生成器迭代实现的八皇后问题.分享给大家供大家参考,具体如下: 问题:有一个棋盘和8个要放到上面的皇后,唯一的要求是皇后之间不能形成威胁.也就是说,必须把他们防止成每个皇后都不能吃掉其他皇后的状态. # -*- coding: utf-8 -*- #python 2.7.13 __metaclass__ = type def confict(state, nextX): nextY = len(state) for i in range(nextY): if abs(

  • Python基于回溯法子集树模板实现图的遍历功能示例

    本文实例讲述了Python基于回溯法子集树模板实现图的遍历功能.分享给大家供大家参考,具体如下: 问题 一个图: A --> B A --> C B --> C B --> D B --> E C --> A C --> D D --> C E --> F F --> C F --> D 从图中的一个节点E出发,不重复地经过所有其它节点后,回到出发节点E,称为一条路径.请找出所有可能的路径. 分析 将这个图可视化如下: 本问题涉及到图,那首

  • python学习之可迭代对象、迭代器、生成器

    Iterable – 可迭代对象 能够逐一返回其成员项的对象. 可迭代对象的例子包括所有序列类型 (例如 list, str 和 tuple) 以及某些非序列类型例如 dict, 文件对象以及定义了__iter__()方法或是实现了序列语义的__getitem__() 方法的任意自定义类对象. 可迭代对象可用于 for 循环以及许多其他需要一个序列的地方(zip().map() -).当一个可迭代对象作为参数传给内置函数 iter() 时,它会返回该对象的迭代器.这种迭代器适用于对值集合的一次性

  • Python基于回溯法子集树模板解决野人与传教士问题示例

    本文实例讲述了Python基于回溯法子集树模板解决野人与传教士问题.分享给大家供大家参考,具体如下: 问题 在河的左岸有N个传教士.N个野人和一条船,传教士们想用这条船把所有人都运过河去,但有以下条件限制: (1)修道士和野人都会划船,但船每次最多只能运M个人: (2)在任何岸边以及船上,野人数目都不能超过修道士,否则修道士会被野人吃掉. 假定野人会服从任何一种过河安排,请规划出一个确保修道士安全过河的计划. 分析 百度一下,网上全是用左岸的传教士和野人人数以及船的位置这样一个三元组作为状态,进

  • 浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器

    1.iterable iterator区别 要了解两者区别,先要了解一下迭代器协议: 迭代器协议是指:对象需要提供__next__()方法,它返回迭代中的元素,在没有更多元素后,抛出StopIteration异常,终止迭代. 可迭代对象就是:实现了迭代器协议的对象. 协议是一种约定,可迭代对象实现迭代器协议,Python的内置工具(如for循环,sum,min,max函数等)通过迭代器协议访问对象,因此,for循环并不需要知道对象具体是什么,只需要知道对象能够实现迭代器协议即可. 迭代器(ite

  • python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析

    一.环境准备 python3.8.3 pycharm 项目所需第三方包 pip install scrapy fake-useragent requests selenium virtualenv -i https://pypi.douban.com/simple 1.1 创建虚拟环境 切换到指定目录创建 virtualenv .venv 创建完记得激活虚拟环境 1.2 创建项目 scrapy startproject 项目名称 1.3 使用pycharm打开项目,将创建的虚拟环境配置到项目中来

  • 详解Python之可迭代对象,迭代器和生成器

    目录 一.概念描述 二.序列的可迭代性 三.经典的迭代器模式 四.生成器也是迭代器 五.实现惰性迭代器 六.使用生成器表达式简化惰性迭代器 总结 一.概念描述 可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可迭代对象内部需要实现__iter__函数来返回其关联的迭代器; 迭代器是负责具体数据的逐个遍历的,其通过实现__next__函数得以逐个的访问关联的数据元素;同时通过实现__iter__来实现对可迭代对象的兼容; 生成器是一种迭代器模式,其实现了数据的惰性生成,即

随机推荐