Python专用方法与迭代机制实例分析


Posted in Python onSeptember 15, 2014

本文实例讲述了Python专用方法与迭代机制,分享给大家供大家参考之用。具体分析如下:

众所周知,Python 设计哲学是“优雅”、“明确”、“简单”,对于一件事只用一种最好的方法来做,而这种优雅在于背后很自然的隐藏了很多细节。比如对一些对象直接用for 语句来迭代,一些全局函数可以作用于很多具有共同特征的对象,还有生成器装饰器自省等特性。其中很多实现都是借助 Python  内部专用方法,而对外则使用统一的全局函数来进行操作,在配合一些语法糖,使得 Python 写起来愈发的方便,符合人的直觉。

Python 专用方法

类的私有方法:以双线划线开头,但是不以双下划线结尾的方法;
类的专有方法:以双下划线开头和结尾,常用来被内建函数调用;
模块私有对象:以单下划线开头,不能被导入到其他的模块中去;

#!/usr/bin/env python 
# Python3 实现 
_modeluprivate = '本模块私有'  #不能用 from module import * 导入 
 
class People(): 
  def __myprivate(self): 
    print("This is a private fun") 
  def __test__(self): 
    print('call __private: ',end='') 
    self.__myprivate() 
 
if __name__ == '__main__': 
  a = People() 
  a.__test__()      # 专有方法,一般系统专用,自己的类方法不要用这种新式命名 
  a._People__myprivate() # 私有方法被对外被翻译成了这种名字,从而达到私有的效果 
  print(_modeluprivate) 
   
''''' 
输出 
call __private: This is a private fun 
This is a private fun 
本模块私有 
'''

Python 迭代机制

Python 中的可迭代对象是实现了 __iter__() 方法的对象,而 __iter__() 方法返回一个迭代器对象,迭代器对象内部要实现 __next__() 方法。迭代器对外提供了一个统一的遍历集合的接口,并且可以直接用 for 语句来进行操作,非常的方便。对于一些特别大甚至无限的集合,迭代器避免了一次性将数据集载入,几乎是唯一的访问方法。

#!/usr/bin/env python 
# Python3 实现 
class IterTest(): 
  def __init__(self): 
    self.a = 0 
  def __iter__(self): 
    return self 
  def __next__(self): 
    self.a += 1 
    if self.a > 3: 
      raise StopIteration 
    return self.a 
 
if __name__ == '__main__': 
  a = IterTest() 
  for i in a: 
    print(i,end=' ') 
  b = IterTest() 
  print(list(b)) # list()构造器,可以接受可迭代对象 
  c = IterTest() 
  print(next(c), next(c), next(c)) 
 
''''' 
输出 
1 2 3 [1, 2, 3] 
1 2 3 
'''

Python 的生成器其实返回的也是一个迭代器,同样可以对其使用 next() 函数,对其使用 for操作,有了 yield 关键字使得创建生成器更加的方便。

#!/usr/bin/env python 
# Python3 实现 
def funGenerate(): 
  yield 1 
  yield 2 
  yield 3 
 
if __name__ == '__main__': 
  a = funGenerate() 
  for i in a: 
    print(i, end=' ') 
  b = funGenerate() 
  print(next(b),next(b),next(b)) 
 
''''' 
输出 
1 2 3 1 2 3 
'''

希望本文所述对大家Python程序设计的学习有所帮助。

Python 相关文章推荐
深入理解Python中各种方法的运作原理
Jun 15 Python
Python实现简单拆分PDF文件的方法
Jul 30 Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
Python第三方库的安装方法总结
Jun 06 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
Python中装饰器高级用法详解
Dec 25 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
python中_del_还原数据的方法
Dec 09 Python
跟老齐学Python之有容乃大的list(3)
Sep 15 #Python
跟老齐学Python之有容乃大的list(2)
Sep 15 #Python
跟老齐学Python之有容乃大的list(1)
Sep 14 #Python
跟老齐学Python之一个免费的实验室
Sep 14 #Python
跟老齐学Python之从if开始语句的征程
Sep 14 #Python
跟老齐学Python之眼花缭乱的运算符
Sep 14 #Python
跟老齐学Python之玩转字符串(3)
Sep 14 #Python
You might like
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
实用函数5
2007/11/08 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
python中redis的安装和使用
2016/12/04 Python
Django model反向关联名称的方法
2018/12/15 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
基于Python的PIL库学习详解
2019/05/10 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
通过代码实例了解Python异常本质
2020/09/16 Python
Django返回HTML文件的实现方法
2020/09/17 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
联想德国官网:Lenovo Germany
2018/07/04 全球购物
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
VC++笔试题
2014/10/13 面试题
委托书样本
2014/04/02 职场文书
出国留学担保书
2014/05/20 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
先进个人推荐材料
2014/12/29 职场文书
黄石寨导游词
2015/02/05 职场文书
装修安全责任协议书
2016/03/22 职场文书