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实现爬虫下载漫画示例
Feb 16 Python
Python3使用SMTP发送带附件邮件
Jun 16 Python
Python中类的创建和实例化操作示例
Feb 27 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
python提取照片坐标信息的实例代码
Aug 14 Python
Python使用configparser库读取配置文件
Feb 22 Python
pycharm实现print输出保存到txt文件
Jun 01 Python
详解pycharm配置python解释器的问题
Oct 15 Python
python爬虫scrapy图书分类实例讲解
Nov 23 Python
python 基于opencv实现图像增强
Dec 23 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 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 md5下16位和32位的实现代码
2008/04/09 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
PHP反射API示例分享
2016/10/08 PHP
JavaScript 拖拉缩放效果
2008/12/10 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
浅谈javascript中的Function和Arguments
2016/08/30 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
深入探究node之Transform
2017/07/20 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
python数据结构之链表的实例讲解
2017/07/25 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
Python装饰器用法实例总结
2018/05/26 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
Python argparse模块应用实例解析
2019/11/15 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
pytorch SENet实现案例
2020/06/24 Python
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
自荐信格式
2013/12/01 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
企业管理毕业生求职信
2014/03/11 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
员工加薪申请报告
2015/05/15 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
MySQL transaction事务安全示例讲解
2022/06/21 MySQL
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL