Python专用方法与迭代机制实例分析

本文实例讲述了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程序设计的学习有所帮助。

(0)

相关推荐

  • python的迭代器与生成器实例详解

    本文以实例详解了python的迭代器与生成器,具体如下所示: 1. 迭代器概述:   迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.   1.1 使用迭代器的优点   对于原生支持随机访问的数据结构(如tuple.list),迭代器和经典for循环的索引访问相比并无优势,反而丢失了索引值(可以使用内建函数enumerate()找回这个索引值).但对于无法随机访问的数据结构(比

  • Python迭代用法实例教程

    本文实例讲述了Python中迭代的用法,是一个非常实用的技巧.分享给大家供大家参考借鉴之用.具体分析如下: 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration). 在Python中,迭代是通过for ... in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代码: for (i=0; i<list.length; i++) { n = list[i]; } 可以看出,Python的f

  • python迭代器的使用方法实例

    什么是迭代器? 迭代器是带有next方法的简单对象,当然也要实现__iter__函数.迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常.python中有很多的对象都是迭代器,例如:列表,元素,字符串,文件,映射,集合 如何使用迭代器? 1. for 变量 in 可迭代对象 复制代码 代码如下: list1 = [1,2,3,4,5] for ele in list1:    print ele, 结果为:1 2 3 4 5 2. if 变量

  • python中迭代器(iterator)用法实例分析

    本文实例讲述了python中迭代器(iterator)用法.分享给大家供大家参考.具体如下: #--------------------------------------- # Name: iterators.py # Author: Kevin Harris # Last Modified: 03/11/04 # Description: This Python script demonstrates how to use iterators. #----------------------

  • python计算牛顿迭代多项式实例分析

    本文实例讲述了python计算牛顿迭代多项式的方法.分享给大家供大家参考.具体实现方法如下: ''' p = evalPoly(a,xData,x). Evaluates Newton's polynomial p at x. The coefficient vector 'a' can be computed by the function 'coeffts'. a = coeffts(xData,yData). Computes the coefficients of Newton's po

  • python使用三角迭代计算圆周率PI的方法

    本文实例讲述了python使用三角迭代计算圆周率PI的方法.分享给大家供大家参考.具体如下: 方法1: 复制代码 代码如下: # Calculating PI using trigonometric iterations # FB36 - 20130825 import math x = 1.0 y = 1.0 z = 1.0 w = 1.0 v = 1.0 u = 1.0 for i in range(30):       x = math.sin(x) + x     y = math.co

  • Python中对象迭代与反迭代的技巧总结

    一.如何实现可迭代对象和迭代器对象? 实际案例 某软件要求从网络抓取各个城市气味信息,并其次显示: 北京: 15 ~ 20 天津: 17 ~ 22 长春: 12 ~ 18 ...... 如果一次抓取所有城市天气再显示,显示第一个城市气温时,有很高的延时,并且浪费存储空间,我们期望以用时访问的策略,并且把所有城市气温封装到一个对象里,可用for语句进行迭代,如何解决? 解决方案 实现一个迭代器对象Weatherlterator,next方法每次返回一个城市气温,实现一个可迭代对象Weatherlt

  • 深入讲解Python中的迭代器和生成器

    在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的,就要了解一下迭代器相关的知识了. 迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法.其中__iter__()方法返回迭代器对象本身:next()方法返回容器的下一个元素,在结尾时引发StopIteration异常. __iter__()和next()

  • 深入解析Python中的list列表及其切片和迭代操作

    有序列表list >>> listTest = ['ha','test','yes'] >>> listTest ['ha', 'test', 'yes'] len()获取list元素个数. >>> len(listTest) 3 可以用索引来访问每一个元素,0表示第一个,-1还可以表示最后一个,即倒数第一个,依此类推-2表示倒数第二个,超过了也会报越界错误. >>> listTest[0] 'ha' >>> lis

  • 跟老齐学Python之让人欢喜让人忧的迭代

    哦,这就是真正牛X的程序员.不过,他也仅仅是牛X罢了,还不是大神.大神程序员是什么样儿呢?他是扫地僧,大隐隐于市. 先搞清楚这些名词再说别的: 循环(loop),指的是在满足条件的情况下,重复执行同一段代码.比如,while语句. 迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项.比如,for语句. 递归(recursion),指的是一个函数不断调用自身的行为.比如,以编程方式输出著名的斐波纳契数列. 遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且

随机推荐