列表、字符串、元组、字典、集合这些可迭代对象都会因为内存大小被限制,而迭代器是一个数据流,单次只会将一个值放入内存,就没有了这个限制
现在需求是一个无限大小的数据类型,所以需要用到迭代器,但用文件来完成又不合适,这时候就需要用到自定义迭代器,也就是生成器
列表、字符串、元组、字典、集合这些可迭代对象都会因为内存大小被限制,而迭代器是一个数据流,单次只会将一个值放入内存,就没有了这个限制
现在需求是一个无限大小的数据类型,所以需要用到迭代器,但用文件来完成又不合适,这时候就需要用到自定义迭代器,也就是生成器
迭代器指的是迭代取值的工具,迭代指的是一个重复的过程,每一次重复都是基于上一次的结果而继续,单纯的重复并不是迭代
1 | count = 0 |
迭代器涉及到把多个值循环取出来的工作,涉及类型包括:列表、字符串、元组、字典、集合、文件
1 | # 现在我们暂时忘记for循环,将下列列表取出 |
为了解决基于索引取值的局限性,python必须提供一种不依赖于索引的取值方式,就是迭代器
‘器’指的是工具/器具
‘装饰’指的是为其他事物添加额外的东西点缀
装饰器指的是定义一个函数(或者类),该函数是用来装饰其他函数的(为其他函数添加额外的功能),准确的说装饰器的作用就是在不修改被装饰对象源代码和调用方式的前提下为被装饰对象添加额外的功能
关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包
名称空间(namespaces)顾名思义即存放名字与对象映射/绑定关系的地方,是对栈区的划分,在不同的空间中可以存放相同的名字,从而解决命名冲突的问题
作用域指的是名称所对应的有效范围,内置名称空间和全局名称空间在代码全局都能被使用,被称为全局作用域,而局部名称空间在函数内定义,就只能在当前函数使用,就被称为局部作用域
其实函数我们在之前就已经接触过了,输入输出的input\print
,类型转换的int\bool
等等很多很多,他们都是具有一定的功能。
简单理解,函数就是一个个的功能模块,他的作用其实很容易理解,我们写的程序会越来越复杂、功能越来越多,但是很多时候需要重复使用一些功能代码,函数其实就是将这些功能代码封装起来做成工具
以print
函数为例,我们可能会在一个程序中大量使用print
,如果每用一次就完整书写一次print
内部代码,就会导致代码非常臃肿,组织结构不清晰,可读性差,这个叫做代码冗余,而且如果要对程序的print进行修改,我们还需要修改代码中每一个使用了这个功能的代码,就会导致可维护性、扩展性差
应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念。
用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统完成对硬盘的具体操作。
字符串类型、文本文件的内容都是由字符组成的,但凡涉及到字符的存取,都需要考虑字符编码的问题。
字符编码这个知识点的典型特征就是理论多、结论少,但对于开发而言只需要记住结论即可,下面让我们来一点点介绍它
关于数据类型,我们已经在前文简单提到过,我们已经知道数据类型是用来记录事物状态的,而事物的状态是不断变化的,这意味着我们在开发程序时需要频繁对数据进行操作,为了提升我们的开发效率, python针对这些常用的操作,为每一种数据类型内置了一系列方法。
本章的主题就是带大家详细了解下它们,以及每种数据类型的详细定义、类型转换
python数据类型分类方式
前文讲了流程控制和if判断语句,本章节就是来介绍循环的,循环结构就是重复执行某段代码块,人类某些时候需要重复做某件事情,所以程序中必须有相应的机制来控制计算机具备人的这种循环做事的能力
python中有while与for两种循环机制