首页 文章 精选 留言 我的

精选列表

搜索[模块],共10000篇文章
优秀的个人博客,低调大师

Python的C/C++扩展——boost_python编写Python模块

前面讲述了Python使用ctypes直接调用动态库和使用Python的C语言API封装C函数,本文概述方便封装C++类给Python使用的boost_python库。 安装boost python库: sudo aptitude install libboost-python-dev 示例 下面代码简单实现了一个普通函数maxab()和一个Student类: #include <iostream> #include <string> int maxab(int a, int b) { return a>b?a:b; } class Student { private: int age; std::string name; public: Student() {} Student(std::string const& _name, int _age) { name=_name; age=_age; } static void myrole() { std::cout << "I'm a student!" << std::endl; } void whoami() { std::cout << "I am " << name << std::endl; } bool operator==(Student const& s) const { return age == s.age; } bool operator!=(Student const& s) const { return age != s.age; } }; 使用boost.python库封装也很简单,如下代码所示: #include <Python.h> #include <boost/python.hpp> #include <boost/python/suite/indexing/vector_indexing_suite.hpp> #include <vector> #include "student.h" using namespace boost::python; BOOST_PYTHON_MODULE(student) { // This will enable user-defined docstrings and python signatures, // while disabling the C++ signatures scope().attr("__version__") = "1.0.0"; scope().attr("__doc__") = "a demo module to use boost_python."; docstring_options local_docstring_options(true, false, false); def( "maxab", &maxab, "return max of two numbers.\n" ); class_<Student>("Student", "a class of student") .def(init<>()) .def(init<std::string, int>()) // methods for Chinese word segmentation .def( "whoami", &Student::whoami, "method's doc string..." ) .def( "myrole", &Student::myrole, "method's doc string..." ) .staticmethod("myrole"); // 封装STL class_<std::vector<Student> >("StudentVec") .def(vector_indexing_suite<std::vector<Student> >()) ; } 上述代码还是include了Python.h文件,如果不include的话,会报错误: wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory 编译 编译以上代码有两种方式,一种是在命令行下面直接使用g++编译: g++ -I/usr/include/python2.7 -fPIC wrap_student.cpp -lboost_python -shared -o student.so 首先指定Python.h的路径,如果是Python 3的话就要修改为相应的路径,编译wrap_student.cpp要指定-fPIC参数,链接(-lboost_python)生成动态库(-shared)。 生成的student.so动态库就可以被python直接import使用了 In [1]: import student In [2]: student.maxab(2, 5)Out[2]: 5 In [3]: s = student.Student('Tom', 12) In [4]: s.whoami()I am Tom In [5]: s.myrole()I'm a student!另外一直方法是用python的setuptools编写setup.py脚本: #!/usr/bin/env python from setuptools import setup, Extension setup(name="student", ext_modules=[ Extension("student", ["wrap_student.cpp"], libraries = ["boost_python"]) ]) 然后执行命令编译: python setup.py build or sudo python setup.py install 文章版权归属于 猿人学

优秀的个人博客,低调大师

23、【支付模块开发】——Java对接支付宝步骤(沙箱环境)

1、下载导入项目 https://docs.open.alipay.com/54/104506 打开支付宝接口官网: image.png 我们下载Java版Demo 下载之后解压,然后我们用IDEA导入这个Demo项目~ image.png 然后,我们下载一个我们后面需要生成生成RSA密钥的工具: https://docs.open.alipay.com/291/105971 由于我是在Win平台开发,所以下载自己操作系统对应的版本就行: image.png 下载之后我们就先放一边啦~ 导入项目之后,我们要查看自己导入的项目是否报错,如果出现报错,可能要调整一下自己的项目环境: image.png 好,配置好项目时候,我们先不着急运行项目, 我们打开zhifubao.properties,显而易见,这是一个配置文件,那么我们记下来就将这个配置文件的相关配置配好~ image.png 2、配置好配置文件 由于我们测试的时候沙箱环境: 首先: 1、打开支付宝API官网的沙箱位置:https://openhome.alipay.com/platform/appDaily.htm?tab=info 打开这个网址,我们就会看到下面界面: image.png 首先我们看到相关参数,我们不管,我们一步步按照官网给的Demo里面的配置文件一个个将配置文件配好即可~ 2、打开zhifubao.properties配置文件,我们就会看到下面代码: image.png 首先我们先配置最上面的四行: # 支付宝网关名、partnerId和appId open_api_domain = https://openapi.alipay.com/gateway.do mcloud_api_domain = http://mcloudmonitor.com/gateway.do pid = 此处请填写你的PID appid = 此处请填写你当面付的APPID 这四行我们根据沙箱环境里面给的对应参数来配置 image.png mcloud_api_domain这个参数我们不需要改变~ 3、接下来就是配置公钥和私钥了 我们打开上面再这个链接下载的支付宝官网提供的公钥私钥生成工具:https://docs.open.alipay.com/291/105971 解压之后: image.png 双击: RSA签名验签工具.bat 由于我们这次选择的是RSA2密钥方式:所以我们选择密钥长度为2048的方式: image.png 点击生成密钥 接下来我们配置Demo中配置文件的下两行 # RSA私钥、公钥和支付宝公钥 private_key = 此处请填写你的商户私钥且转PKCS8格式 public_key = 此处请填写你的商户公钥 将上面密钥生产工具生成的私钥和公钥复制到对应的地方即可: 4、下面一步,我们配置支付宝公钥,这一步我们要回到沙箱环境中: image.png 对这一行进行操作,首先我们复制上面密钥工具生成的公钥,然后再支付宝沙箱环境页面,点击查看公钥,然后点击修改,删除原来的,然后将我们刚才在密钥生成工具生成的公钥粘贴到里面: image.png 点击保存: 然后点击查看支付宝公钥: image.png image.png 然后复制里面的支付宝公钥,下一步回到我们的Demo项目中,打开我们的 zhifubao.properties配置文件,将复制的支付宝公钥放到下面参数的配置上,记得把原来配置文件里默认的删除掉, #SHA256withRsa对应支付宝公钥 alipay_public_key = 这个是默认注释的,因为我们选中的是 #SHA256withRsa秘钥方式, 下面的参数选择默认的就差不多啦。。 到此,我们的支付宝Demo的配置文件算是配置好了~ 3、运行Demo: 配置好配置文件之后,我们运行一下Demo的Main函数:发现项目可以正常跑起来了(如果你发发现你的项目报错,可能就是配置配置文件相关地方配置错了,根据错误提示一步步排查即可) 运行起来之后我们现在寻找输出日志里面一个参数: image.png 我们复制冒号里面的内容 打开草料二维码,将冒号里面的内容生成二维码: image.png 然后在沙箱环境中下载沙箱版支付宝: image.png 用沙箱版支付宝登录我们的买家账号,然后扫描生成的二维码,就发现可以付款啦~ image.png image.png

优秀的个人博客,低调大师

linux 定时任务 python找不到模块问题解决

先说结论:以后在涉及到定时任务,指定python的环境路径。 shell中python路径问题 定时任务默认的python路径为系统自带 写一个python程序sys_path.py import sys print(sys.path) 放入shell脚本sys_path.sh python ./sys_path.py 执行sh脚本 sh sys_path.sh ['/data0/qinyk/test', '/data0/anaconda3/lib/python36.zip', '/data0/anaconda3/lib/python3.6', '/data0/anaconda3/lib/python3.6/lib-dynload', '/data0/anaconda3/lib/python3.6/site-packages', '/data0/anaconda3/lib/python3.6/site-packages/PyHive-0.3.0-py3.6.egg', '/data0/anaconda3/lib/python3.6/site-packages/xgboost-0.71-py3.6.egg'] 定时任务crontab -e 并保存日志 * * * * * sh sys_path.sh >sys_path.log 2>&1 cat sys_path.log ['/data0/qinyk/test', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages']

优秀的个人博客,低调大师

Python random模块(获取随机数)常用方法和使用例子

random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniformrandom.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a < b,则生成的随机数n: a <= n <= b。如果 a > b, 则 b <= n <= a 代码如下: print random.uniform(10, 20)print random.uniform(20, 10) 18.7356606526 12.5798298022 random.randintrandom.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b 代码如下: print random.randint(12, 20) # 生成的随机数 n: 12 <= n <= 20print random.randint(20, 20) # 结果永远是20 print random.randint(20, 10) # 该语句是错误的。下限必须小于上限 random.randrangerandom.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效 random.choicerandom.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章。下面是使用choice的一些例子: 代码如下: print random.choice("学习Python")print random.choice(["JGood", "is", "a", "handsome", "boy"])print random.choice(("Tuple", "List", "Dict")) random.shufflerandom.shuffle(x[, random]),用于将一个列表中的元素打乱。如: 代码如下: p = ["Python", "is", "powerful", "simple", "and so on..."]random.shuffle(p)print p ['powerful', 'simple', 'is', 'Python', 'and so on...'] random.samplerandom.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列 代码如下: list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]slice = random.sample(list, 5) # 从list中随机获取5个元素,作为一个片断返回print sliceprint list # 原有序列并没有改变 随机整数: 代码如下: import randomrandom.randint(0,99) 21 随机选取0到100间的偶数: 代码如下: import randomrandom.randrange(0, 101, 2) 42 随机浮点数: 代码如下: import randomrandom.random()0.85415370477785668random.uniform(1, 10) 5.4221167969800881 随机字符: 代码如下: import randomrandom.choice('abcdefg%^*f') 'd' 多个字符中选取特定数量的字符: 代码如下: import random random.sample('abcdefghij', 3) ['a', 'd', 'b'] 多个字符中选取特定数量的字符组成新字符串: 代码如下: import randomimport stringstring.join( random.sample(['a','b','c','d','e','f','g','h','i','j'], 3) ).replace(" ","") 'fih' 随机选取字符串: 代码如下: import randomrandom.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] ) 'lemon' 洗牌: 代码如下: import randomitems = [1, 2, 3, 4, 5, 6]random.shuffle(items)items [3, 2, 5, 6, 4, 1]

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册