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的源码浅要剖析Python的内存管理
Apr 16 Python
Python3.2中Print函数用法实例详解
May 19 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
python支持多线程的爬虫实例
Dec 21 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
python实现简单遗传算法
Sep 18 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 Python
Python实现疫情地图可视化
Feb 05 Python
python开发制作好看的时钟效果
May 02 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
php调用mysql数据 dbclass类
2011/05/07 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python最基本的输入输出详解
2015/04/25 Python
python实现顺时针打印矩阵
2019/03/02 Python
python二维键值数组生成转json的例子
2019/12/06 Python
python datetime处理时间小结
2020/04/16 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
军训考核自我鉴定
2014/02/13 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
死亡证明书样本说明
2014/10/18 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
模范教师材料大全
2014/12/16 职场文书
村官个人总结范文
2015/03/03 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
施工安全保证书
2015/05/09 职场文书
贷款工资证明范本
2015/06/12 职场文书
2016年记者节感言
2015/12/08 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书