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生成随机密码
Mar 10 Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
Java及python正则表达式详解
Dec 27 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
Python常用模块函数代码汇总解析
Aug 31 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 Python
Pycharm中如何关掉python console
Oct 27 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 Python
Python的scikit-image模块实例讲解
Dec 30 Python
Python中使用subprocess库创建附加进程
May 11 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
拖动一个HTML元素
2006/12/22 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
javascript的BOM汇总
2015/07/16 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
讲解Python中运算符使用时的优先级
2015/05/14 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
python机器学习实现决策树
2019/11/11 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
关于Python错误重试方法总结
2021/01/03 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
三分钟演讲稿范文
2014/04/24 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
《风筝》教学反思
2016/02/23 职场文书
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA