deque双端队列

#双端队列,就是生产消费者模式,依赖collections模块

from collections import deque

def main():
info = deque(("hello", "word")) # 内部是序列
info.append(("百度一下")) # 右边添加数据
info.appendleft("www.baidu.com") # 左边添加数据
print("【队列数据】:",info)
print("----开始弹出数据------")
print(info.pop())
print(info.popleft())
print("------弹出完毕--------")
print(info) main()
"""
【队列数据】: deque(['www.baidu.com', 'hello', 'word', '百度一下'])
----开始弹出数据------
百度一下
www.baidu.com
------弹出完毕--------
deque(['hello', 'word'])
"""

heapq堆

# 堆是基于二叉树实现的。最大特点是里面的数据是有序的,同时是中序遍历获取
# 堆中存放的内容,基于二叉树存储,可以方便的实现排序后的数据获取
import heapq def f():
data = list(range(10))
print("定义列表:", data)
heapq.heapify(data) # 基于迭代对象创建一个堆
heapq.heappush(data, 0)# 进行数据的保存
print("原始堆数据:", data) #自动对原列表进行更新
print("获取堆中前2个最大数据:", heapq.nlargest(2, data))
print("获取堆中前3个最xiao数据:", heapq.nsmallest(3, data)) f()
"""
定义列表: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
原始堆数据: [0, 0, 2, 3, 1, 5, 6, 7, 8, 9, 4]
获取堆中前2个最大数据: [9, 8]
获取堆中前3个最xiao数据: [0, 0, 1]
"""

enum枚举

# 定义可用数据的范围

import enum

@enum.unique  #使用装饰器,防止数据重复,如果重复,运行就会报错:duplicate values

class Color_Base(enum.Enum):  # 必须强制继承父类
red = 0
green = 1
blue = 2 if __name__ == '__main__':
c = Color_Base.blue # 直接通过枚举,获取所需要的一个对象
print("枚举对象名称:{},枚举对象类型:{}".format(c.name, c.value))
#枚举对象名称:blue,枚举对象类型:2

上下文管理with

自定义实现

class Message:
class Connect:
def build(self):
print("开始连线好友。。。")
return True
def close(self):
print("已经断开消息链接。") def send(self, info):
try:
conn = Message.Connect()
if conn.build():
print("正在发送消息:", info)
else:
print("出问题了。")
except Exception as e:
print("消息延迟:", e)
finally:
conn.close()
print("=====通话完成====") if __name__ == '__main__':
m = Message()
m.send("百度一下")
m.send("www.baidu.com")
"""
开始连线好友。。。
正在发送消息: 百度一下
已经断开消息链接。
=====通话完成====
开始连线好友。。。
正在发送消息: www.baidu.com
已经断开消息链接。
=====通话完成====
"""

with实现

# with关键词,管理上下文,上下文开启,上下文退出

class Message:
class Connect:
def build(self):
print("开始连线好友。。。")
return True
def close(self):
print("已经断开消息链接。")
def __enter__(self):
print("=====with语句开始执行=====")
self.conn = Message.Connect()
if not self.conn.build():
print("建立通话失败。")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("=====with语句结束了=======")
self.conn.close()
def send(self, info):
print("正在发送消息:", info) if __name__ == '__main__':
with Message() as me:
me.send("谷歌")
me.send("www.google.com")
"""
=====with语句开始执行=====
开始连线好友。。。
正在发送消息: 谷歌
正在发送消息: www.google.com
=====with语句结束了=======
已经断开消息链接。
"""

上下文管理contextlib

# 使用contextlib模块,进行上下文管理

from contextlib import contextmanager
class Message:
def send(self, info):
print("消息发送中")
@contextmanager
def message_wrap():
class __Connect:
def build(self):
print("connect:建立网络连接")
return False def close(self):
print("connect:关闭网络连接")
try:
conn = __Connect()
if conn.build():
yield Message() #获取下一个实例 else:
yield None
except Exception as e:
print("except连接异常:", e)
finally:
conn.close()
if __name__ == '__main__':
with message_wrap() as m:
m.send("www.baidu.com")
"""
connect:建立网络连接
except连接异常: 'NoneType' object has no attribute 'send'
connect:关闭网络连接
"""

自动关闭功能实现

from contextlib import contextmanager,closing
class Connect:
def __init__(self):
print("connect:开始建立连接")
def send(self, info):
print("消息发送中")
def close(self):
print("connect:关闭网络连接") if __name__ == '__main__':
with closing(Connect()) as c: #自动关闭功能支持
print("消息发送:www.baidu.com") """
消息发送:www.baidu.com
connect:关闭网络连接
"""

Python入门-程序结构扩展的更多相关文章

  1. Python入门-程序测试

    1.功能测试 常规测试 #常规测试代码,一个模块写功能,一个模块调用功能 #=============模块1:gongneng_ceshi def func(v1, v2): return v1* v ...

  2. Python基本程序结构

    条件判断: 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:

  3. Python的程序结构[7] -> 生成器/Generator -> 生成器浅析

    生成器 / Generator 目录 关于生成器 生成器与迭代器 生成器的建立 通过迭代生成器获取值 生成器的 close 方法 生成器的 send 方法 生成器的 throw 方法 空生成器的检测方 ...

  4. Python的程序结构[0] -> 属性/Property[0] -> 类属性、实例属性和私有属性

    类属性.实例属性和私有属性 Python中类的属性主要包括类属性,实例属性和私有属性,下面是对三种属性的简单介绍 类属性 / Class Property 类属性在__init__()之外初始化,在外 ...

  5. Python的程序结构[1] -> 方法/Method[0] -> 类实例方法、私有方法和抽象方法

    类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- ...

  6. Python的程序结构[1] -> 方法/Method[1] -> 静态方法、类方法和属性方法

    静态方法.类方法和属性方法 在 Python 中有三种常用的方法装饰器,可以使普通的类实例方法变成带有特殊功能的方法,分别是静态方法.类方法和属性方法. 静态方法 / Static Method 在 ...

  7. Python的程序结构[1] -> 方法/Method[2] -> 魔术方法 __init__ / __del__ / __new__

    魔术方法 / Magic Method 魔法方法就是可以给你的类增加魔力的特殊方法(实质应称为特殊方法,魔术方法在JavaScript中有所体现,对象具有不透明特性,而且无法在自定义对象中模拟这些行为 ...

  8. Python的程序结构[2] -> 类/Class[0] -> 类的特殊属性

    类的特殊属性 / Special Property of Class Python 中通过 class 进行类的定义,类可以实例化成实例并利用实例对方法进行调用. 类中还包含的一些共有的特殊属性. 特 ...

  9. Python的程序结构[2] -> 类/Class[1] -> 基类与继承

    基类与继承 / Base Class and Inheritance Class 面向对象的特性使得 Python 中不可避免地需要使用到类和类的继承,类的继承可以使得代码很好的被重用.下面以一些代码 ...

随机推荐

  1. 使用Vscode和Cmake打造跨平台的C++ IDE

    准备工作 Viusal Studio Code 64位 :Download Visual Studio Code - Mac, Linux, Windows Cmake 3.4 :Download | ...

  2. CentOS 8 网卡命令使用

    之前一直用CENTOS7中service来重启网卡,但是换成CENTOS8后centos8的网卡服务与centos7有所不同,无法通过systemctl或者service命令重启网卡.centos8网 ...

  3. System x 服务器制作ServerGuide U盘安装Windows Server 2012 R2操作系统

    以下内容来源于:联想官方知识库  http://iknow.lenovo.com.cn/detail/dc_154773.html 本例介绍以U盘方式,通过ServerGuide引导在System x ...

  4. 监督学习,无监督学习常用算法集合总结,引用scikit-learn库(监督篇)

    why写这篇blog 最近在接触这方面的知识,但是找了许多的笔记,都感觉没有很好的总结出来,也正好当做是边学习,边复习着走.大佬轻喷.参考书目<python机器学习基础教程> 将分别从以下 ...

  5. Java基础——抽象类

    一.概述: 在Java中,一个没有方法体的方法应定义为抽象方法在public 修饰符后加 abstract修饰符,而类中如果有抽象方法,该类必须定义为抽象类在public 修饰符后加 abstract ...

  6. Java案例之评委打分

    /* 案例:评委打分,六个或者更多个评委打分,去到一个最高分,一个最低分,求其他评委的平均值(当评委数量发生改变时不需要进行二次修改) 需求:定义一个数组,长度为6,循环获取输入的数据 定义方法获取数 ...

  7. 解决使用DBeaver连接MySQL时报错-The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.

    解决使用DBeaver连接MySQL时报错,其实提示很明显. The server time zone value '�й���׼ʱ��' is unrecognized or represents ...

  8. python练习册 每天一个小程序 第0002题

    1 #-*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型 ...

  9. Flink不止于计算,存算一体才是未来

    ​ "伴随着实时化浪潮的发展和深化,Flink 已逐步演进为实时流处理的领军技术和事实标准.Flink 一方面持续优化其流计算核心能力,不断提高整个行业的流计算处理标准,另一方面沿着流批一体 ...

  10. windows配置jdk环境变量、mysql环境变量、tomcat环境变量、maven环境变量、git环境变量、node环境变量

    一.windows配置各种环境变量后 path 路径下的目录: 二.windows 配置各种环境变量的目的: 为windows系统添加上各种环境对应的命令 举例,为什么要添加jdk的bin目录,是因为 ...