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中的自定义函数学习笔记
Sep 23 Python
Python使用百度API上传文件到百度网盘代码分享
Nov 08 Python
Python实现获取某天是某个月中的第几周
Feb 11 Python
tornado 多进程模式解析
Jan 15 Python
TensorFlow实现Batch Normalization
Mar 08 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
Keras-多输入多输出实例(多任务)
Jun 22 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
python用Configobj模块读取配置文件
Sep 26 Python
教你使用pyinstaller打包Python教程
May 27 Python
 Python 中 logging 模块使用详情
Mar 03 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 ci框架验证码实例分析
2013/06/26 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
如何快速上手Vuex
2017/02/14 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python实现发送email的几种常用方法
2014/08/18 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
分析经典Python开发工程师面试题
2019/04/08 Python
windows下python安装pip方法详解
2020/02/10 Python
python db类用法说明
2020/07/07 Python
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
党支部承诺书范文
2014/03/28 职场文书
创先争优活动个人总结
2015/03/04 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
Python实现双向链表
2022/05/25 Python
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技