python基础学习之生成器与文件系统知识总结

一、生成器

首先解释迭代器。

能以一种一致的方式对序列进行迭代(比如列表中的对象或文件中的行)是Python的一个重要特点。这是通过一种叫做迭代器协议(iterator protocol,它是一种使对象可迭代的通用方式)的方式实

现的,一个原生的使对象可迭代的方法。

some_dict = {'a': 1, 'b': 2, 'c': 3}
for key in some_dict:
    print(key)
#输出:
a
c
b

迭代器是一种特殊对象,它可以在诸如for循环之类的上下文中向Python解释器输送对象。大部分能接受列表之类的对象的方法也都可以接受任何可迭代对象。比如min、max、sum等内置方法以及list、tuple等类型构造器。

dict_iterator=iter(some_dict)
print(dict_iterator)
print(list(dict_iterator))
#输出
<dictionary-keyiterator object at 0x7ff0105bea48>
['a', 'c', 'b']

生成器(generator)是构造新的可迭代对象的一种简单方式 。一般的函数执行之后只会返回单个值,而生成器则是以延迟的方式返回一个值序列,即每返回一个值之后暂停,直到下一个值被请求时再继续。要创建一个生成器,只需将函数中的return替换为yeild即可。

def squares(n=10):
    print('Generating squares from 1 to {0}'.format(n ** 2))
    for i in range(1,n+1):
        yield i**2
gen=squares()# 注意: 调用 该生成器时,没有任何代码会被立即执行   ,print操作也并没有被执行!
print(gen)  #<generator object squares at 0x7f3a75af4b40>

#  直到你从该生成器中请求元素时,它才会开始执行其代码
for x  in gen:
    print(x,)

输出:

<generator object squares at 0x7f3a75af4a00>
Generating squares from 1 to 100
(1,)
(4,)
(9,)
(16,)
(25,)
(36,)
(49,)
(64,)
(81,)
(100,)

另一种更简洁的构造生成器的方法是使用生成器表达式(generator expression)。这是一种类似于列表、字典、集合推导式的生成器。注意 其创建方式为,把列表推导式两端的方括号改成圆括号:

gen=(x**2 for x in range(5))
print(gen)
print(type(gen))
for i in gen:
    print(i)
输出:
<generator object <genexpr> at 0x7ff01066ef00>
<type 'generator'>
0
1
4
9
16
# 和下面的 这个冗长得多的生成器是完全等价的:
def _make_gen():
    for x  in range(5):
        yield x**2 

gen=_make_gen()
for i in gen:
    print(i)

二、文件系统

使用内置的open函数 参数如下表:

常用的文件方法

# 用with语句可以容易地清理打开的文件,并在运行基本结束时,自动关闭文件流

with open(path) as f:
    lines=[x.strip() for x in f]

到此这篇关于python基础学习之生成器与文件系统知识总结的文章就介绍到这了,更多相关python生成器与文件系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python 中文件输入输出及os模块对文件系统的操作方法

    整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2.对打开文件进行读取时,readline()与readlines()的区别在于是否一次性的读取所有的内容,并将每行的信息作为列表中的一个子项. 例如:文件test.txt中 1,3,4   2,35,6 分别用readline与readlines对其进行读取 r=file_object.readlin

  • python django框架中使用FastDFS分布式文件系统的安装方法

    一.安装FastDFS 1-1:执行docker命令安装 # 安装tracker docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs youkou1/fastdfs tracker # 安装storage docker run -dti --network=host --name storage -e TRACKER_SERVER=IP地址:22122 -v /var/fdfs/storage:

  • 用Python编写一个简单的FUSE文件系统的教程

    如果你是我的长期读者,那么你应该知道我在寻找一个完美备份程序,最后我写了一个基于bup的我自己的加密层. 在写encbup的时候,我对仅仅恢复一个文件就必须要下载整个巨大的档案文件的做法不甚满意,但仍然希望能将EncFS和 rdiff-backup一起使用来实现可远程挂载.加密.去重.版本化备份的功能. 再次试用obnam 后(啰嗦一句:它还是慢的出奇),我注意到了它有一个mount命令.深入研究后,我发现了fuse-python和fusepy,感觉用Python写一个FUSE文件系统应该挺简单

  • Python生成器传参数及返回值原理解析

    一.生成器简介 在python中,带yield的方法不再是普通方法,而是生成器,它的执行顺序不同与普通方法. 普通方法的执行是从头到尾,最后return返回,或者没有返回值 生成器是到yield就返回yield之后的值,然后阻塞,等待next()/send()继续调起生成器 二.next()/send()的异同: next()/send()都可以调起生成器 next()只能调起生成器返回值,send()还可以对生成器进行传参数,与正常的理解不同,yield表达式左侧的值是send()方法传进来的

  • Python faker生成器生成虚拟数据代码实例

    今天给大家介绍一个Faker模块,一款基于Python的测试数据生成工具,无论是用于初始化数据库,创建XML文件,或是生成压测数据,Faker都是不错的选择. 1.Faker工具包 只需要使用pip便可下载该工具包 pip install faker 如果下载速度比较慢的话,可以使用国内镜像源来下载 国内源: - 清华:https://pypi.tuna.tsinghua.edu.cn/simple - 阿里云:http://mirrors.aliyun.com/pypi/simple/ - 中

  • python 6行代码制作月历生成器

    原文作者:Alex27933 转自链接:https://learnku.com/articles/49570 1. 订立制作目标 目标: 输入指定的年份和月份,便能生成月历 可以重复运行 2. 制作所需函数 输入指定的年份和月份 → input 函数 生成月历 → calendar 函数 可以重复运行 → while 3. 开始制作 第一步:载入模块 由于 calendar 函数是系统自带,无需 pip 安装,可以直接载入使用. import calendar 第二步:制作输入年份和月份的部分

  • 彻底搞懂python 迭代器和生成器

    迭代器跟生成器,与上篇文章讲的装饰器一样,都是属于我的一个老大难问题. 通常就是遇到的时候就去搜一下,结果在一大坨各种介绍博客中看了看,回头又忘记了. 你是不是也是这样呢? 俗话说:好记性不如烂笔头,虽然现在基本不咋用笔写字了,但是还是要好好整理下,起码以后我就不用搜了. 如果现在给你一个列表list_a = [1, 2, 3, 4],让你去迭代它,相信大家都很熟悉,直接用for循环就完事儿, list_a = [1, 2, 3, 4] for i in list_a: print(i) 运行

  • Python3与fastdfs分布式文件系统如何实现交互

    一.先配置好自己的分布式文件系统 参考另一篇文章: https://www.jb51.net/article/189283.htm 二.安装第三方库py3Fdfs pip install py3Fdfs 三.实际应用,参考文档 https://pypi.org/project/py3Fdfs/ from fdfs_client.client import get_tracker_conf, Fdfs_client # client.conf配置文件路径 conf = get_tracker_co

  • python 列表推导和生成器表达式的使用

    序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列. 容器序列与扁平序列 容器序列存放的是对象的引用,包括list.tuple.collections.deque. 扁平序列存放的是对象的值,包括str.bytes.bytearray.memoryview和array.array. 扁平序列的值是字符.字节和数值这种基础类型. 不可变序列与可变序列 不可变序列,包括tuple.str.bytes. 可变序列,包括list.bytearray.array

  • python基础学习之生成器与文件系统知识总结

    一.生成器 首先解释迭代器. 能以一种一致的方式对序列进行迭代(比如列表中的对象或文件中的行)是Python的一个重要特点.这是通过一种叫做迭代器协议(iterator protocol,它是一种使对象可迭代的通用方式)的方式实 现的,一个原生的使对象可迭代的方法. some_dict = {'a': 1, 'b': 2, 'c': 3} for key in some_dict: print(key) #输出: a c b 迭代器是一种特殊对象,它可以在诸如for循环之类的上下文中向Pytho

  • python基础学习之递归函数知识总结

    一.递归函数使用注意点 递归函数一定要编写终止条件,否则将产生无限递归.(死循环) 二.递归的效率问题 递归效率不高,递归层次过多会导致栈溢出. Python中不推荐使用递归. 三.递归函数引入 """ 使用代码循环输出故事:从前有座山,山里有座庙... """ # ------------while循环 (暂时忽略死循环)--------------- while True: print("从前有座山,山里有座庙...")

  • Python基础学习之类与实例基本用法与注意事项详解

    本文实例讲述了Python基础学习之类与实例基本用法与注意事项.分享给大家供大家参考,具体如下: 前言 和其他编程语言相比,Python用非常少的新语法和语义将类加入到语言中.Python的类提供了面向对象编程的所有标准特性:类继承机制允许多个基类,派生类可以覆盖它基类的任何方法,一个方法可以调用基类中相同名称的的方法.对象可以包含任意数量和类型的数据.和模块一样,类也拥有Python天然的动态特性:它们在运行时创建,可以在创建后修改. Python的类 Python类实例时,先调用__new_

  • Python基础学习之函数方法实例详解

    本文实例讲述了Python基础学习之函数方法.分享给大家供大家参考,具体如下: 前言 与其他编程语言一样,函数(或者方法)是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. python的函数具有非常高的灵活性,可以在单个函数里面封装和定义另一个函数,使编程逻辑更具模块化. 一.Python的函数方法定义 函数方法定义的简单规则: 1. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 2. 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 3.

  • Python基础学习之条件控制语句小结

    一.条件控制语句的补充 在循环里面,我们可以通过关键字来手动终止循环,而不是把整个程序停了来终止. 三种语句:break return continue都可以使循环停止 不过return一般都是用到函数里面的,都是使用break 而continue 不是用来终止循环的,具体作用看下面代码示例 二.break 看汉语也有个大概思想:打破 它的作用是打破循环,使循环碰到它后终止 break的作用是打破结构体,使程序退出当前代码块 下面看这个例子,我们要实现的功能是循环获取用户从键盘输入的数据,直到输

  • Python基础学习之认识线程

    目录 一.什么是线程? 二.再来解释线程的代码 三.线程触发业务函数,线程调用业务函数 四.多了一个线程是哪个? 五.总结 一.什么是线程? 我们知道工人都是同时在工厂工作,复制各自的工作的.他们就是一个一个独立运行的单位! 线程也是类似这样的一个独立的运行单位,多线程,就是多个独立的运行单位,同时执行同样的事情. 简单这样理解,后面会进行对比. threading.Thread 类是Python中的线程类,它封装了线程的信息和一些同用的方法. 线程有状态,拿工人一天的状态来比喻很合适,早上上班

  • Python基础学习函数+模块+类

    目录 一.函数 二.模块 三.类和对象 类的对象 实例对象 类的方法 类的继承 三.总结 前言: Python基础知识+结构+数据类型 Python基础学习列表+元组+字典+集合 今天的是Python基础学习的第三篇了,前面的知识点给大家放在上面了,零基础的小伙伴可以自己动手领取,学好Python的基础知识对我们后期 去实现Python案例帮助很大,知其然才能更好解决问题,话不多说,直接开始了. 一.函数 print("-------------定义函数-------------");

  • Python基础学习列表+元组+字典+集合

    目录 一.列表 二.元组 三.字典 四.集合 五.总节 前言: 这一章的知识紧接上一章,零基础的小伙伴可以从上一章学起来.当然,你也可以收藏起来慢慢学习,学习是不可操之过急的啦… 一.列表 print("-------------创建列表-------------"); list1 = ['JAVA', 'Hello', 'Python', 'VS', 1, 2, 3] print(list1) list2 = list('Python') print(list2) list3 = [

  • Python基础学习之时间转换函数用法详解

    本文实例讲述了Python基础学习之时间转换函数用法.分享给大家供大家参考,具体如下: 前言 python的时间格式分为多种,几种格式之间的转换方法时常是我们遇到的而且是经常忘记的点,python不像php,时间字符串和datetime是一起的,只需要strtotime和date函数就可以相互转化.虽然网上已经有很多python时间转换的文章,但是由于作者本人经常做海外业务,需要各种时区之间的转换,所以这篇文章会对按时区转换各种时间格式做一个总结. 转换方法图示(图片转自网络): 一.字符串转时

  • Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】

    本文实例讲述了Python基础学习之基本数据结构.分享给大家供大家参考,具体如下: 前言 相比于PHP,Python同样也是脚本解析语言,所以在使用Python的时候,变量和数据结构相对于编译语言来说都会简单许多,但是Python相比于PHP来说,变量类型的定义会比较严格:string->int的转换没有PHP那么方便.但这也让程序稳定性有所提升,例如和客户端交互的时候,数据库取出来的数字int和缓存取出来的数字(默认是string)需要手动进行转换(否则会有报错提示),而PHP不需要手动转换的

随机推荐