首页 后端开发 Python教程 通过C++学习Python

通过C++学习Python

Jun 10, 2016 pm 03:18 PM
c++ python

我会随便说,C++ 近年来开始"抄袭" Python 么?我只会说,我在用 C++ 来学习 Python.

不信?来跟着我学?

字面量

Python 早在 2.6 版本中就支持将二进制作为字面量了1, 最近 C++14 逐步成熟,刚刚支持这么干2:

复制代码 代码如下:

static const int primes = 0b10100000100010100010100010101100;

更不用说 Python 在 1.5 时代就有了 raw string literals 的概念3,咱们 C++ 也不算晚,C++11里也有了类似做法:

复制代码 代码如下:

const char* path = r"C:\Python27\Doc";
Range Loop

Python 写 for 循环是一件非常舒畅的事情:

复制代码 代码如下:

for x in mylist:
    print(x);

大家都知道了,C++11里我总算也能做同样的事情了:

复制代码 代码如下:

for (int x : mylist)
    std::cout

类型自动推导

Python 中真的有类型的概念吗?(笑

复制代码 代码如下:

x = "Hello World"
print(x)

C++11 也学会了这招,只不过保留了老太太的裹脚布(auto)。

复制代码 代码如下:

auto x = "Hello World";
std::cout

元组

Python 里的元组(tuple)让人羡慕已久,这玩意 Python 从一开始就有了。

复制代码 代码如下:

triple = (5, "Hello", True)
print(triple[0])

好嘛,我来用 C++11 照猫画虎:

复制代码 代码如下:

auto triple = std::make_tuple(5, "hello", true);
std::cout (triple);

有人说了,Python 大法好,还能逆向解析成变量呢

复制代码 代码如下:

x, y, z = triple

哼,C++难道不行?

复制代码 代码如下:

std::tie(x, y, z) = triple;

Lists

Python 里,Lists 是内置类型4,创建一个 list 无比简单:

复制代码 代码如下:

mylist = [1, 2, 3, 4]
mylist.append(5);

以前我们可以说,这有啥,std::vector差不多也能干这事。可 Python 粉较真了,您能像上面那样初始化吗?这话让 Bjarne Stroustrup 老爹听到了,暗自羞愧,于是在 C++11 里整出了个 initializer_list 做出回应5。

复制代码 代码如下:

auto mylist = std::vector{1,2,3,4};
mylist.push_back(5);

可人又说了,Python 里创造个 Dictionary 简单的跟什么一样6。

复制代码 代码如下:

myDict = {5: "foo", 6: "bar"}
print(myDict[5])

切,C++ 本身就有 map 类型,现在又多了个哈希表 unordered_map,更像了:

复制代码 代码如下:

auto myDict = std::unordered_map{ { 5, "foo" }, { 6, "bar" } };
std::cout

Lambda 表达式

Python 祭出大神器,1994年就有的 Lambda 表达式:

复制代码 代码如下:

mylist.sort(key = lambda x: abs(x))

C++11 开始了拙劣的模仿:

std::sort(mylist.begin(), mylist.end(), [](int x, int y){ return std::abs(x) 而 Python 在 2001 年加了一把力,引入了 Nested Scopes 的技术7:

复制代码 代码如下:

def adder(amount):
return lambda x: x + amount
...
print(adder(5)(5))

C++11 不甘示弱,整出了 capture-list 的概念8。

复制代码 代码如下:

auto adder(int amount) {
    return [=](int x){ return x + amount; };
}
...
std::cout

内置算法

Python 里有诸多内置的强大算法函数,如 filter:

result = filter(mylist, lambda x: x >= 0)
C++11 倒也可以用 std::copy_if 干同样的事情:

复制代码 代码如下:

auto result = std::vector{};
std::copy_if(mylist.begin(), mylist.end(), std::back_inserter(result), [](int x){ return x >= 0; });

这样的函数在 中屡见不鲜,而且都在与 Python 中的某种功能遥相呼应:transform, any_of, all_of, min, max.

可变参数

Python 从一开始就支持可变参数了。你可以定义一个变参的函数,个数可以不确定,类型也可以不一样。

复制代码 代码如下:

def foo(*args):
    for x in args:
        print(x);
foo(5, "hello", True)

C++11 里 initializer_list 可以支持同类型个数可变的参数(C++ Primer 5th 6.2.6)。

复制代码 代码如下:

void foo(std::initializer_list il) {
    for (auto x : il)
        std::cout }

foo({4, 5, 6});

看到这里,你是否发现用 C++ 学习 Python 也不失为一种很妙的方式呢? 从这个问题的答案,可以看出 @Milo Yip 也是同道中人呢。

继续

觉得不错?想要大展拳脚? 看看这个 repo 吧。上面有更多的方式,教你用 C++ 来学习 Python.

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

mysql安装后怎么使用 mysql安装后怎么使用 Apr 08, 2025 am 11:48 AM

文章介绍了MySQL数据库的上手操作。首先,需安装MySQL客户端,如MySQLWorkbench或命令行客户端。1.使用mysql-uroot-p命令连接服务器,并使用root账户密码登录;2.使用CREATEDATABASE创建数据库,USE选择数据库;3.使用CREATETABLE创建表,定义字段及数据类型;4.使用INSERTINTO插入数据,SELECT查询数据,UPDATE更新数据,DELETE删除数据。熟练掌握这些步骤,并学习处理常见问题和优化数据库性能,才能高效使用MySQL。

PS羽化如何控制过渡的柔和度? PS羽化如何控制过渡的柔和度? Apr 06, 2025 pm 07:33 PM

羽化控制的关键在于理解其渐变本质。PS本身不提供直接控制渐变曲线的选项,但你可以通过多次羽化、配合蒙版、精细选区,灵活调整半径和渐变柔和度,实现自然过渡效果。

mysql 是否要付费 mysql 是否要付费 Apr 08, 2025 pm 05:36 PM

MySQL 有免费的社区版和收费的企业版。社区版可免费使用和修改,但支持有限,适合稳定性要求不高、技术能力强的应用。企业版提供全面商业支持,适合需要稳定可靠、高性能数据库且愿意为支持买单的应用。选择版本时考虑的因素包括应用关键性、预算和技术技能。没有完美的选项,只有最合适的方案,需根据具体情况谨慎选择。

mysql安装后怎么优化数据库性能 mysql安装后怎么优化数据库性能 Apr 08, 2025 am 11:36 AM

MySQL性能优化需从安装配置、索引及查询优化、监控与调优三个方面入手。1.安装后需根据服务器配置调整my.cnf文件,例如innodb_buffer_pool_size参数,并关闭query_cache_size;2.创建合适的索引,避免索引过多,并优化查询语句,例如使用EXPLAIN命令分析执行计划;3.利用MySQL自带监控工具(SHOWPROCESSLIST,SHOWSTATUS)监控数据库运行状况,定期备份和整理数据库。通过这些步骤,持续优化,才能提升MySQL数据库性能。

PS羽化怎么设置? PS羽化怎么设置? Apr 06, 2025 pm 07:36 PM

PS羽化是一种图像边缘模糊效果,通过在边缘区域对像素加权平均实现。设置羽化半径可以控制模糊程度,数值越大越模糊。灵活调整半径可根据图像和需求优化效果,如处理人物照片时使用较小半径保持细节,处理艺术作品时使用较大半径营造朦胧感。但需注意,半径过大易丢失边缘细节,过小则效果不明显。羽化效果受图像分辨率影响,且需要根据图像理解和效果把握进行调整。

MySQL安装时提示缺少依赖项如何解决 MySQL安装时提示缺少依赖项如何解决 Apr 08, 2025 pm 12:00 PM

MySQL安装失败通常因缺少依赖项导致。解决方法:1.使用系统包管理器(如Linux的apt、yum或dnf,Windows的VisualC Redistributable)安装缺失的依赖库,例如sudoaptinstalllibmysqlclient-dev;2.仔细检查错误信息,逐一解决复杂的依赖关系;3.确保包管理器源配置正确,能访问网络;4.对于Windows,下载安装必要的运行库。养成阅读官方文档和善用搜索引擎的习惯,能有效解决问题。

PS羽化可以用来制作什么效果? PS羽化可以用来制作什么效果? Apr 06, 2025 pm 07:00 PM

PS羽化可让图像边缘模糊过渡,应用广泛,包括处理选区边缘,制作虚化背景和光晕效果等。它通过算法在边缘像素颜色和透明度上进行渐变处理,强度由羽化半径控制。在实际使用中,应根据图像和效果调节半径,避免过度或不足。同时,注意选区准确性和高对比度图像的细节保留,多多练习和观察,灵活运用羽化提升修图水平。

PS羽化对图像质量有什么影响? PS羽化对图像质量有什么影响? Apr 06, 2025 pm 07:21 PM

PS羽化会导致图像细节丢失、色彩饱和度降低和噪点增加。为了减少影响,建议使用较小的羽化半径,复制图层后再羽化,以及仔细对比羽化前后图像质量。此外,羽化并不适用于所有情况,有时蒙版等工具更适合处理图像边缘。

See all articles