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

作者:shichen2014 时间:2021-09-07 22:05:22 

本文实例讲述了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
0
投稿

猜你喜欢

  • Python批量对word文档进行操作步骤

    2022-07-24 03:37:36
  • 如何利用Python写猜数字和字母的游戏

    2021-01-28 00:00:09
  • php strftime函数的详细用法

    2023-06-07 19:09:37
  • vue组件watch属性实例讲解

    2024-05-09 15:19:22
  • python OpenCV学习笔记

    2022-12-19 05:39:11
  • 解读ASP.NET 5 & MVC6系列教程(6):Middleware详解

    2023-07-23 22:27:34
  • 网页中的平衡、对比、连贯和留白

    2008-11-24 12:11:00
  • Python自动化办公之图片转PDF的实现

    2023-07-24 21:29:07
  • 基于vue实现swipe分页组件实例

    2024-04-30 10:30:56
  • 教你在MySQL 5.0以上版本中配置主从库

    2009-01-04 13:17:00
  • python+pytest自动化测试函数测试类测试方法的封装

    2021-12-26 21:03:14
  • go Cobra命令行工具入门教程

    2023-06-24 18:27:12
  • JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)

    2013-08-09 10:14:56
  • python多线程socket编程之多客户端接入

    2021-01-26 10:14:52
  • 新手入门学习python Numpy基础操作

    2023-10-08 07:46:27
  • MySQL数据库事务隔离级别详解

    2024-01-26 12:34:03
  • 漫谈前端开发中的团队合作

    2009-02-05 21:02:00
  • html注释书写规范

    2008-08-13 13:06:00
  • oracle表空间表分区详解及oracle表分区查询使用方法

    2024-01-14 19:42:14
  • python使用递归的方式建立二叉树

    2021-07-07 23:47:18
  • asp之家 网络编程 m.aspxhome.com