1、简单定制

     a、使用time模块的localtime方法获取时间

  b、time.localtime返回struct_time的时间格式

  c、表现你的类:__str__和__repr__

  注:当属性名与方法名同名时,默认属性名覆盖方法名

    

  1. import time as t
  2.  
  3. class MyTimer():
    def __init__(self):
    self.begin = 0
    self.end = 0
    self.lasted = []
    self.prompt = "未运行"
    self.unit = ["年","月", "天", "小时", "分钟", "秒"]
  4.  
  5. # 重写__str__和__repr__方法
    def __str__(self):
    return self.prompt
    __repr__ = __str__
  6.  
  7. #定义add函数,计算运行总时间
    def __add__(self, other):
    result = []
    prompt = "总共运行了"
    for i in range(6):
    result.append(self.lasted[i]+other.lasted[i])
    if result[i]:
    prompt += (str(result[i])+self.unit[i])
    return prompt
    #开始计时
    def start(self):
    self.begin = t.localtime()
    self.prompt = "提示:请先调用stop()停止计时!"
    print("计时开始...")
    # 停止计时
    def stop(self):
    if not self.begin:
    print("提示:请先调用start()开始计时!")
    else:
    self.end = t.localtime()
    print("计时结束...")
    #定义内部方法,用于计算时间差
    def __calc__(self):
    self.lasted = []
    self.prompt = "总共运行了"
    for i in range(6):
    self.lasted.append(self.start[i] - self.stop[i])
    if self.lasted[i]:
    self.prompt += (str(self.lasted[i])+self.unit[i])
    #为下一轮计时初始化变量
    self.begin = 0
    self.end = 0
    t1 = MyTimer()
    t1.start()
    t1.stop()
    print(t1)

 2、定制序列

  协议(Protocols):与其他编程语言中的接口很相似,规定哪些方法必须定义。

  容器类型的协议:

    a、如果希望定制的容器是不可变的话,只需要定义__len__()和__getitem__()方法。

    b、如果希望定制的容器是可变的话,除了__len__()和__getitem__()方法,还要定义  __setitem__()和__delitem__()方法。

  

  #把类定义成一个容器
  class CountList:
    def __init__(self, *args):
      self.values = [x for x in args] #将用户传入的参数存放到列表中
      self.count = {}.fromkeys(range(len(self.values)), 0) #记录用户传入参数被访问的次数
    def __len__(self):
      return len(self.values)
    def __getitem__(self, key):
      self.count[key] += 1 #计数器加1
      return self.values[key]
  c1 = CountList(1, 3, 5, 7, 9)
  c2 = CountList(2, 4, 6, 8, 10)
  print(c1[1])
  print(c2[1])
  print(c1[2] + c2[1])
  print(c1.count)
  print(c2.count)

3、迭代器

  a、iter()

    __iter__()

  b、next()

    __next__()

  

  string = "加油吧"
  #方法一:迭代输出元素
  it = iter(string)
  while True:
    try:
      each = next(it)
    except StopIteration:
      break
    print(each)
  #方法二:for循环输出元素
  for i in string:
    print(i)

  

上述迭代器如果不加限制的话,会无限迭代下去,改进代码如下:

  

4、生成器(yield):生成器其实就是迭代器的一种实现

  协同程序:就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始。

  yield和var不同,不是用来声明,但是和return一样,用来告知程序某种状态,return告诉程序要返回什么值(也意味着结束,结束的时候才会返回值嘛),而yield告诉程序当前的状态值,而且你运行到这里给我暂停一下。

  一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。

  

  

 生成器实现斐波那契数列:

    

5、列表推导式

  #列表推导式
  #求出100以内能被2整除,不能被3整除的数
  a = [i for i in range(100) if not (i % 2) and (i % 3)]
  print(a)

6、字典推导式

  #字典推导式
  #返回10以内的数字是否为偶数
  b = {i : i % 2 == 0 for i in range(10)}
  print(b)

7、集合推导式

  

8、生成器推导式

  

  

9、生成器推导式元素求和

  #使用生成器求10以内的奇数和
  s = sum(i for i in range(100) if i % 2)
  print(s)

python定制的更多相关文章

  1. Python定制类(进阶6)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6411919.html 本文出自:[Edwin博客园] Python定制类(进阶6) 1. python中什么 ...

  2. python定制类(1):__getitem__和slice切片

    python定制类(1):__getitem__和slice切片 1.__getitem__的简单用法: 当一个类中定义了__getitem__方法,那么它的实例对象便拥有了通过下标来索引的能力. c ...

  3. python定制后处理云图

    用后处理软件处理的云图会出现这样或那样的不满意,其实我们可以将求解数据导出以后,借助python定制云图. 我们以fluent为例 求解完成之后,我们将我们需要做云图的物理量以ASCII导出 如下的p ...

  4. 520,用Python定制你的《本草纲目女孩》

    摘要:让我们来用Python定制出心仪的"本草纲目女孩",敲出魔性的代码舞蹈,520,准备好心仪女孩的舞蹈视频,把这份别出心裁的礼物给TA 本文分享自华为云社区<[云驻共创] ...

  5. python 定制类

    看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让cla ...

  6. Python - 定制pattern的string模板(template) 具体解释

    定制pattern的string模板(template) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28625179 ...

  7. 使用Python定制词云

    一.实验介绍 1.1 实验内容 在互联网时代,人们获取信息的途径多种多样,大量的信息涌入到人们的视线中.如何从浩如烟海的信息中提炼出关键信息,滤除垃圾信息,一直是现代人关注的问题.在这个信息爆炸的时代 ...

  8. python定制类详解

    1.什么是定制类python中包含很多内置的(Built-in)函数,异常,对象.分别有不同的作用,我们可以重写这些功能. 2.__str__输出对象 class Language(object): ...

  9. Python定制容器

    Python 中,像序列类型(如列表.元祖.字符串)或映射类型(如字典)都是属于容器类型,容器是可定制的.要想成功地实现容器的定制,我们需要先谈一谈协议.协议是什么呢?协议(Protocols)与其他 ...

  10. Python定制化天气预报消息推送

    sansui-Weather 代码码云 介绍 定制化天气预报消息推送(练手小脚本) Python脚本实现天气查询应用,提醒她注意保暖! 功能介绍 天气信息获取 当天天气信息提示 第二天天气信息提示 网 ...

随机推荐

  1. sparse matrix

    w https://en.wikipedia.org/wiki/Sparse_matrix 稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB - Bin的专栏 - 博客园ht ...

  2. Docker Metasploit Framework

    https://hub.docker.com/r/usertaken/metasploit-framework/ docker pull usertaken/metasploit-framework ...

  3. JSP页面获取下来框select选中项的值和文本的方法

    <select id="username"  name=""> <option   value="1">jyy< ...

  4. 涉及到复制和二进制日志中的选项和变量-Replication and Binary Logging Options and Variables

    在搭建复制中,有些参数需要我们留意,在这里罗列出来,供大家参考一下,以GTID为基础 --server-id server-id:这是一个全局的可动态调整的变量,取值范围为0-4294967295,也 ...

  5. Facebook内部高效工作PPT指南(转)

    add by zhj: 其实好几条说的是“时间管理四象限”,如下图.对于自己来说,需要做的是两类事:重要且紧急,重要但不紧急. 第一类事情要立即去做:第二类事情,往往是花时间比较多的,比如锻炼身体,维 ...

  6. 约束、自定义异常、hashlib模块、logging日志模块

    一.约束(重要***) 1.首先我们来说一下java和c#中的一些知识,学过java的人应该知道,java中除了有类和对象之外,还有接口类型,java规定,接口中不允许在方法内部写代码,只能约束继承它 ...

  7. android自定义控件(四)坐标系

    1.局部坐标系(Local Coordinate) 所谓本地坐标系,就是坐标系以物体的中心为坐标原点,物体旋转.平移等操作都是围绕局部坐标系进行的.这时当物体模型进行旋转.平移等操作时, 局部坐标系也 ...

  8. 教你管理SQL实例系列(1-15)

    全系列转自:51CTO ->jimshu http://jimshu.blog.51cto.com 目录及原本连接如下: 教你管理SQL实例(1)数据库实例 教你管理SQL实例(2)服务启动帐户 ...

  9. 深度学习:Keras入门(二)之卷积神经网络(CNN)(转)

    转自http://www.cnblogs.com/lc1217/p/7324935.html 1.卷积与神经元 1.1 什么是卷积? 简单来说,卷积(或内积)就是一种先把对应位置相乘然后再把结果相加的 ...

  10. 剑指offer 面试50题

    面试50题: 题目:第一个只出现一次的字符 题:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置. 解题思路一:利用Python特 ...