<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[向上吧贺凯]]></title><description><![CDATA[java web、机器学习、Linux与C++]]></description><link>https://blog.youkuaiyun.com/chk_plusplus</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chk_plusplus]]></copyright><item><title><![CDATA[流畅的python笔记（二十一）类元编程]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/121247758</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/121247758</guid><author>chk_plusplus</author><pubDate>Wed, 10 Nov 2021 21:48:24 +0800</pubDate><description><![CDATA[目录

前言

一、类工厂函数

二、定制描述符的类装饰器

三、导入时和运行时比较

场景练习

场景1解答

场景2解答

四、元类基础知识

场景练习

场景3解答

场景4解答

五、定制描述符的元类

六、元类的特殊方法__prepare__

七、类作为对象

前言

类元编程是指在运行时创建或定制类的技艺。python中类是一等对象，因此任何时候都可以使用函数新建类，而无需使用class关键字。类装饰器也是函数，不过能够审查、修改甚至把被装饰的类替换成其他类。

    最后，元类是...]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（二十）属性描述符]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/121227993</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/121227993</guid><author>chk_plusplus</author><pubDate>Wed, 10 Nov 2021 12:34:25 +0800</pubDate><description><![CDATA[前言

描述符是对多个属性运用相同存取逻辑的一种方式。

    描述符是实现了特定协议的类，这个协议包括__get__、__set__和__delete__方法。property类实现了完整的描述符协议。描述符是python的独有特征，不仅在应用层使用，在语言的基础设施中也有用到。

一、描述符示例：验证属性

LineItem类第三版：一个简单的描述符

实现了__get__、__set__、__delete__方法的类是描述符。描述符的用法是，创建一个实例，作为另一个类的类属性。下面例子中，我...]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（十九）动态属性和特性]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/121105122</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/121105122</guid><author>chk_plusplus</author><pubDate>Mon, 08 Nov 2021 22:13:16 +0800</pubDate><description><![CDATA[前言

python中，数据的属性和处理数据的方法统称属性attribute，即方法只是可调用的属性。除了这二者之外，我们还可以创建特性property，在不改变类接口的前提下，使用存取方法(即读值方法和设值方法)修改数据属性。

    python使用点号访问属性时，比如obj.attr，python解释器会调用特殊的方法（如__getattr__和__setattr__）计算属性。用户自定义的类可以通过__getattr__方法实现虚拟属性，当访问不存在的属性时，即时计算属性的值。

  ...]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（十七）使用期物处理并发]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/121095546</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/121095546</guid><author>chk_plusplus</author><pubDate>Tue, 02 Nov 2021 16:55:31 +0800</pubDate><description><![CDATA[目录

前言

一、网络下载的三种风格

依序下载的脚本

使用concurrent.futures模块的下载脚本flags_threadpool.py

期物在哪里

二、阻塞型IO和GIL

三、使用concurrent.futures模块启动进程

四、实验Executor.map方法

五、显示下载进度并处理错误

前言

本章讨论concurrent.futures模块。

期物的概念：期物指一种对象，表示异步执行的操作，是concurrent.futures模块和asynicio包的基础。

一]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（十六）协程]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/121065379</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/121065379</guid><author>chk_plusplus</author><pubDate>Mon, 01 Nov 2021 21:23:21 +0800</pubDate><description><![CDATA[一、生成器如何进化成协程

python2.5以后，yield关键字可以在表达式中使用，而且生成器API增加了.send(value)方法。生成器的调用方可以使用.send()方法发送数据，发送的数据会成为生成器函数中yield表达式的值。因此生成器可以作为协程使用。协程是指一个过程，这个过程与调用方协作，产出由调用方提供的值。

    除了.send()方法外，还添加了.throw()和.close()方法：

send()方法，调用方使用send方法发送数据，该数据会成为生成器函数中yield...]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（十五）上下文管理器和else块]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/121050820</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/121050820</guid><author>chk_plusplus</author><pubDate>Sun, 31 Oct 2021 15:25:55 +0800</pubDate><description><![CDATA[前言

本章讨论python中的流程控制特性：

with语句和上下文管理器，with语句会设置一个临时的上下文，交给上下文管理器对象控制，并且负责清理上下文。
	for、while、try语句的else子句。


一、if语句之外的else块




...]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（十四）可迭代的对象、迭代器和生成器]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/121010874</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/121010874</guid><author>chk_plusplus</author><pubDate>Sat, 30 Oct 2021 00:05:09 +0800</pubDate><description><![CDATA[前言

迭代器模式：扫描内存中放不下的数据集时，要找到一种惰性获取数据项的方式，即按需一次获取一个数据项，这就是迭代器模式。

python为了抽象出迭代器模式，加入了关键字yield，这个关键字用于构建生成器，其作用与迭代器一样。所有生成器都是迭代器，因为生成器完全实现了迭代器接口。根据《设计模式：可复用面向对象软件的基础》中的定义，迭代器用于从一个集合中取出元素，生成器则用于凭空生成元素，但在python社区中，大多时候把迭代器和生成器视作同一概念。

    在python3中...]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（十三）正确重载运算符]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/121003477</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/121003477</guid><author>chk_plusplus</author><pubDate>Thu, 28 Oct 2021 09:57:08 +0800</pubDate><description><![CDATA[一、运算符重载基础

python对运算符重载加了一些限制。

不能重载内置类型的运算符
	不能新键运算符，只能重载现有的
	某些运算符不能重载------is、and、or、not（位运算符&amp;、|、~可以）

]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（十二）继承的优缺点]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120999691</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120999691</guid><author>chk_plusplus</author><pubDate>Wed, 27 Oct 2021 21:13:23 +0800</pubDate><description><![CDATA[目录

一、子类化内置类型很麻烦

二、多重继承和方法解析顺序

三、多重继承的真实应用

四、处理多重继承

五、Django通用视图中的混入

一、子类化内置类型很麻烦

python2.2之前，内置类型不能子类化。python2.2以后内置类型可以子类化了，但是内置类型的方法不会调用子类覆盖的方法，比如下边例子，用继承的内置类型的方法无法调用覆盖的内置类型的方法。



DoppelDict继承内置的dict类型，它会把存入的值重复一下，即[1, 2]变成[1, 2, 1, 2]，并且具体的实现委托给]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（十一）接口：从协议到抽象类型]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120935068</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120935068</guid><author>chk_plusplus</author><pubDate>Wed, 27 Oct 2021 18:24:18 +0800</pubDate><description><![CDATA[一、python文化中的接口与协议

接口定义：每个类都有接口，类实现或继承的公开属性（方法或数据属性），包括特殊方法，都是接口。受保护的属性和私有属性不在接口中（即便在python并不存在真正受保护的和私有的属性，而只是采用命名约定实现的）。

接口补充定义：对象公开方法的自己，让对象在系统中扮演特定的角色。python文档中的文件类对象或可迭代对象就是指这样一些类，它们实现了文件类对象的方法集合或可迭代需要的方法集合。

协议是接口，但不是正式的，只由文档和约定定义。比如序列协议，是python最基础的]]></description><category></category></item><item><title><![CDATA[笔试题------英语句子结构]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120937709</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120937709</guid><author>chk_plusplus</author><pubDate>Sun, 24 Oct 2021 18:06:44 +0800</pubDate><description><![CDATA[句子结构合法：

主语有1到多个

谓语有且仅有1个

宾语有0到多个






#include &lt;bits/stdc++.h&gt;
using namespace std;

// 三个单词表
unordered_set&lt;string&gt; zhuyu;
unordered_set&lt;string&gt; weiyu;
unordered_set&lt;string&gt; binyu;

bool judge(vector&lt;string&gt; &amp;temp){
  ]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（十）序列的修改、散列和切片]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120873417</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120873417</guid><author>chk_plusplus</author><pubDate>Sun, 24 Oct 2021 15:26:28 +0800</pubDate><description><![CDATA[前言

本章定义表示多维向量的Vector类，其中的元素是浮点数，将支持以下功能：

基本的序列协议------__len__和__getitem__
	正确表述拥有很多元素的实例
	适当的切片支持，用于生成新的Vector实例
	综合各个元素的值计算散列值
	自定义的格式语言扩展
此外，还将通过__getattr__方法实现属性的动态存取，虽然序列类型通常不会这么做。

一、Vector类：用户定义的序列类型

二、Vector类第一版：与Vector2d兼容

这里故意不让Vector的构造方法和Vec]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（九）符合python风格的对象]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120860562</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120860562</guid><author>chk_plusplus</author><pubDate>Wed, 20 Oct 2021 17:59:45 +0800</pubDate><description><![CDATA[目录

前言

一、对象表示形式

二、再谈向量类

三、备选构造方法

四、classmethod与staticmethod

五、格式化显示

六、让Vector2d可散列

七、python的私有属性和”受保护“属性

八、使用__slots__类属性节省空间

定义类属性__slots__

使用__slots__的问题

九、覆盖类属性

前言

本章接续第一章，说明如何实现很多python类型中常见的特殊方法。包含以下话题：

支持用于生成对象其他表示形式的内置函数（repr()、byte()等]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（八）对象引用、可变性和垃圾回收]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120837247</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120837247</guid><author>chk_plusplus</author><pubDate>Tue, 19 Oct 2021 23:39:07 +0800</pubDate><description><![CDATA[一、变量不是盒子

python中变量不是盒子，而是盒子上贴的标签。对象才是盒子。对象一般是指一块存储空间，变量是对象上贴的标签，一个对象可以贴好多个标签，即可以对应很多个变量名。如下例子，把变量a和b分配给了同一个列表对象，类似于C++中的引用概念，python中的变量的本质都是C++中的引用。





因为对象在右边，总是先于变量创建，因此正确说法是把某变量分配给某对象，而不是反过来。

二、标识、相等性和别名




...]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（七）函数装饰器和闭包]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120821037</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120821037</guid><author>chk_plusplus</author><pubDate>Mon, 18 Oct 2021 22:34:58 +0800</pubDate><description><![CDATA[前言

函数装饰器用于在源码中“标记”函数，以某种方式增强函数的行为。要掌握装饰器，必须了解闭包，必须知道nonlocal关键字。

一、装饰器基础知识

装饰器是可调用的对象，其参数是被装饰的函数，因此装饰器可以认为是一种特殊的高阶函数。装饰器可能会处理被装饰的函数，然后把它返回，或者将其替换成另一个函数或可调用对象。

假如有个名为decorate的装饰器：


@decorate
def target():
    print("running target()")

上述代码如下述代...]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（六）使用一等函数实现设计模式]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120818132</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120818132</guid><author>chk_plusplus</author><pubDate>Mon, 18 Oct 2021 00:41:52 +0800</pubDate><description><![CDATA[目录

一、重构策略模式

经典策略模式

使用作为对象的函数实现策略模式

自动选择最佳策略

找出模块中的全部策略

globals()

使用单独模块专门保存所有策略

二、命令模式

总结

一、重构策略模式

经典策略模式



策略模式的定义是：定义 一系列算法（策略），把它们一一封装起来，并且使它们可以相互替换。策略模式使得算法可以独立于使用它的客户而变换，即不同的客户都可以使用某个算法或其它算法。

    下面是一个电商领域使用策略模式的例子。



策略模式设计的内容如下：

...]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（五）一等函数]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120777921</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120777921</guid><author>chk_plusplus</author><pubDate>Sun, 17 Oct 2021 22:26:00 +0800</pubDate><description><![CDATA[前言

“一等对象”是指满足下述条件的程序实体：

在运行时创建
	能赋值给变量或数据结构中的元素
	能作为参数传给函数
	能作为函数的返回结果
在python中，整数、字符串、字典等都是一等对象，这跟其它编程语言一致，但是python中的所有函数也是一等对象，或者可以称之为一等函数（所有函数都是一等函数，不存在二等三等函数的说法）。

一、把函数视作一等对象


def factorial(n):
    '''returns n! good!'''
    return 1 if n &lt; 2 el]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（四）文本和字节序列]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120656082</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120656082</guid><author>chk_plusplus</author><pubDate>Thu, 14 Oct 2021 22:50:46 +0800</pubDate><description><![CDATA[一、字符问题


]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（三）字典和集合]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120638151</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120638151</guid><author>chk_plusplus</author><pubDate>Fri, 08 Oct 2021 11:30:10 +0800</pubDate><description><![CDATA[一、泛映射类型

collections.abc模块中有Mapping和MutableMapping两个抽象基类，他们的作用是为dict和其它泛映射类型定义形式接口。



可以用isinstance函数来判定某个对象是不是泛映射类型


import collections

my_dict = {}
print(isinstance(my_dict, collections.Mapping))
# 输出True

所谓泛映射类型即键值对类型。泛映射类型中键必须是可散列的，可散列对象有三点要求：

第一：]]></description><category></category></item><item><title><![CDATA[流畅的python笔记（二）数据结构]]></title><link>https://blog.youkuaiyun.com/chk_plusplus/article/details/120261018</link><guid>https://blog.youkuaiyun.com/chk_plusplus/article/details/120261018</guid><author>chk_plusplus</author><pubDate>Thu, 16 Sep 2021 16:33:05 +0800</pubDate><description><![CDATA[一、内置序列类型概览

python的核心特点之一是对序列数据类型的支持。

按照序列能否存放不同类型对象分类：

容器序列

list、tuple和collections.deque，这些是容器序列类型，同一个序列对象中可以存放不同类型的数据。

扁平序列

    str、bytes、bytearray、memoryview和array.array，这些是扁平序列类型，这种一个序列对象中只能容纳一种类型。

    容器序列存放的是其所包含的任意类型对象的引用，而扁平序列...]]></description><category></category></item></channel></rss>