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 17 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
python如何建立全零数组
Jul 19 Python
详解Python yaml模块
Sep 23 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
Python实现简单的2048小游戏
Mar 01 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)四
2006/10/09 PHP
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
javascript RadioButtonList获取选中值
2009/04/09 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
详解JavaScript树结构
2017/01/09 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
Python中使用中文的方法
2011/02/19 Python
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
考试作弊被抓检讨书
2014/01/10 职场文书
安全环保标语
2014/06/09 职场文书
庆六一宣传标语
2014/10/08 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
爱心捐书倡议书
2015/04/27 职场文书
初中班干部工作总结
2015/08/10 职场文书
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
Java线程的6种状态与生命周期
2022/05/11 Java/Android
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技