流畅的Python笔记(一)—python的数据模型及python风格的纸牌

关于RT-Thread中PWM无法正常输出的学习 按照官方的PWM配置,并没有输出PWM,网上有比较多的办法,试了很多,有些还是不能实现输出,这里做个记录。记录自己完成PWM输出的过程,以及修改的地方。 关于STM32CubeMX配置就不多说了,网上有很多。 首先必定是按照流程来,一定一定按照流程来!!! 需要注意的是加上通道数!!!! 这是流程上没有的,也是RTT的一点小BUG吧 配上board.c中添加的代码,我用的是PA2定时2的通道3,需要使用的朋友修改对应定时器和GPIO! void HAL_TIM_Base_MspInit(TIM_Han 阅读详情

流畅的Python总览

第一部分 序幕

通过特殊方法,实现一个 13*4 52张的纸牌。

第二部分 数据结构

列表、字典和集合、文本和字节序列,用于放置数据的序列,包括了容器序列(list、tuple、collections.depue,可放置任何类型对象的引用)、扁平序列(基础类型:字符、字节、数值)

第三部分 把函数视作对象

将函数作为一等对象使用。python基础函数(高阶函数、匿名函数、函数式编程)、策略模式与命令模式实现的代码简化、函数的装饰器与闭包的实现。

第四部分 面向对象惯用法

从以下章节(对象引用、可变性和垃圾回收、符合python风格的对象、序列的修改、散列和切片、接口:从协议到抽象基类、继承的优缺点、正确重载运算符)讲解了引用(reference)的原理、“可变性”的概念、实例的生命周期、如何构建自定义的集合类型和ABC、多重继承该怎么理顺、什么时候应该使用操作符重载及其方法。

第五部分 控制流程

通过章节(可迭代的对象、迭代器和生成器、上下文管理器和 else 块、协程、使用期物处理并发、 使用 asyncio 包处理并发),介绍除去如条件判断、循环和子程序之类的顺序控制流程外,如何通过生成器(generator)、上下文管理器(context manager)和协程(coroutine)来介绍这些控制流程的构造,以及处理并发性(collections.futures)和面向事件的 I/O (asyncio)这些类库。

第六部分 元编程

通过动态属性和特性、属性描述符、类元编程,介绍到如何动态创建带属性的类,用以处理诸如JSON 这类半结构化的数据。

本章主要记录 第一部分 序幕,也就是第一章 python数据模型。

python数据模型

python 3.9 文档关于数据模型的介绍,篇幅较长:数据模型

python的魔法方法

介绍了python的魔术方法, 它们经常是两个下划线包围来命名的(比如__init__ , __lt__, __len__). 这些特殊方法是为了被python解释器调用的, 这些方法会注册到他们的类型中方法集合中, 相当于为cpython提供抄近路. 这些方法的速度也比普通方法要快, 当然在自己不清楚这些魔术方法的用途时, 不要随意添加。

关于字符串的表现形式是两种, __str__与__rep__ . python的内置函数 repr 就是通过 __repr__这个特殊方法来得到一个对象的字符串表示形式. 这个在交互模式下比较常用, 如果没有实现 __repr__ , 当控制台打印一个对象时往往是 <A object at 0x000> . 而 __str__ 则是 str() 函数时使用的, 或是在 print 函数打印一个对象的时候才被调用, 终端用户友好。

两者还有一个区别, 在字符串格式化时, “%s” 对应了 __str__ . 而 “%r” 对应了 __repr__. __str__和 __repr__ 在使用上比较推荐的是,前者是给终端用户看,而后者则更方便我们调试和记录日志

python风格代码实现的纸牌

import collections 
Card = collections.namedtuple('Card',['rank','suit'])
class FrenchDeck:
    ranks = [str(n) for n in range(2,11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()
        
    def __init__(self):
        self._cards = [Card(rank,suit) for suit in self.suits for rank in self.ranks ]
        
    def __len__(self):
        return len(self._cards)
        
    def __getitem__(self,position):
        return self._cards[position]
  • collections.namedtuple
    Python 2.6 开始,namedtuple 就加入到 Python 里,用以构建只有少数属性但是没有方法的对象。如以上代码构建了类名为:Card,属性包含:rank 、suit的一个简单类。
  • __ getitem__ 方法
    因为__ getitem__ 方法把 [] 操作交给了 self._cards 列表,然后就把这个[]索引操作给设定下来了,因为self._cards是列表,所以列表支持索引、支持反向索引、还支持迭代 如果没有实现这个方法就会报错:‘FrenchDeck’ object does not support indexing
  • 随机抽牌 random.choice
    >>> from random import choice
	>>> choice(deck)
	Card(rank='3', suit='hearts')
	>>> choice(deck)
	Card(rank='K', suit='spades')
	>>> choice(deck)
	Card(rank='2', suit='clubs')

纸牌排序

import collections 
Card = collections.namedtuple('Card',['rank','suit'])

# 定义花色大小
suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)

class FrenchDeck:
    ranks = [str(n) for n in range(2,11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()
        
    def __init__(self):
        self._cards = [Card(rank,suit) for suit in self.suits for rank in self.ranks ]
        
    def __len__(self):
        return len(self._cards)
        
    def __getitem__(self,position):
        return self._cards[position]

    # 排序函数
    def spades_high(card):
		rank_value = FrenchDeck.ranks.index(card.rank)
		return rank_value * len(suit_values) + suit_values[card.suit]
  • 纸牌排序
    FrenchDeck 是不能洗牌的,因为这摞牌是不可变的(immutable):卡牌和它们的位置都是固定的,除非我们破坏这个类的封装性,直接对 _cards 进行操作。

个人博客:Loak 正 - 关注人工智能及互联网的个人博客
文章地址:流畅的Python笔记(一)—python的数据模型及python风格的纸牌

谷粒商城篇章9 ---- P248-P261/P292-P294 ---- 消息队列【分布式高级篇六】 RabbitMQ消息队列、RabbitMQ延时队列。 阅读详情

相关推荐

Dify视觉模型节点避坑指南:我用Qwen2.5-VL做OCR识别时踩过的3个坑(及解决方案)

本文分享了使用Dify平台和Qwen2.5-VL视觉模型进行OCR票据识别时遇到的三个常见问题及解决方案,包括文件变量传递、结构化输出和条件分支判断失效。通过实战经验,帮助开发者优化多模态模型在财务自动化中的应用,提升OCR识别精度和效率。

weixin_29284885的博客 407

java wrapper作用_java Wrapper类基本用法详解

在封装中有一种特殊的类,能够把基本的数据类型进行转换来方便实际的使用。我们在之前提到的一些数据类型,最明显的特征是所有字母为小写状态,那么经过Wrapper的包装后,首字母就变成了大写。下面我们就这种特殊的封装类Wrapper的概念、转换图解、模式以及实例带来分享。1.概念wrapper类是在Java中创建对象引用类型的原始类型的方式。我们可以说,通过提供wrapper类,使Java在面向对象技术...

weixin_34856548的博客 2008

从标准到实战:详解IEC 61000-4-2下的ESD电路防护设计

本文深入解析IEC 61000-4-2标准下的ESD电路防护设计,从静电防护的基础原理到实战应用。详细介绍了接触放电与空气放电的区别、防护器件选型要点(如TVS管和压敏电阻)以及PCB布局的黄金法则,帮助工程师有效提升电子产品的抗静电能力,确保设备在严苛环境下的稳定运行。

weixin_33704234的博客 512

MyBatis-Plus:条件构造器Wrapper

MyBatis-Plus的Wrapper是一个强大的条件构造器,用于构建MyBatis中的SQL语句中的WHERE条件,提供了多种不同的Wrapper实现,提供了多种不同的Wrapper实现。,总之,MyBatis-Plus的Wrapper是一个非常强大、灵活、易用的条件构造器,可以大大简化MyBatis中SQL语句的构建过程,提高开发效率。

拾一二的博客 2万+

目标检测中的困难样本挖掘:YOLOv5训练效果提升30%的秘诀

本文深入探讨了目标检测中困难样本挖掘的关键技术,特别是如何通过在线困难样本挖掘(OHEM)策略显著提升YOLOv5模型的性能。文章详细解析了困难样本的分类、识别机制及实战配置,并提供了数据标注策略与增强技巧,最终实现模型性能提升30%的突破。

weixin_30379531的博客 402

【LPDDR4 - 学习二】LPDDR4 介绍 ——LPDDR4 芯片引脚说明解析

本文系统解析了LPDDR4内存芯片的引脚定义与特性,重点介绍了272球POPFBGA封装的双通道架构。内容涵盖电源管理(三级供电架构与上电时序)、控制信号(差分时钟与复用命令总线)、数据接口(16位双向数据总线与选通信号)以及校准复位等核心模块。通过表格详细列明了各引脚电压范围、功能定义及工程注意事项,并附有典型封装球位分布图。全文基于JEDEC标准,为移动设备内存设计提供全面的硬件参考,特别强调电源时序控制、信号完整性及抗干扰设计等关键点。

zap15622077817的博客 2649

Java常用类-包装类(Wrapper)简单介绍

目录前言1、包装类(Wrapper) 前言 本文主要介绍java中的包装类 1、包装类(Wrapper) Java是面向对象的编程语言,但它也包含了8种基本数据类型,这8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有成员变量、方法可以被调用。 针对八种基本数据类型定义相应的引用类型—包装类(封装类); 有了类的特点,就可以调用类中的方法,Java才是真正的面向对象。 自动装箱与自动拆箱: 装箱:基本数据类型包装成包装类的实例 通过包装类的构造器实现: in

nmvc01的博客 4299

从零到一:i.MX8M Plus开发板全流程开发指南(源码编译、烧录、镜像运行)

本文详细介绍了i.MX8M Plus开发板的全流程开发指南,包括源码编译、烧录和镜像运行等关键步骤。通过实战案例和配置技巧,帮助开发者快速掌握工业级应用开发,提升在边缘计算和AI推理等领域的开发效率。

weixin_30687051的博客 573

浅谈wrapper类是什么

1.wrapper单词含义 wrapper单词的含义是封装,包装的意思 2.wrapper类是什么 wrapper类就是包装类(也叫封装类)如: Integer Long Float Double 叫它包装是因为你在声明时只需如: int a=2; long b=4; float c=3.4f; double d=6.32; 而不需要用到包装类,如: Integer a=new Integer(2); Long b=new Long(4); Float c=new Float(3.4f); Doubl

一个平平无奇的攻城狮 2万+

Halcon Camera-calibration 相关算子(一)

Halcon Camera-calibration 相关算子介绍

qq_44744164的博客 1368

基于多模态融合的反无人机视觉跟踪算法研究

本研究提出了一种基于多模态融合的反无人机视觉跟踪算法,通过整合可见光、红外、深度等多种视觉信息源,提高了对无人机的跟踪精度和可靠性。设计并实现了多模态特征提取方法,针对不同模态图像的特点提取了有效的特征信息,为多模态融合提供了基础。研究了多种多模态融合策略,包括特征级融合、决策级融合和混合融合,并通过实验对比分析了它们的优缺点,确定了适合反无人机视觉跟踪的融合方法。选择并改进了跟踪算法,将多模态融合信息融入到跟踪过程中,提高了算法对复杂环境和无人机运动变化的适应性。

AI的内部世界的博客 1354

wrapper的基础知识和常用方法

条件构造器关系介绍 :上图绿色框为抽象类abstract蓝色框为正常class类,可new对象黄色箭头指向为父子类关系,箭头指向为父类wapper介绍 :Wrapper : 条件构造抽象类,最顶端父类AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件QueryWrapper : Entity 对象封装操作类,不是用lambda语法UpdateWrapper : Update 条件封装,用于Entity对象更新操作。

XYAX104的博客 2359

OPPO 后端校招面试,过于简单了!

你好,我是 Guide。2026 届秋招陆续开奖公司的越来越多了,今天来看一家手机厂 OPPO。前几天,已经分享了和今年校招开奖的情况。其中,小红书的薪资最为炸裂,大白菜一年都能给到 51w+。不过,相对应的工作强度和压力也是真的难顶,确实很难有钱多又轻松的活!OV (OPPO 和 Vivo)这几年发展真还可以的,这两家的高端机口碑都不错。本人也是最近入手了一款 Vivo 的上一代旗舰,拍照是真的不错啊!每个月会有 1.2k 生活补贴,生活费是按照 8 % 缴纳。

JavaGuide 755

[流畅的python]-第一章-python数据模型笔记

流畅的python第一章代码注释与理解

LY_970909的博客 239

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

流畅的Python读书笔记(一)Python数据模型

文章记录了笔者学习流畅的Python书籍后的一些笔记。这里主要是第一章序章的数据模型的第一小节。

m0_52339560的博客 228

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

流畅的python笔记(一)Python数据模型

一、python最好的品质之一是一致性 没有仔细去查看一致性的具体解释,仅以自己理解,以书上的一个例子来说吧,在python中用len(collection)来得到序列行对象collection的序列长度。len是python的标准库内置函数。对于python中的所有序列数据对象(无论是内置或者自定义类对象),求其长度的方法都是用内置的len函数,而不是有些用collection.size(),有些用collection.length()等。所以当我们看到代码中用了len(collection)时,即便c

向上吧贺凯 735

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【流畅的python】第一章 Python数据模型

本文是根据《流畅的python》第一章整理而成,主要是对python的一致性风格有个整体上的了解。

半妖 668

《流畅的python》学习笔记

《流畅的python》学习笔记(一)起步第一章 python数据模型__len__方法 起步 从事软件开发14年半,前12年一直用C/C++写服务器端程序,主要涉及作业、流程调度和通信等等程序,从纯写代码到大系统的架构设计,刨过各种坑,战战兢兢的在软件行业前行,从不放弃学习,也从学习中得到快乐。从事传统软件行业,公司的技术水平及其有限,作为软件公司,公司领导更看重的是业务,对技术,尤其是软件技术并...

weixin_43472507的博客 445

《流畅的Python第二版》读书笔记——Python数据模型

本文是流畅的Python第二版的读书笔记系列开端,主要介绍了魔法方法的概念,以及引入了几个魔法方法。使用魔法方法,可以让你的Python对象像内建对象一样。

日积月累,天道酬勤 3634

python 数据模型

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 129篇文章,本文大约4500字,阅读大约需要 15分钟最近开始阅读《流畅的python》,也会开始更新这本...

AI 算法笔记 4040

【学习笔记】流畅的Python:纸牌实例、向量运算

namedtuple函数: # collections.namedtuple构建一个简单的类来表示一张纸牌, # card为类名,rank, suit类似于字典的key card = collections.namedtuple('card', ['rank', 'suit']) sorted与spades_high函数: 对于纸牌card(rank='2', suit='clubs'),spa...

qq_45864250的博客 327

流畅的Python(1)- 一摞Python风格的纸牌

文章目录1. namedtuple 具名元祖 1. namedtuple 具名元祖

scar2016的博客 1310

《流畅的python 第一章 python数据模型》

摘要:本章主要讲一些特殊方法(前后带双下划线写法的方法,如\_\_len\_\_,\_\_getitem_\_),为什么有特殊方法,特殊方法的应用。

飞鸟与鱼的专栏 666

流畅的Python:数据模型

Python数据模型 文章目录Python数据模型Python风格的纸牌字符串表现形式特殊方法列表推导、生成器表达式切片序列的增量赋值关于 += 的谜题数组双向队列及其他 开始学习《流畅的Python》,后续系列博客大部分均摘自本书,仅用于交流、学习和记录。 Python风格的纸牌 import collections Card = collections.namedtuple('Card', [...

随心写写 393

流畅的python学习记录——第一章:python数据模型

<> 1.1 一摞python风格的纸牌 # 纸牌类 import collections # namedtuple用以构建只有少数属性但是没有方法的对象, 比如数据库条目。 Card = collections.namedtuple('Card', ['rank', 'suit']) class FrenchDeck: ranks = [str(i) for i in range(2, 11)] + list('JQKA') suits = ['红心', '方片', '梅

Nick Blog 566

流畅的python阅读笔记——第一章 Python数据模型

流畅的python阅读笔记,第一章 Python数据模型。主要简单介绍python特殊方法

captainhook2的博客 544
上一篇: 关于7-10月的总结及2019年技能大赛回顾
下一篇: 使用c#的System.Net.Mail包、NPOI包实现了基于excel表格的邮箱自定义批量发送
luoz_python
博客等级 码龄10年 57粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值