精华内容
下载资源
问答
  • python封装C++接口

    千次阅读 2019-06-19 20:30:02
    项目主要功能是将C++代码封装Python接口,与boost.python类似,但比它小很多 1、下载pybind11 https://github.com/pybind/pybind11.git 2、安装pybind11 pip install pybind11-master 3、编写接口 example.cpp int...

    开源项目pybind11
    项目主要功能是将C++代码封装为Python接口,与boost.python类似,但比它小很多
    1、下载pybind11
    https://github.com/pybind/pybind11.git
    2、安装pybind11
    pip install pybind11-master
    3、编写接口
    example.cpp

    int add(int i,int j){
    	return i +j;
    }
    PYBIND11_MODULE(my_example,m){
    	m.def("add",&add,"i"_a,"j"_b);
    }
    

    4、编写安装文件
    setup.py

    from setuptools import setup, Extension
    from setuptools.command.build_ext import build_ext
    import sys
    import setuptools
    
    __version__= '0.0.1'
    class get_pybind_include(object):
    	def __init__(self,user=False):
    		sef.user = user
    	def __str__(self):
    	  import pybind11
    	  return pybind11.get_include(self.user)
    	  
    ext_modules = [
    	Extension(
    		'my_example',
    		['example.cpp'],
    		include_dirs=[
    			get_pybind_include(),
    			get_pybind_include(user=True)
    		],
    		language='c++'
    	),
    ]
    def has_flag(compiler, flagname):
    	import tempfile
    	with tempfile.NamedTemporaryFile('w',suffix='.cpp') as f:
    		f.write('int main (int argc, char **argv){return 0;}')
    		try:
    			compiler.compile([f.name],extra_postargs=[flagname])
    		except setuptools.setuptools.distutils.errors.CompileError:
                return False
        return True
    
    
    def cpp_flag(compiler):
        """Return the -std=c++[11/14] compiler flag.
    
        The c++14 is prefered over c++11 (when it is available).
        """
        if has_flag(compiler, '-std=c++14'):
            return '-std=c++14'
        elif has_flag(compiler, '-std=c++11'):
            return '-std=c++11'
        else:
            raise RuntimeError('Unsupported compiler -- at least C++11 support '
                               'is needed!')
    
    
    class BuildExt(build_ext):
        """A custom build extension for adding compiler-specific options."""
        c_opts = {
            'msvc': ['/EHsc'],
            'unix': [],
        }
    
        if sys.platform == 'darwin':
            c_opts['unix'] += ['-stdlib=libc++', '-mmacosx-version-min=10.7']
    
        def build_extensions(self):
            ct = self.compiler.compiler_type
            opts = self.c_opts.get(ct, [])
            if ct == 'unix':
                opts.append('-DVERSION_INFO="%s"' % self.distribution.get_version())
                opts.append(cpp_flag(self.compiler))
                if has_flag(self.compiler, '-fvisibility=hidden'):
                    opts.append('-fvisibility=hidden')
            elif ct == 'msvc':
                opts.append('/DVERSION_INFO=\\"%s\\"' % self.distribution.get_version())
            for ext in self.extensions:
                ext.extra_compile_args = opts
            build_ext.build_extensions(self)
    
    setup(
        name='my_example',
        version=__version__,
        author='Sylvain Corlay',
        author_email='sylvain.corlay@gmail.com',
        url='https://github.com/pybind/python_example',
        description='A test project using pybind11',
        long_description='',
        ext_modules=ext_modules,
        install_requires=['pybind11>=2.2'],
        cmdclass={'build_ext': BuildExt},
        zip_safe=False,
    )
    
    

    5、安装
    pip install myexample
    6、测试代码

    > import my_example
    > my_example.add(3,4)
    7
    
    展开全文
  • python 封装API接口

    万次阅读 2019-04-04 16:21:06
    3.对接口进行封装 import os import tornado.ioloop import tornado.web import tornado.httpserver import logging from tornado.escape import json_decode, json_encode, utf8 from phone_frequency_analysis ...

    1.对一天中通话,按时段进行分析
    输入数据为.txt文件,数据部分展示如下:

    u110107_02169228380_530005_20190228125930_61AA.mp3
    u110107_18895672550_530005_20190228165337_FFFFE06F.mp3
    u110107_18895672550_530005_20190228165433_FFFFE0DC.mp3
    u110107_18895672550_530005_20190228165854_FFFF9CB8.mp3
    u110107_18895672550_530005_20190228180136_FFFFB997.mp3
    u110107_18895672550_530005_20190228194425_14A8.mp3
    u110107_18995436895_530005_20190228143208_FFFF8EDE.mp3
    u110107_58033018_530005_20190228150349_5C59.mp3
    u110108_530006_02160383434_20190228121640_5208.mp3
    u110108_530006_02160383434_20190228134648_3117.mp3
    u110108_530006_02160389247_20190228083435_FFFF803B.mp3
    u110108_530006_02160389247_20190228084107_FFFF8232.mp3
    u110108_530006_02160389247_20190228084154_FFFFCC23.mp3
    u110108_530006_02160389263_20190228120132_4BAC.mp3
    

    2.分析如下,返回数据为每个小时对应的通话量

    import numpy as np
    def phone_frequency_analysis():
        with open("data/mp3_filenames.txt",'r',encoding = "utf-8") as f1:
            mp3_filenames = f1.readlines()
        numbers = 24
        count1 = 0
        count2 = 0
        day = "20190228"
        phone_frequency = np.zeros(numbers)
        for line in mp3_filenames:
            time_string = line.strip().split('_')[-2]
            time_string = int(time_string)
            count1 += 1
            for i in range(numbers):
                if time_string >= int(day+"000000") + 10000 *i and time_string < int(day+"010000") + 10000 * i:
                    phone_frequency[i] += 1
                    count2 += 1
                else:
                    pass
    
        #print("phone_frequency:",phone_frequency.astype(int))
        phone_frequency_map = {}
        phone_frequency_map["phone_frequency"] = phone_frequency.astype(int).tolist()
        print(phone_frequency_map)
        return phone_frequency_map
    
    if __name__ == '__main__':
        phone_frequency_map = phone_frequency_analysis()
        print(phone_frequency_map)
    

    3.对接口进行封装

    import os
    import tornado.ioloop
    import tornado.web
    import tornado.httpserver
    import logging
    from tornado.escape import json_decode, json_encode, utf8
    from phone_frequency_analysis import phone_frequency_analysis
    
    logger = logging.getLogger('mylogger')
    logger.setLevel(logging.DEBUG)
    
    fh = logging.handlers.RotatingFileHandler('python_getDemo.log', maxBytes = 1024*1024*1024, backupCount = 100)
    fh.setLevel(logging.DEBUG)
    
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    
    logger.addHandler(fh)
    
    class ChangeModel(tornado.web.RequestHandler):
        def get(self):
            self.set_header("Access-Control-Allow-Origin", "*")
            self.set_header("Access-Control-Allow-Headers", "x-requested-with")
            self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
            phone_frequency = phone_frequency_analysis()
            result = {
                "phone_frequency": phone_frequency,         
                "code": 0
            }
            self.write(json_encode(result))
    
    def make_app():
        return tornado.web.Application([
            (r"/phoneFrequency", ChangeModel),
        ])
    
    if __name__ =="__main__":
        app = make_app()
        sockets = tornado.netutil.bind_sockets(10031)
        http_server = tornado.httpserver.HTTPServer(app)
        http_server.add_sockets(sockets)
        print("Server Start Ok.....")
        tornado.ioloop.IOLoop.instance().start()
    

    4.查看进程

    ps aux|grep phone_frequency_api.py
    

    返回
    在这里插入图片描述
    5.查看端口

    netstat -anp|grep 10031
    

    在这里插入图片描述
    6.测试
    不带输入参数

    curl http://47.105.196.123:10031/phoneFrequency
    

    如果带有输入参数

    curl http://47.92.225.212:10030/testPrint?query="早安我晚点要去进餐"&EnterpriseID=100000011
    

    返回
    在这里插入图片描述
    7.遇到的问题
    TypeError: array is not JSON serializable
    原因:返回的map里面有个值是numpy array类型
    解决方案:要用tolist()方法将array类型转化为list类型
    在这里插入图片描述
    https://stackoverflow.com/questions/26646362/numpy-array-is-not-json-serializable

    展开全文
  • 接口封装 # coding:utf-8 from flask import Flask from flask import request from flask import jsonify # 将封装好的方法导入 from py_ElasticSearch import * # 再次包装一下方便修改 def search_es(input_str)...

    接口封装

    # coding:utf-8
    from flask import Flask
    from flask import request
    from flask import jsonify
    # 将封装好的方法导入
    from py_ElasticSearch import *
    
    # 再次包装一下方便修改
    def search_es(input_str):
        # 调用后检索数据
        my_index = "word2vec_index"
        keywords1 = input_str
        answer = keywordSearch(keywords1, my_index)
        return answer
    # 封装接口
    app = Flask(__name__)
    #通过导航栏接收数据
    @app.route('/<input_question>',methods=['POST','GET','PUT'])
    def get_result(input_question):
        res = search_es(input_question)
        return str(res)
    
    if __name__ == '__main__':
        # 解决中文内容乱码
        app.config['JSON_AS_ASCII'] = False
        app.run()
    
    

    接口调用

    import requests
    question = "依我去"
    myurl="http://127.0.0.1:5000/"+question
    r = requests.post(myurl)
    print(r.text)
    
    展开全文
  • python MySQLdb 封装接口

    2012-05-18 12:09:39
    鸟人封装的MySQLdb操作接口,包含读写分离、断线重连的逻辑,对于具体应用可以继承和扩展
  • python调用的时候报错,应该是self不是c++的类型导致无法使用
  • python3封装Api接口

    千次阅读 2018-08-13 16:37:00
    封装接口主要讲静态接口(无参数传入)、动态接口(有参数传入,不同参数返回的信息不同)。针对动态接口有三种传参方式:key_value、json串和拼接方式入参 一、封装成无参数传入的接口 from flas...

    注:本篇的代码和语法基于Python3.5环境,下面将用到Python 的Flask框架

    封装接口主要讲静态接口(无参数传入)、动态接口(有参数传入,不同参数返回的信息不同)。针对动态接口有三种传参方式:key_value、json串和拼接方式入参

     

      • 一、封装成无参数传入的接口
        from flask import Flask,jsonify,request
        data = {'huhy':{'age':24,'sex':'女'},
                'liuer':{'age':12,'sex':'男'}
                }
        app = Flask(__name__)#创建一个服务,赋值给APP
        @app.route('/get_user',methods=['post'])#指定接口访问的路径,支持什么请求方式get,post
        #讲的是封装成一种静态的接口,无任何参数传入
        def get_user():#-----这里的函数名称可以任意取
            return  jsonify(data)#把字典转成json串返回
        
        app.run(host='0.0.0.0',port=8802,debug=True)
        #这个host:windows就一个网卡,可以不写,而liux有多个网卡,写成0:0:0可以接受任意网卡信息,
         通过访问127.0.0.1:8802/get_user,可返回data信息
        #debug:调试的时候,可以指定debug=true;如果是提供接口给他人使用的时候,debug要去掉
        接口返回的截图如下:



      • 二、有参数传入的接口
         1.通过key_value方式传参
        from flask import Flask,jsonify,request
        data = {'huhy':{'age':24,'sex':'女'},
                'liuer':{'age':12,'sex':'男'}
                }
        err = {'zz':404,
               'yy':502
               }
        app = Flask(__name__)#创建一个服务,赋值给APP
        @app.route('/get_user',methods=['post'])#指定接口访问的路径,支持什么请求方式get,post
        
        # key_values方式传参
        def get_user():
            username = request.form.get('username')#获取接口请求中form-data的username参数传入的值
            if username in data:#判断请求传入的参数是否在字典里
                return jsonify(data[username])
        #如果在的话,则返回data对应key的值转成的json串信息
            else:
                return jsonify(err[username])
        #如果不在的话,返回err对应key的value转成的json串信息
        
        app.run(host='0.0.0.0',port=8802,debug=True)
        #这个host:windows就一个网卡,可以不写,而liux有多个网卡,写成0:0:0可以接受任意网卡信息
        #通过访问127.0.0.1:8802/get_user,form—data里输入username参数,则可看到返回信息
        

        接口返回的截图如下:



        2.通过json串方式传参
        from flask import Flask,jsonify,request
        data = {'huhy':{'age':24,'sex':'女'},
                'liuer':{'age':12,'sex':'男'}
                }
        err = {'zz':404,
               'yy':502
               }
        app = Flask(__name__)#创建一个服务,赋值给APP
        @app.route('/get_user',methods=['post'])#指定接口访问的路径,支持什么请求方式get,post
        
        #json方式传参
        def get_ss():
            username = request.json.get('username1')#获取带json串请求的username参数传入的值
            if username in data:  # 判断请求传入的参数是否在字典里
                return jsonify(data[username])
        #如果在的话,则返回data对应key的值转成的json串信息
            else:
                return jsonify(err[username])
        #如果不在的话,返回err对应key的value转成的json串信息
        app.run(host='0.0.0.0',port=8802,debug=True)
        #这个host:windows就一个网卡,可以不写,而liux有多个网卡,写成0:0:0可以接受任意网卡信息
        #通过访问127.0.0.1:8802/get_user,form—data里输入username参数,则可看到返回信息
        接口返回的截图如下:



        3.请求链接直接拼接入参方式
        from flask import Flask,jsonify,request
        data = {'huhy':{'age':24,'sex':'女'},
                'liuer':{'age':12,'sex':'男'}
                }
        err = {'zz':404,
               'yy':502
               }
        app = Flask(__name__)#创建一个服务,赋值给APP
        @app.route('/get_user',methods=['post'])#指定接口访问的路径,支持什么请求方式get,post
        
        #请求后直接拼接入参方式
        def get_ss():
            username = request.args.get('username')#使用request.args.get方式获取拼接的入参数据
            if username in data:  # 判断请求传入的参数是否在字典里
                return jsonify(data[username])
        	#如果在的话,则返回data对应key的值转成的json串信息
            else:
                return jsonify(err[username])
        	#如果不在的话,返回err对应key的value转成的json串信息
        app.run(host='0.0.0.0',port=8802,debug=True)
        #这个host:windows就一个网卡,可以不写,而liux有多个网卡,写成0:0:0可以接受任意网卡信息
        #通过访问127.0.0.1:8802/get_user,form—data里输入username参数,则可看到返回信息

        接口返回的截图,如下:




        4.request.values.get()获取请求参数的方法,不仅支持获取连接拼接的参数,而且还能获取body form填入的参数

      • 未完待续
    posted on 2018-08-13 16:37 秦瑞It行程实录 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/ruiy/p/9469129.html

    展开全文
  • python3 封装接口

    千次阅读 2016-12-03 16:28:00
    封装接口主要讲静态接口(无参数传入)、动态接口(有参数传入,不同参数返回的信息不同)。针对动态接口有三种传参方式:key_value、json串和拼接方式入参 一、封装成无参数传入的接口 from flask import Flask,...
  • Python封装

    千次阅读 2021-04-16 16:46:53
    Python基础之封装 一、什么是封装   在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其含义是其他程序无法调用。   要了解封装,离不开“私有化”,就是...
  • Python 封装

    2020-04-08 21:49:10
    1. 封装介绍 封装是面向对象三大特性最核心的一个特性 封装 ←→ 整合 2. 将封装的属性进行隐藏操作 2.1如何隐藏:在属性名前加__前缀,就会实现一个对外隐藏属性效果 该隐藏需要注意的问题: 在类外部无法直接访问...
  • 上期技术期货交易api之python封装,实现接口调用。支持windows linux. 环境需求 VS2017 python 3.6+ 使用说明 运行 pyton generate\\run.py 生成所有文件 C++编译 Windows 环境要求 vs2017 设置项目为x64,否则会提示...
  • C++封装python接口(libboost-python

    千次阅读 2016-07-13 17:34:56
    摘要在Python技术文档中可以找到关于Python与C++之间相互调用的部分。...于此同时,还提供了 Python/C API接口Python/C API Reference Manual。虽然对于简单的调用使用起来很方便,但对于复杂的结构、封装
  • corpwechat-bot是一个python封装的企业机器人&应用消息推送库,通过企业微信提供的api实现。 利用本库,你可以轻松地实现从服务器端发送一条文本、图片、视频、markdown等等消息到你的微信手机端,而不依赖于其他的...
  • 一、用ladon框架封装Python为Webservice接口  功能实现的同时,希望将接口开放给别人,而封装python接口的一个再简单不过的框架Ladon,而且提供不同的协议,包括SOAP和Json等格式的接口。虽然很简单,但是官网...
  • 1、Python 接口测试之Excel表格数据操作方法封装; 2、Python 接口测试之接口关键字封装; 3、Python 接口测试之获取接口数据封装 ;  既然我们接口测试用例写好了,测试数据也拿到了,那么就是模拟调用接口的方法...
  • 主要介绍了Python接口测试数据库封装实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了Python接口测试结果集比较封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 同样,Python接口自动化测试的时候,也可以使用关键字驱动。但是这里并不是叫关键字驱动,而是叫数据驱动。而接口测试的关键字是什么呢? 我们数据驱动的载体是Excel,那么excel里存放的数据是接口测试用例数据,...
  • 本文使用python对Bmob REST API的基本增删改查接口进行封装,方便在小程序开发时批量插入原始数据。 常用操作函数封装 #!/usr/bin/python # coding:utf-8 # Bmob后端云基本REST API封装 import requests import json...
  • 主要介绍了bluepy 一款python封装的BLE利器简单介绍,bluepy 是github上一个很好的蓝牙开源项目, 其主要功能是用python实现linux上BLE的接口。,需要的朋友可以参考下
  • 大漠插件python封装

    2017-01-23 20:48:24
    对大漠插件的python封装,用于windows环境鼠标、键盘操作,图像比较、文字识别等,基本以直接调用大漠接口为主。需要用到大漠插件及大漠综合工具 大漠插件调用库 MoveClick 移动并左键单击 SayString 发送文本,有x...
  • 主要介绍了python接口自动化如何封装获取常量的类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 文章目录什么是SWIG下载添加系统环境变量使用C++封装编写封装说明文件调用swig封装使用VS编译1. 新建动态链接库项目2. 配置输出类型3. 添加Python 库编译输出调用测试参考 什么是SWIG SWIG is a software ...
  • 对大漠插件的python封装,用于windows环境鼠标、键盘操作,图像比较、文字识别等,基本以直接调用大漠接口为主。需要用到大漠插件及大漠综合工具 大漠插件调用库 MoveClick 移动并左键单击 SayString 发送文本,有x,...
  • <p>python里如何把一个ai算法封装接口啊,兄弟们,求助!!</p>
  • python封装实例.html

    2020-02-15 09:16:13
    封装是隐藏对象中一些不希望被外部所访问到的属性或方法,学会使用getter和setter()方法,get_属性名,set_属性名,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,638
精华内容 38,655
关键字:

python封装登录接口

python 订阅