Python基础知识当中容易混淆的几个知识点
在Python的基础知识当中,对于类实现可迭代功能有了一种新的方式,而这种方式则有别于我们学.NET等其他高级语言。
在Python当中,目前常用的有两种方式来实现这种迭代器的返回:__iter__ 方式和 __getitem__方式,而这两种方式的区别也很简单明了:
1. __iter__方式返回的是一种可供for这样迭代访问的对象;
2. __getitem__ 方式返回的是可以使用下标方式来对数组、元组访问的对象。
举例说明:
class FibArray:
def __init__(self):
self._1, self._2 = 0, 1 def __iter__(self):
return self def __next__(self):
#在执行第一次迭代的时候,先调用一次__next__返回第一个数据。
#所以,虽然在下面FibArray()是一个类的实例,但是其也是根据类的行为返回一个迭代对象
self._1, self._2 = self._2, self._1 + self._2
if self._1 > 100:
raise StopIteration()
return self._1 for i in FibArray():
print(i)
输出为:

在此实例当中,有一个对于初学者来说非常难以理解的一点: for i in FibArray(),就对于学过C#和Java语言的同学来说,类名后面跟一个括号这样是一个类的实例化,也就是一个对象,为何能用在这呢?
其实我们可以这样简单的理解就可以了:在for这个语句当中,for是用来迭代的,其访问的对象应该是一个类的迭代器。在FibArray被实例化的时候,根据上下文及内部定义的函数,自动的返回了一个迭代器对象参于到for运算当中。
def __iter__(self): 这句标明了这是一个可迭代的类。def __next__(self):则为迭代去准备数据。
实际当程序执行到for语句时执行的步骤为:
1. FibArray.__init__ 构造函数;
2. FibArray.__iter__ 标志函数,处理迭代器的初步工作;
3. FibArray.__next__ 函数,准备数据返回;
4. print函数;
5. FibArray.__next__ 函数,准备数据返回;
.......
而__getitem__ 则简单的多,而且一般情况下也是一次性的返回到对象当中。如下所示:
class Fib:
def __getitem__(self, n):
a, b = 1, 1
for i in range(n):
a, b = b, a + b
return a f = Fib()
print(f[5])
程序的运行步骤为:
1. 运行至print函数;
2. 调用Fib类的__getitem__函数,并一次性完成数据的处理,返回数据;
3. 传递给print函数,打印数据。
在理解了其不同的工作原理之后,我们才能对症下药,在不同的场合下面应用不同的场景与方法。
Python基础知识当中容易混淆的几个知识点的更多相关文章
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- python基础知识(二)
以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍
- python 基础知识(一)
python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...
- python基础知识讲解——@classmethod和@staticmethod的作用
python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- python 爬虫与数据可视化--python基础知识
摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...
- python基础知识小结-运维笔记
接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...
- Python基础知识(五)
# -*- coding: utf-8 -*-# @Time : 2018-12-25 19:31# @Author : 三斤春药# @Email : zhou_wanchun@qq.com# @Fi ...
- Python基础知识(Basic knowledge)
Python基础知识(Basic knowledge) 1.认识Python&基础环境搭建 2.Python基础(上) 3.Python基础(中) 4.Python基础(下) 5.Python ...
随机推荐
- WPF网格绑定控件并控制控件是否可读
<DataGridTemplateColumn Width="100" Header="实测值"> <DataGridTemplateColu ...
- 为sqlserver数据库添加专用用户名
在安全里面右键添加登录名,输入登录名与密码(可以取消强制密码策略)然后选择用户映射的数据库,勾选db_owner即可.
- 自定义Log 写到文件中
using System; using System.Collections.Generic; using System.Web; using System.IO; using System.Text ...
- 算法练习LeetCode初级算法之数学
Fizz Buzz class Solution { public List<String> fizzBuzz(int n) { List<String> list=new L ...
- TZOJ 2392 Bounding box(正n边形三点求最小矩形覆盖面积)
描述 The Archeologists of the Current Millenium (ACM) now and then discover ancient artifacts located ...
- button的后台点击事件
在html元素加上runat,type就可以使用onserverclick创建后台事件<button runat='server' onserverclick='Btn_Click' type= ...
- c# post方法亲测可用
/// <summary> /// Post接口方法 /// </summary> /// <param name="requestUri">& ...
- docker-3 Apache
docker 安装 Apache 环境 docker pull httpd 文件创建连接(这样就可以不用发布了,两个文件夹会自动同步文件) ln -s /root/jenkins_home/works ...
- Mysql必知必会 检索数据
检索数据 SELECT 语句 为了使用SELECT检索表数据,必须至少给出两条信息--想选择什么,以及从什么地方选择 功能 语句 备注 检索单个列 SELECT col_1 FROM table_na ...
- JSP 页面跳转的实现方法
客户端跳转 1. 使用 href 超链接标记 <a href="new.jsp">跳转</a> 2. 使用表单提交完成跳转 <form actio ...