C++でPythonを学ぶ

4196 ワード

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 << x;

タイプ自動導出
Pythonには本当にタイプの概念がありますか?(笑)
 
  
x = "Hello World"
print(x)

C++11もこの技を学んだが、おばあさんの巻き布(auto)を残しただけだ.
 
  
auto x = "Hello World";
std::cout << x;

メタグループ
Pythonの元組(tuple)はうらやましくてたまらない.Pythonは最初からあった.
 
  
triple = (5, "Hello", True)
print(triple[0])

はい、C++11で猫の虎を描きます.
 
  
auto triple = std::make_tuple(5, "hello", true);
std::cout << std::get<0>(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を作るのは簡単で何と同じだと言われています.
 
  
myDict = {5: "foo", 6: "bar"}
print(myDict[5])

カット、C++自体にmapタイプがあり、今またハッシュテーブルunordered_が増えました.map、もっと似ています:
 
  
auto myDict = std::unordered_map{ { 5, "foo" }, { 6, "bar" } };
std::cout << myDict[5];

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) < std::abs(y); }); Pythonは2001年にNested Scopesの技術を導入した.
 
  
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 << adder(5)(5);

組み込みアルゴリズム
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 5 th 6.2.6)をサポートすることができる.
 
  
void foo(std::initializer_list il) {
    for (auto x : il)
        std::cout << x;
}

foo({4, 5, 6});


ここを見て、C++でPythonを勉強するのも素晴らしい方法だと思いますか?この質問の答えから、@Milo Yipも同じ道の中の人だとわかりますね.
続行
いいと思う?こぶしを広げたい?このrepoを見てみましょう.C++でPythonを学ぶ方法をもっと教えてあげます.