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つ(”””‘)でコメントにしたい部分を囲います。
一般的なコメントの定型は分からないのですが、上記プログラムのように記載すると、開発環境によって、以下のように関数の説明が表示されます。
インクリメント/デクリメント
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以上で表示したいのですが、出来るのかな??
コメント