 7-韦泽华-一键将C和Cpp代码转换为Python能调用的代码一键将 C/C++ 代码转换为 Python 能调用的代码 韦泽华 大家以前都是怎样调用C++代码呢? 1. Cython 2. boost.python/pybind11 3. ctypes 先不讨论这些工具的优劣 先给大家介绍一下 如何使用c2py来调用C++代码 在此之前给大家看一下要调用的C++代码源文件 • 我肯定是会拿上期所的API来作示范: (看一眼就好了) so)文件 • 第二步,调用代码,并享受完备的type hint。 与其他工具的用法进行一下比较? 与pybind11进行比较 • c2py:两个命令 • pybind11:1137行代码? • 不, 其实是11,376行代码: 跟pybind11比算个什么事?根本 不在一个次元! 要比就和不需要写C++代码的工 具比! 与ctypes进行比较 • c2py:调用代码,并享受type hint。 hint。 • ctypes:调用代码?? 如果把调用C++代码当作吃饭,那么: 工具 科技等级 手撸Cython 手撕猎物;钻木取火 Boost.python/pybind11 用猎枪打猎;在现代化的厨房里做菜 ctypes 在某个便利店里买吃的。(只卖番茄炒蛋) c2py 外卖app 所以 调用C++,认准 现代化的外卖app:c2py https://github.com/nanoric/c2py0 码力 | 12 页 | 1.24 MB | 1 年前3 7-韦泽华-一键将C和Cpp代码转换为Python能调用的代码一键将 C/C++ 代码转换为 Python 能调用的代码 韦泽华 大家以前都是怎样调用C++代码呢? 1. Cython 2. boost.python/pybind11 3. ctypes 先不讨论这些工具的优劣 先给大家介绍一下 如何使用c2py来调用C++代码 在此之前给大家看一下要调用的C++代码源文件 • 我肯定是会拿上期所的API来作示范: (看一眼就好了) so)文件 • 第二步,调用代码,并享受完备的type hint。 与其他工具的用法进行一下比较? 与pybind11进行比较 • c2py:两个命令 • pybind11:1137行代码? • 不, 其实是11,376行代码: 跟pybind11比算个什么事?根本 不在一个次元! 要比就和不需要写C++代码的工 具比! 与ctypes进行比较 • c2py:调用代码,并享受type hint。 hint。 • ctypes:调用代码?? 如果把调用C++代码当作吃饭,那么: 工具 科技等级 手撸Cython 手撕猎物;钻木取火 Boost.python/pybind11 用猎枪打猎;在现代化的厨房里做菜 ctypes 在某个便利店里买吃的。(只卖番茄炒蛋) c2py 外卖app 所以 调用C++,认准 现代化的外卖app:c2py https://github.com/nanoric/c2py0 码力 | 12 页 | 1.24 MB | 1 年前3
 PyWebIO v0.3.0 使用手册bmi() 如果没有使用PywWebIO,这只是一个非常简单的脚本,而通过使用 PywWebIO提供的输入输出函数,你可以在浏览器中与代码进行交互: 将上面代码最后一行对 bmi() 的直接调用改为使用 pywebio.start_server(bmi, port=80) 便可以在80端口提供 bmi() 服务。 将 bmi() 服务整合到现有的Web 框架请参考 与Web框架集成 Documentation '年龄不能为负数!') 注解 PyWebIO 根据是否在输入函数中传入 name 参数来判断输入函数是在 input_group 中还是被单独调用。 所以当你想要单独调用一个输入函数时, 请不要设置 name 参数;而在 input_group 中调用输入函数时,务必提供 name 参数 输出 输出函数都定义在 pywebio.output 模块中,可以使用 from pywebio.output 'B'], ['C', 'D']])] ]) 上例显示效果如下: 事件回调 PyWebIO把程序与用户的交互分成了输入和输出两部分:输入函数为阻塞式调 用,在用户提交表单之前将不会返回;对输出函数的调用将会立刻将内容输出 至浏览器。 这非常符合控制台程序的编写逻辑。但PyWebIO能做的还远远不止 这些,PyWebIO还允许你输出一些控件,当控件被点击时执行提供的回调函 数,就像编写GUI程序一样。0 码力 | 72 页 | 8.55 MB | 1 年前3 PyWebIO v0.3.0 使用手册bmi() 如果没有使用PywWebIO,这只是一个非常简单的脚本,而通过使用 PywWebIO提供的输入输出函数,你可以在浏览器中与代码进行交互: 将上面代码最后一行对 bmi() 的直接调用改为使用 pywebio.start_server(bmi, port=80) 便可以在80端口提供 bmi() 服务。 将 bmi() 服务整合到现有的Web 框架请参考 与Web框架集成 Documentation '年龄不能为负数!') 注解 PyWebIO 根据是否在输入函数中传入 name 参数来判断输入函数是在 input_group 中还是被单独调用。 所以当你想要单独调用一个输入函数时, 请不要设置 name 参数;而在 input_group 中调用输入函数时,务必提供 name 参数 输出 输出函数都定义在 pywebio.output 模块中,可以使用 from pywebio.output 'B'], ['C', 'D']])] ]) 上例显示效果如下: 事件回调 PyWebIO把程序与用户的交互分成了输入和输出两部分:输入函数为阻塞式调 用,在用户提交表单之前将不会返回;对输出函数的调用将会立刻将内容输出 至浏览器。 这非常符合控制台程序的编写逻辑。但PyWebIO能做的还远远不止 这些,PyWebIO还允许你输出一些控件,当控件被点击时执行提供的回调函 数,就像编写GUI程序一样。0 码力 | 72 页 | 8.55 MB | 1 年前3
 PyWebIO v0.3.0 使用手册PywWebIO 提供的输入输出函数,你可 以在浏览器中与代码进行交互: 8 Chapter 3. Hello, world PyWebIO, 发布 0.3.0 将上面代码最后一行对 bmi() 的直接调用改为使用pywebio.start_server(bmi, port=80) 便可以 在 80 端口提供 bmi() 服务。 将 bmi() 服务整合到现有的 Web 框架请参考与 Web 框架集成 '年龄不能为负数!') 注解: PyWebIO 根据是否在输入函数中传入 name 参数来判断输入函数是在 input_group 中还是被单独 调用。所以当你想要单独调用一个输入函数时,请不要设置 name 参数;而在 input_group 中调用输入函 数时,务必提供 name 参数 4.1.2 输出 输出函数都定义在pywebio.output 模块中,可以使用 from pywebio put_table([['A', 'B'], ['C', 'D']])] ]) 上例显示效果如下: 事件回调 PyWebIO 把程序与用户的交互分成了输入和输出两部分:输入函数为阻塞式调用,在用户提交表单之前将不 会返回;对输出函数的调用将会立刻将内容输出至浏览器。这非常符合控制台程序的编写逻辑。但 PyWebIO 能做的还远远不止这些,PyWebIO 还允许你输出一些控件,当控件被点击时执行提供的回调函数,就像编写0 码力 | 70 页 | 1.41 MB | 1 年前3 PyWebIO v0.3.0 使用手册PywWebIO 提供的输入输出函数,你可 以在浏览器中与代码进行交互: 8 Chapter 3. Hello, world PyWebIO, 发布 0.3.0 将上面代码最后一行对 bmi() 的直接调用改为使用pywebio.start_server(bmi, port=80) 便可以 在 80 端口提供 bmi() 服务。 将 bmi() 服务整合到现有的 Web 框架请参考与 Web 框架集成 '年龄不能为负数!') 注解: PyWebIO 根据是否在输入函数中传入 name 参数来判断输入函数是在 input_group 中还是被单独 调用。所以当你想要单独调用一个输入函数时,请不要设置 name 参数;而在 input_group 中调用输入函 数时,务必提供 name 参数 4.1.2 输出 输出函数都定义在pywebio.output 模块中,可以使用 from pywebio put_table([['A', 'B'], ['C', 'D']])] ]) 上例显示效果如下: 事件回调 PyWebIO 把程序与用户的交互分成了输入和输出两部分:输入函数为阻塞式调用,在用户提交表单之前将不 会返回;对输出函数的调用将会立刻将内容输出至浏览器。这非常符合控制台程序的编写逻辑。但 PyWebIO 能做的还远远不止这些,PyWebIO 还允许你输出一些控件,当控件被点击时执行提供的回调函数,就像编写0 码力 | 70 页 | 1.41 MB | 1 年前3
 Python 标准库参考指南 3.7.13 itertools --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . 301 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . 314 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1645 36 Unix 专有服务 1649 36.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1649 36.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1655 36.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1657 36.10 pipes --- 终端管道接口0 码力 | 1846 页 | 9.09 MB | 9 月前3 Python 标准库参考指南 3.7.13 itertools --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . 301 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . 314 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1645 36 Unix 专有服务 1649 36.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1649 36.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1655 36.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1657 36.10 pipes --- 终端管道接口0 码力 | 1846 页 | 9.09 MB | 9 月前3
 Python 标准库参考指南 3.7.13 --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 315 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . . . 329 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1751 36 Unix 专有服务 1753 36.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1753 36.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1760 36.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1761 36.10 pipes --- 终端管道接口0 码力 | 1961 页 | 9.14 MB | 9 月前3 Python 标准库参考指南 3.7.13 --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 315 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . . . 329 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1751 36 Unix 专有服务 1753 36.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1753 36.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1760 36.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1761 36.10 pipes --- 终端管道接口0 码力 | 1961 页 | 9.14 MB | 9 月前3
 Python 标准库参考指南 3.8.20 itertools --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . 315 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . 328 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1720 35 Unix 专有服务 1723 35.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723 35.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1729 35.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1731 35.10 pipes --- 终端管道接口0 码力 | 1927 页 | 9.69 MB | 9 月前3 Python 标准库参考指南 3.8.20 itertools --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . 315 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . 328 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1720 35 Unix 专有服务 1723 35.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723 35.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1729 35.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1731 35.10 pipes --- 终端管道接口0 码力 | 1927 页 | 9.69 MB | 9 月前3
 Python 标准库参考指南 3.8.20 itertools --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . 315 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . 328 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1720 35 Unix 专有服务 1723 35.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723 35.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1729 35.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1731 35.10 pipes --- 终端管道接口0 码力 | 1927 页 | 9.69 MB | 9 月前3 Python 标准库参考指南 3.8.20 itertools --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . 315 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . 328 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1720 35 Unix 专有服务 1723 35.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723 35.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1729 35.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1731 35.10 pipes --- 终端管道接口0 码力 | 1927 页 | 9.69 MB | 9 月前3
 Python 标准库参考指南 3.8.20 --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 337 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . . . 351 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1837 35 Unix 专有服务 1841 35.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1841 35.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1848 35.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1849 35.10 pipes --- 终端管道接口0 码力 | 2052 页 | 9.74 MB | 9 月前3 Python 标准库参考指南 3.8.20 --- 为高效循环而创建迭代器的函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 337 10.2 functools --- 高阶函数和可调用对象上的操作 . . . . . . . . . . . . . . . . . . . . . . . . . . 351 10.3 operator --- 标准运算符替代函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1837 35 Unix 专有服务 1841 35.1 posix --- 最常见的 POSIX 系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1841 35.2 pwd --- 用户密码数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1848 35.9 fcntl ——系统调用 fcntl 和 ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1849 35.10 pipes --- 终端管道接口0 码力 | 2052 页 | 9.74 MB | 9 月前3
 PyWebIO v1.0.3 使用手册bmi() 如果没有使用PyWebIO,这只是一个非常简单的脚本,而通过使用PyWebIO提 供的输入输出函数,你可以在浏览器中与代码进行交互: 将上面代码最后一行对 bmi() 的直接调用改为使用 pywebio.start_server(bmi, port=80) 便可以在80端口提供 bmi() 服务( 在线Demo [http://pywebio- demos.demo.wangweimin 你可以按照编写控制台程序的逻辑编写PyWebIO应用,只不过这里的终端变成 了浏览器。通过PyWebIO提供的命令式API, 你可以简单地调用 put_text 、 put_image 、 put_table 等函数输出文本、图片、表格等内容到浏览器,也可 以调用 input 、 select 、 file_upload 等函数在浏览器上显示不同表单来接收 用户的输入。此外PyWebIO中还提供了点击事件、布局等支持,让你可以使用 一个Demo链接,点击后可 以在线预览代码的运行效果。 输入 输入函数都定义在 pywebio.input 模块中,可以使用 from pywebio.input import * 引入。 调用输入函数会在浏览器上弹出一个输入表单来获取输入。PyWebIO的输入函 数是阻塞式的(和Python内置的 input 一样),在表单被成功提交之前,输入 函数不会返回。 基本输入 首先是一些基本类型的输入0 码力 | 106 页 | 7.34 MB | 1 年前3 PyWebIO v1.0.3 使用手册bmi() 如果没有使用PyWebIO,这只是一个非常简单的脚本,而通过使用PyWebIO提 供的输入输出函数,你可以在浏览器中与代码进行交互: 将上面代码最后一行对 bmi() 的直接调用改为使用 pywebio.start_server(bmi, port=80) 便可以在80端口提供 bmi() 服务( 在线Demo [http://pywebio- demos.demo.wangweimin 你可以按照编写控制台程序的逻辑编写PyWebIO应用,只不过这里的终端变成 了浏览器。通过PyWebIO提供的命令式API, 你可以简单地调用 put_text 、 put_image 、 put_table 等函数输出文本、图片、表格等内容到浏览器,也可 以调用 input 、 select 、 file_upload 等函数在浏览器上显示不同表单来接收 用户的输入。此外PyWebIO中还提供了点击事件、布局等支持,让你可以使用 一个Demo链接,点击后可 以在线预览代码的运行效果。 输入 输入函数都定义在 pywebio.input 模块中,可以使用 from pywebio.input import * 引入。 调用输入函数会在浏览器上弹出一个输入表单来获取输入。PyWebIO的输入函 数是阻塞式的(和Python内置的 input 一样),在表单被成功提交之前,输入 函数不会返回。 基本输入 首先是一些基本类型的输入0 码力 | 106 页 | 7.34 MB | 1 年前3
 PyWebIO v1.0.3 使用手册PyWebIO,这只是一个非常简单的脚本,而通过使用 PyWebIO 提供的输入输出函数,你可以 7 PyWebIO, 发布 1.0.3 在浏览器中与代码进行交互: 将上面代码最后一行对 bmi() 的直接调用改为使用pywebio.start_server(bmi, port=80) 便可以 在 80 端口提供 bmi() 服务 ( 在线 Demo )。 将 bmi() 服务整合到现有的 Web 框架请参考与 你可以按照编写控制台程序的逻辑编写 PyWebIO 应用,只不过这里的终端变成了浏览器。通过 PyWebIO 提 供的命令式 API,你可以简单地调用 put_text 、put_image 、put_table 等函数输出文本、图片、表格 等内容到浏览器,也可以调用 input 、select 、file_upload 等函数在浏览器上显示不同表单来接收用 户的输入。此外 PyWebIO 中还提供了 链接,点击后可以在线预览代码的运行效果。 9 PyWebIO, 发布 1.0.3 4.1.1 输入 输入函数都定义在pywebio.input 模块中,可以使用 from pywebio.input import * 引入。 调用输入函数会在浏览器上弹出一个输入表单来获取输入。PyWebIO 的输入函数是阻塞式的(和 Python 内 置的 input 一样),在表单被成功提交之前,输入函数不会返回。 基本输入 首先是一些基本类型的输入0 码力 | 94 页 | 1.71 MB | 1 年前5 PyWebIO v1.0.3 使用手册PyWebIO,这只是一个非常简单的脚本,而通过使用 PyWebIO 提供的输入输出函数,你可以 7 PyWebIO, 发布 1.0.3 在浏览器中与代码进行交互: 将上面代码最后一行对 bmi() 的直接调用改为使用pywebio.start_server(bmi, port=80) 便可以 在 80 端口提供 bmi() 服务 ( 在线 Demo )。 将 bmi() 服务整合到现有的 Web 框架请参考与 你可以按照编写控制台程序的逻辑编写 PyWebIO 应用,只不过这里的终端变成了浏览器。通过 PyWebIO 提 供的命令式 API,你可以简单地调用 put_text 、put_image 、put_table 等函数输出文本、图片、表格 等内容到浏览器,也可以调用 input 、select 、file_upload 等函数在浏览器上显示不同表单来接收用 户的输入。此外 PyWebIO 中还提供了 链接,点击后可以在线预览代码的运行效果。 9 PyWebIO, 发布 1.0.3 4.1.1 输入 输入函数都定义在pywebio.input 模块中,可以使用 from pywebio.input import * 引入。 调用输入函数会在浏览器上弹出一个输入表单来获取输入。PyWebIO 的输入函数是阻塞式的(和 Python 内 置的 input 一样),在表单被成功提交之前,输入函数不会返回。 基本输入 首先是一些基本类型的输入0 码力 | 94 页 | 1.71 MB | 1 年前5
共 164 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17














 
 