零基础学 Python(2023 版)
尹会生
太乙人工智能技术合伙人 & 项目总监
60050 人已学习
新⼈⾸单¥68
课程目录
已完结/共 124 讲
结束语 & 结课测试 (2讲)
零基础学 Python(2023 版)
登录|注册
留言
11
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 79|怎样将 Python 和 C++ 结合起来混合编程?
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程介绍:这次我们都做了哪些升级?
内容综述:明确学习目的
01|如何配置 Python 开发环境?
02 | 常用 IDE:如何提高开发效率?
03 | 如何站在官方文档的肩膀上自己“造轮子”?
04 | 怎样运行你的第一行代码?
05 | 怎样使用 Gitee 管理你的代码?
06 | 学习编程有问题?去这里找答案!
07|跨越门槛:Python 开发环境总结及实现原理
08 | 修炼基本功:浅析输入输出
09 | 变量:如何让计算机临时存储数据?
10|字符串(上):Python 是如何处理单词的?
11|字符串(下):Python 是如何处理单词的?
12|存储数字应该采用哪种数据类型?
13|何时使用数,何时使用字符串?
14|注释:如何写程序的说明书?
15|小试牛刀:如何制作简单计算器?
16|变量命名规范:如何编写优雅的程序?
17|告别新手村:Python 编程基础知识
18|内置数据类型包括哪几种?
19|列表如何处理同类数据?
20|常见常新:列表的常见操作
21|元组:如何处理一次性数据?
22|常见常新:集合的常见操作
23|字典:如何处理映射类型的数据?
24|常见常新:字典的常见操作(上)
25|常见常新:字典的常见操作(下)
26|小试牛刀:如何利用类型转换实现手机通讯录?(上)
27|小试牛刀:如何利用类型转换实现手机通讯录?(下)
28|常见的内置数据类型都何时使用?
29|避坑指南:内置数据类型的常见错误
30|内置数据类型参考:如何使用官方文档与帮助?
31|再回首:“内置数据类型”单元小结
32|if 语句:数据流程出现分支时,怎样编写程序?
33|match 语句:如何通过 match 关键字来处理程序的分支逻辑?
34|while 循环:需要多次重复执行某段程序时,怎么做?
35|for 循环:如何遍历一个对象里的所有元素?
36|语句嵌套:如何处理多重循环的问题?
37|小试牛刀:如何设计一个飞机大战的程序?
38|避坑指南:判断和循环中的常见错误
39|再回首:“判断循环”单元小结
40|输入:如何接收用户通过键盘输入的数据?
41|格式化输出:如何将执行结果通过屏幕输出?
42|F-strings:如何通过定义好的格式进行输出?
43 | 常见常新:文件的打开
44|文件编码:如何解决不同操作系统的文件乱码问题?
45|常见常新:文件的读写
46|常见常新:文件的关闭
47|小试牛刀:如何使用 Python 合并多个文件?
48|再回首:“输入输出与文件操作”单元小结
49|函数的定义:如何优雅地反复引用同一段代码?
50|函数的参数:怎样实现函数与外部数据通信?
51|函数的参数:当函数操作对象不固定时怎么处理?
52|函数的返回值:如何得到函数的执行结果?
53|小试牛刀:如何利用函数实现电商购物车功能?
54|避坑指南:列表作为参数传递出错了怎么办?
55|高阶函数:函数对象与函数调用的用法区别
56|装饰器:函数嵌套的定义与调用的区别
57|再回首:“函数”单元小结
58|编程思想不同会导致怎样的代码差异?
59|类与实例:如何使用面向对象的思想编写程序?
60|类的继承:如何解决代码重用的问题?
61|类的装饰器:如何改变类方法的功能?
62|小试牛刀:如何开发自动咖啡机?
63|避坑指南:类的常见错误
64|init 方法:如何为对象传递参数?
65|再回首:“类”单元小结
66 | 模块的导入:如何使用其他人编写好的代码功能?
67 | 标准库:Python 默认提供的便捷功能有哪些?
68 | 自定义模块:如何编写一个完整功能?
69 | 第三方模块的使用:如何使用其他人编写的代码?
70 | 小试牛刀:如何使用 Python 为函数求导?
71|再回首:“模块与标准库”单元小结
72|初识异常:异常的产生与分类
73|异常捕获:出现异常时,如何利用程序进行处理?
74|自定义异常捕获:如何定义业务异常?
75|避坑指南:编写捕获异常程序时经常出现的问题
76|再回首:“异常处理”单元小结
77|扩展数据类型:怎样使用更复杂的数据类型?
78|魔术方法:怎样通过类构造自己需要的数据类型?
79|怎样将 Python 和 C++ 结合起来混合编程?
80|怎样将已有算法改造成符合项目的特定算法?
81|设计模式:怎样合理组合多个函数和类?
82|Redis 数据库:怎样使用 NoSQL 数据库?
83|关系型数据库:怎样使用关系型数据库?
84|计算资源充足时,如何通过并行设计提高效率?
85|多进程间如何通信?
86|再回首:“高级数据类型与算法”单元小结
87|理论盘点:数据分析的流程及对应的 Python 库
88|理论盘点:数据采集的方法与 HTTP 协议
89|理论盘点:任务的并行执行原理
90|理论盘点:非规范化数据处理的基础与正则表达式
91|如何获取网页上的数据并存储到文件?
92|小试牛刀:如何将数据进行图形化展示?
93|再回首:“数据分析”单元小结
94|理论盘点:文件类型与对应的 Python 函数库
95|如何批量读取 Excel 文件?
96|如何实现数据的批量格式转换?
97|如何扩展数据类型?
98|再回首:“办公自动化”单元小结
99|理论盘点:Web 客户端与服务端
100|理论盘点:MVC 模型是什么?
101|如何使用Django搭建简单的Web服务器?
102|如何使用Django-admin实现文章上传?
103|如何使用Django实现文章发布?
104|再回首:“Web开发”单元小结
105|理论盘点:人脸识别的一般步骤
106|理论盘点:人脸识别常用的 Python 库有哪些?
107|怎样通过 OpenCV 采集视频信号?
108|如何训练人脸模型?
109|怎样设计人脸识别系统?
110|再回首:“计算机视觉”单元小结
111|聚焦异同:物联网与互联网有啥不一样?
112|理论盘点:基础但不简单的 TCP 协议
113|理论盘点:物模型与模组
114|如何为 ESP32 安装 MicroPython?
115|怎样通过 MQTT 协议构建消息队列?
116|小试牛刀:在 OLED 屏幕和手机远程同时显示室内温度
117|再回首:“物联网”单元小结
118|结束语:人生苦短,我用Pyhon
结课测试|来赴一场满分之约吧!
直播加餐|与AI共同编程,用ChatGPT学Python
直播加餐|用OpenAI API理解Python数据类型
直播加餐|掌握Gradio框架:为 AI Agent 程序定制界面
本节摘要

本讲相关链接
1. 使用 ctypes 库加载 C++ 编写的动态链接库,参考链接:https://docs.python.org/zh-cn/3.10/library/ctypes.html
2. 使用 pybind 将 C++ 编译为 Python 库,参考链接:https://github.com/pybind/python_example
3. 使用 Pythran 库将 Python 直接转换为 C++ 代码,参考链接:https://pypi.org/project/pythran

课后习题
请你基于 Pythran 编写一个计算圆周率的 Python 函数,并使用 C++ 调用该函数,运行后,比较一下纯 Python 代码和 C++ 代码的运行时间。

课程代码、课件及其他相关资料地址
https://gitee.com/wilsonyin/zero-basics-python

登录 后留言

全部留言(11)

  • 最新
  • 精选
不再是入门水平python的小宇
晚上搞了 3 个小时终于弄出来了,基于chatgpt帮我查找错误修改代码,最开始用的是pythran script.py来生成c++共享库,结果调用c++的时候一直说函数找不到或者有问题,然后按照老师的代码操作,其中又修改了.hpp的文件,终于执行成功了

作者回复: ChatGPT是个好帮手,相比搜索引擎,它能继续追问,是我觉得学习编程时非常有用的功能, 但是务必要让ChatGPT编写测试用例,有时候ChatGPT提供的代码有bug,不够精确。这一点不要被ChatGPT误导

2023-08-16
yanyu-xin
请问老师: window环境下,在Anaconda下的Powershell Prompt 下 pip 安装完pythran后。下一步是在哪个运行环境执行pythran命令行的? 搜索不到pythran的命令行运行文件

作者回复: 默认会安装在site-packages下,而且site-packages在python安装后会自动加入到命令搜索路径, 所以视频中安装后直接可以使用。 如果无法运行,你可以尝试先关闭终端,再打开,重新加载终端是否可行 另一个办法就是手动解决,通过python -m site 找到site-packages文件夹, 再找到pythran所在的路径,将路径加入 windows 环境变量的PATH中,仍然要重启终端生效

2023-03-04
2
Matthew
import random # 蒙特卡洛方法 def cal_pi(n:int) -> float: count = 0 for i in range(int(n)): x = random.random() y = random.random() d = (x - 0.5) ** 2 + (y - 0.5) ** 2 if d <= 0.5 ** 2: count+=1 else: pass return (4*count)/n ---------------------------------- 我将上述代码封装成 cal_pi.py ,然后通过 Pythran 得到 cal_pi.hpp ; 写了一个 cal_pi.cpp ,如下: ---------------------------------- #include "cal_pi.hpp" using namespace __pythran_cal_pi ; int main() { int n = 10000; float pi = cal_pi()(n); printf("%f\n", pi); return 0 ; } ---------------------------------- 但是得到结果却是 4.000000 ,和直接调用 Python 函数的结果不一样,问下是什么原因呢?

作者回复: 这里就不得不看 cal_pi() 函数的C++ 实现方法了, 里面可能有某些“潜在规则”导致转换之后出错, 比如Python对待某个变量是浮点数,但是转换成C++代码时,被当做了整数,就出现结果不精确的问题,解决办法是显示的使用float(变量),确保转换时不要被C++曲解成int()数据类型

2023-01-14
蓝定月
# pythran export calculate_pi(int) import random import time # 计算圆周率,使用蒙特卡洛方法 def calculate_pi(n): start_time = time.time() num_in = 0 for i in range(n): x, y = random.random(), random.random() if x * x + y * y <= 1: num_in += 1 pi = 4 * num_in / n end_time = time.time() elased_time = end_time - start_time print('time: %.5f s' % elased_time) return pi c++代码: #inclue "test_pi.hpp" using namespace __pythran_first-1; int main() { int n = 100000000; pi = calculate_pi()(n); print("%f\n",pi); return 0; } python代码用时14.15630s,结果为3.14150672 c++代码用时10.09400s,结果为3.141633
2023-12-10
依托答辩
PS D:\PythonLearning\python-homework\tong\practice> pythran -e customModule.py -p pythran.optimizations.ConstantFolding -o customModule.hpp Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "C:\Users\tong_zheng\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts\pythran.exe\__main__.py", line 4, in <module> File "C:\Users\tong_zheng\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\pythran\run.py", line 13, in <module> from distutils.errors import CompileError ModuleNotFoundError: No module named 'distutils' 执行这个命令后为什么报错ModuleNotFoundError: No module named 'distutils'
2023-11-30
MarkG
pi.py # pythran export compute_pi(int) def compute_pi(n): sum = 0.0 for i in range(n): x = (i + 0.5) / n sum += 4.0 / (1.0 + x * x) pi = sum / n return pi pi.cpp #include "pi.hpp" using namespace __pythran_pi; int main() { int n = 100000000; float pi = compute_pi()(n); printf("%f\n", pi); return 0; } c++比py,以100000000为里 执行感官: c++ 2~3s py 10s
2023-10-22
William
3.使用Pvthran库将Python直接转换为C++代码 参考链接: https://pypi.org/project/pythran 1、编写可执行的py函数 79_pyAndC.py 使用的老师的那个hello文件 2、将py转换为.hpp 文件 pythran -e 79_pyAndC.py 要转为c++的python 路径 -p pythran.optimizations.ConstantFolding(格式化) -o 79_pyAndCoutput.hpp (输出的文件) 例如: pythran -e 79_pyAndC.py -p pythran.optimizations.ConstantFolding -o 79_pyAndCoutput.hpp 会生成一个 79_pyAndCoutput.hpp 文件。 3、编写调用py函数的 cpp的程序 79_pyAndC.cpp 4、将 79_pyAndCoutput.hpp 文件 ,变异为可执行文件 `pythran-config --compiler --cflags` -std=c++11 79_pyAndC.cpp -o 79_pyAndCoutput 5、执行文件 ./79_pyAndCoutput
2023-10-08
浩仔是程序员
编译完可执行文件之后,怎么在python代码中调用呢
2023-09-09
事已至此开始撤退
这节不错
2023-04-28
聪少 Jeff
老师,之前提问我已经找到答案啦,是我没有认真看好py和cpp代码中重要信息。
2023-02-03
4
收起评论