Python

C#erによるPython学習、C#とPythonの違い

スポンサーリンク

2021年現在、仕事では 「C# + C言語のDLL」の開発がほとんどで、Pythonを使う機会が無いのですが、さすがに Python を勉強するか?と思っています。

しかし、C#脳でPythonを勉強していると、なんで、こうするの?と思う事がよくあります。

でも、私がVB6.0から→(C++/CLI)→C#に乗り換えた時もC#の何がいいの?とか思ってましたが、今はC#最高!になってます。(C++/CLIはやらなきゃ良かった。。)

Python最高!になる日は来るのだろうか??

 

以下は、C#から見たときのPythonの違いを書いています。

 

構文的な違い

  • 終端文字(;)が無い
  • if文やfor文などの中カッコ({})が無い代わりに、行の最後にコロン(:)を付けてインデントを揃える
  • クラスにprivate/publicが無い。基本、publicだが代替手法がある
  • オーバーロードがない。→デフォルト引数で代替できるところまで。
  • ラベルやボタンなどのC#で言うところのコントロールはPythonでは ウィジェット(widget)という

型宣言がない

int a = 123;
string b = "abc";
a = 123
b = "abc"

型が無いのに型違いでエラーになる事もあり、なかなか慣れません。。
とくに関数に変数を渡す時がわかりずらい。
型を調べるには type()関数を使うとできます。

a = 100
b = "abc"

print(type(a))
print(type(b))

# 型が XX かどうか?
if (type(a) is int):
  print("int型です")
elif (type(a) is float):
  print("float型です")
elif (type(a) is str):
  print("str型です")
else:
  print("その他の型です")

実行結果

<class ‘int’>

<class ‘str’>

int型です

型は、全てがC#でいうところのobject型に近い

 

行のコメント

// 一行のコメント
# 一行のコメント

行の先頭にシャープ(#)を付けます。

 

複数行のコメント

/*
複数行の
コメント
*/
"""
複数行の
コメント
"""

シングルクォーテーション(‘)を3つ(”’)もしくは ダブルクォーテーション(“)を3つ(”””‘)でコメントにしたい部分を囲います。

 

関数のコメント

/// <summary>
/// aとbを足す
/// </summary>
/// <param name="a">足す値a</param>
/// <param name="b">足す値b</param>
/// <returns></returns>
private static int Add(int a, int b)
{
    return a + b;
}

C#では、関数の上の行でスラッシュ(/)を3つ(///)書くと、XMLコメントのフォーマットが表示されるので、そこにコメントを記載します。

def add(a, b):
  """
  [概要]
  aとbを足したものを返す
  [パラメータ]
  a : 足す値a
  b : 足す値b
  [注釈]
  aとbは同じ型のこと
  """
  return a + b

関数名の行の下にインデントして、シングルクォーテーション(‘)を3つ(”’)もしくは ダブルクォーテーション(“)を3つ(”””‘)でコメントにしたい部分を囲います。

一般的なコメントの定型は分からないのですが、上記プログラムのように記載すると、開発環境によって、以下のように関数の説明が表示されます。

Python学習

 

インクリメント/デクリメント

int i = 0;
i++;  // インクリメント
i--;  // デクリメント
i = 0
i += 1  # インクリメント
i -= 1  # デクリメント

値の代入は参照渡し

まずは下記のサンプルをご覧ください。

a = 100
print(id(a))
a = 200
print(id(a))
b = a
print(id(b))

実行結果

10917664

10920864

10920864

id()関数はポインタ?みたいなのを取得できる関数がすが、上記の例では a に値を入れるたびに id が変わっています。さらに b に a を代入すると、a と b の id は等しくなります。

ただし、C#の参照渡し/値渡しの感覚とは少し異なるので注意が必要です。
これに関しては、別途、記事にしたいと思います。

 

まとめ

C#とPythonの違いは、当然ながら他にもたくさんありますが、個別にまとめたいと思います。

PythonはC#と比べて、処理は遅そうだし、画像の表示(フレームレート)も遅そうだし、GUIプログラムを作るのも大変そう。。と不安に思いながら勉強していてます。

画像の表示は2000×2000画素ぐらいの画像を拡大縮小しながら遅くても30fps、できれば100fps以上で表示したいのですが、出来るのかな??

コメント

タイトルとURLをコピーしました