python高性能之路:使用C/C++编写扩展
脚本语言一般使用c等静态语言编写扩展提高性能,下面使用cpp编写一个实现两数之和的python扩展函数
完成案例代码参考:https://1drv.ms/u/s!AquRvPzqx59RjAZ3wk6qpzqEDgF9?e=jZe5hu
构建python环境
减少扩展开发对系统python的影响,建议使用venv创建一个新的python开发环境
virtualenv ~/develop/venvpy3
操作效果如下
使用命令source ~/develop/venvpy3/bin/activate
激活即可
创建扩展文件sumext.cpp
sumext.cpp
#include <iostream>
#include <stdio.h>
#include <Python.h>
using namespace std;
主要是引入依赖的Python.h文件头即可,其它头文件按需引入使用
13/24 设计模式之装饰器模式 Decorator Pattern
类别:结构型设计模式
目的:在不改变对象对外接口的限定下,动态对对象的行为(方法)进行一次/多次增强
完整代码参考:https://1drv.ms/u/s!AquRvPzqx59RjABb2hfszxx7JUQu?e=5pPGPv
典型场景
蛋糕上需要添加一些装饰,这里假设蛋糕10块钱,每个装饰品的添加都需要支付一些额外的费用,比如添加添加糖果需要加2块钱,添加蜡烛需要1.5,既要加糖果、又要蜡烛就要多支付3.5元(2+1.5)
用代码表示这些不同状态的蛋糕很容易想到使用class表示,一个class表示一种蛋糕:
class | 作用 |
---|---|
BaseCake.java | 基本蛋糕 10块 |
CakeWithCandy.java | 加糖果的蛋糕 10+2=12块 |
CakeWithCandle.java | 加蜡烛的蛋糕 10+1.5=11.5块 |
CakeWithCandyAndCandle.java | 加糖果和蜡烛的蛋糕 10+2+1.5=13.5块 |
12/24 设计模式之适配器模式 Adapter Pattern
类别:结构型设计模式
目的:将历史遗留代码(通常是一个library)/三方代码转换成一个新接口,使得可以在使用这个新接口的项目中使用
完整代码参考:https://1drv.ms/u/s!AquRvPzqx59Ri3_qC9egk9qojRQp?e=oiO1Jh
典型场景
这里拿一个系统中的支付模块举例,一个支付模块会对接多个支付比如微信,支付宝等
基本事实
在现有代码中,已在使用一种支付方式处理订单,对应的支付接口Pay.java参考如下
public interface Pay {
void setAmount(Integer amount);
void makePayment();
}
上面这个接口的实现PayImpl.java
public class PayImpl implements Pay {
@Override
public void setAmount(Integer amount) {
System.out.println("set pay impl");
}
@Override
public void makePayment() {
System.out.println("make payment");
}
}
serviceMyService.java
中使用支付方式处理订单,参考如下:
11/24 设计模式之模板方法模式 Template Method Pattern
类别:行为型设计模式
目的:定一个代码模板,确保代码执行时会把模板中的代码一并执行,降低漏写约定代码的可能
完整代码参考:https://1drv.ms/u/s!AquRvPzqx59Ri3796seig6pm77ZO?e=gYrllO
典型场景
这里拿集成支付网关举例,比如业务中对支付的抽象如下
方法 | 作用 |
---|---|
create | 发起支付 |
query | 查询订单 |
refund | 退款 |
在上面执行的每一步进行日志记录
对应的接口Pay.java参考如下
public interface Pay {
void create();
void query();
void refund();
}
实现一个支付方式,比如支付宝支付,在每一个支付步骤进行日志记录,参考如下:
Copyright © 2015 Theme used GitHub CSS. 访问人/ 次