通过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
mylist.push_back(5);
可人又说了,Python 里创造个 Dictionary 简单的跟什么一样6。
myDict = {5: "foo", 6: "bar"}
print(myDict[5])
切,C++ 本身就有 map 类型,现在又多了个哈希表 unordered_map,更像了:
auto myDict = std::unordered_map
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 从一开始就支持可变参数了。你可以定义一个变参的函数,个数可以不确定,类型也可以不一样。
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
for (auto x : il)
std::cout }
foo({4, 5, 6});
看到这里,你是否发现用 C++ 学习 Python 也不失为一种很妙的方式呢? 从这个问题的答案,可以看出 @Milo Yip 也是同道中人呢。
继续
觉得不错?想要大展拳脚? 看看这个 repo 吧。上面有更多的方式,教你用 C++ 来学习 Python.

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'article présente le fonctionnement de la base de données MySQL. Tout d'abord, vous devez installer un client MySQL, tel que MySQLWorkBench ou le client de ligne de commande. 1. Utilisez la commande MySQL-UROot-P pour vous connecter au serveur et connecter avec le mot de passe du compte racine; 2. Utilisez Createdatabase pour créer une base de données et utilisez Sélectionner une base de données; 3. Utilisez CreateTable pour créer une table, définissez des champs et des types de données; 4. Utilisez InsertInto pour insérer des données, remettre en question les données, mettre à jour les données par mise à jour et supprimer les données par Supprimer. Ce n'est qu'en maîtrisant ces étapes, en apprenant à faire face à des problèmes courants et à l'optimisation des performances de la base de données que vous pouvez utiliser efficacement MySQL.

La clé du contrôle des plumes est de comprendre sa nature progressive. Le PS lui-même ne fournit pas la possibilité de contrôler directement la courbe de gradient, mais vous pouvez ajuster de manière flexible le rayon et la douceur du gradient par plusieurs plumes, des masques correspondants et des sélections fines pour obtenir un effet de transition naturel.

MySQL a une version communautaire gratuite et une version d'entreprise payante. La version communautaire peut être utilisée et modifiée gratuitement, mais le support est limité et convient aux applications avec des exigences de stabilité faibles et des capacités techniques solides. L'Enterprise Edition fournit une prise en charge commerciale complète pour les applications qui nécessitent une base de données stable, fiable et haute performance et disposées à payer pour le soutien. Les facteurs pris en compte lors du choix d'une version comprennent la criticité des applications, la budgétisation et les compétences techniques. Il n'y a pas d'option parfaite, seulement l'option la plus appropriée, et vous devez choisir soigneusement en fonction de la situation spécifique.

La défaillance de l'installation de MySQL est généralement causée par le manque de dépendances. Solution: 1. Utilisez System Package Manager (tel que Linux Apt, YUM ou DNF, Windows VisualC Redistribuable) pour installer les bibliothèques de dépendance manquantes, telles que SudoaptInstallLiBMysQlClient-Dev; 2. Vérifiez soigneusement les informations d'erreur et résolvez les dépendances complexes une par une; 3. Assurez-vous que la source du gestionnaire de package est correctement configurée et peut accéder au réseau; 4. Pour Windows, téléchargez et installez les bibliothèques d'exécution nécessaires. Développer l'habitude de lire des documents officiels et de faire bon usage des moteurs de recherche peut résoudre efficacement les problèmes.

L'optimisation des performances MySQL doit commencer à partir de trois aspects: configuration d'installation, indexation et optimisation des requêtes, surveillance et réglage. 1. Après l'installation, vous devez ajuster le fichier my.cnf en fonction de la configuration du serveur, tel que le paramètre innodb_buffer_pool_size, et fermer query_cache_size; 2. Créez un index approprié pour éviter les index excessifs et optimiser les instructions de requête, telles que l'utilisation de la commande Explication pour analyser le plan d'exécution; 3. Utilisez le propre outil de surveillance de MySQL (ShowProcessList, Showstatus) pour surveiller la santé de la base de données, et sauvegarde régulièrement et organisez la base de données. Ce n'est qu'en optimisant en continu ces étapes que les performances de la base de données MySQL peuvent être améliorées.

La plume PS est un effet flou du bord de l'image, qui est réalisé par la moyenne pondérée des pixels dans la zone de bord. Le réglage du rayon de la plume peut contrôler le degré de flou, et plus la valeur est grande, plus elle est floue. Le réglage flexible du rayon peut optimiser l'effet en fonction des images et des besoins. Par exemple, l'utilisation d'un rayon plus petit pour maintenir les détails lors du traitement des photos des caractères et l'utilisation d'un rayon plus grand pour créer une sensation brumeuse lorsque le traitement de l'art fonctionne. Cependant, il convient de noter que trop grand, le rayon peut facilement perdre des détails de bord, et trop petit, l'effet ne sera pas évident. L'effet de plumes est affecté par la résolution de l'image et doit être ajusté en fonction de la compréhension de l'image et de la saisie de l'effet.

Les plumes de PS peuvent entraîner une perte de détails d'image, une saturation des couleurs réduite et une augmentation du bruit. Pour réduire l'impact, il est recommandé d'utiliser un rayon de plumes plus petit, de copier la couche puis de plume, et de comparer soigneusement la qualité d'image avant et après les plumes. De plus, les plumes ne conviennent pas à tous les cas, et parfois les outils tels que les masques conviennent plus à la gestion des bords de l'image.

La plume PS permet aux bords de l'image de se brouiller et de passer à la transition, et est largement utilisé, notamment le traitement des bords de sélection, la création d'arrière-plans flous et des effets de halo. Il utilise un algorithme pour traiter progressivement la couleur et la transparence des pixels de bord, et l'intensité est contrôlée par le rayon de la plume. Dans une utilisation réelle, le rayon doit être ajusté en fonction de l'image et de l'effet pour éviter l'excès ou insuffisant. Dans le même temps, faites attention à la précision de la sélection et à la rétention des détails des images à contraste élevé, à la pratique et à l'observer davantage et à utiliser de manière flexible pour améliorer le niveau d'édition photo.
