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进程通信之匿名管道实例讲解
Apr 11 Python
深入解析Python中的urllib2模块
Nov 13 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 Python
python如何实现一个刷网页小程序
Nov 27 Python
windows下numpy下载与安装图文教程
Apr 02 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
keras自定义回调函数查看训练的loss和accuracy方式
May 23 Python
详解python tkinter 图片插入问题
Sep 03 Python
python 多线程爬取壁纸网站的示例
Feb 20 Python
浅谈Python数学建模之固定费用问题
Jun 23 Python
请求模块urllib之PYTHON爬虫的基本使用
Apr 08 Python
Python各协议下socket黏包问题原理
Apr 12 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判断网页是否gzip压缩
2013/06/25 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
javascript如何写热点图
2015/12/08 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
python读取Excel表格文件的方法
2019/09/02 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
tensorflow 环境变量设置方式
2020/02/06 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
银行实习生自我鉴定范文
2013/09/19 职场文书
教师专业自荐书范文
2014/02/10 职场文书
什么是就业协议书
2014/04/17 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
社区服务活动小结
2014/07/08 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
五年级下册复习计划
2015/01/19 职场文书
碧霞祠导游词
2015/02/09 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
python实现语音常用度量方法的代码详解
2021/05/25 Python
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers