.NETとの比較

Top / Coding / Python / .NETとの比較
 

ページ構成
−Top
  • −Coding
    • +.NET
    • +CUDA
    • +JavaScript
    • +MSOffice
    • +PHP
    • +PowerShell
    • −Python
      • −.NETとの比較
        • ・クラス定義
        • ・ライブラリ
      • ・CloudVision
      • ・Excel
      • +GoogleAppEngine
      • ・Grumpy
      • ・PDFのハンドリング
      • +WebFramework
      • +Webスクレイピング
      • ・クリップボード
      • ・開発環境
      • +言語仕様
      • ・未読
    • +Ruby
    • +VBA
    • +misc
    • +画像処理
  • +Server
  • +memo
  • +misc
  • +カメラ
  • +科学技術
  • +記事
  • +数値解析
最新の10件
2018-01-16 更新
  • misc/Hardware/各種プロセッサの倍精度演算性能
2017-11-27 更新
  • Coding/misc/raspberrypi
2017-11-02 更新
  • Coding/.NET/NuGetパッケージの作成
2017-10-19 更新
  • Coding/MSOffice/VSTO/ThisAddin_Startupに処理を書く問題が起きる
2017-06-16 更新
  • Coding/.NET/VisualStudioビルドイベント
2017-05-28 更新
  • misc/Hardware/タブレット向けCPU/複製
2017-05-25 更新
  • Coding/Python/CloudVision
2017-05-24 更新
  • misc/ロードバイク/サイクルロード/奈良
2017-05-11 更新
  • misc/ソフトウェア/文章/文章校正、作成支援ツール
2017-03-15 更新
  • misc/ソフトウェア/プロジェクト管理ツール

Powered By

b_pukiwiki.official.png

edit

  • はじめに
  • 文法比較
    • ライブラリを使用するための手順
      • 「ライブラリを使用する」とは
      • 個人的メモ
      • 文法
    • メイン関数
      • はじめに
      • 文法
    • コメント
    • 制御構文
      • if
      • switch
      • while
      • foreach
      • for
      • ※ ループ構文の制御キーワード
      • checked, uncheked
      • 例外処理
    • in, not in
    • 三項演算子
    • データ構造
  • 関数型言語的な使い方
    • 匿名関数
      • 文法
    • カリー化関数
      • はじめに
      • 文法
  • その他の言語との比較

はじめに †

タイトルに偽り有ります。

.NETじゃなくて、C#との比較。

pukiwikiの制限でタイトルに#が使えないのでタイトルには.NETと書きました。

また、比較に用いているのはそれぞれ

  • Python2.5〜
  • C# 4.0

    のつもりです。
↑

文法比較 †

↑

ライブラリを使用するための手順 †

↑

「ライブラリを使用する」とは †

 ライブラリを使用するために、コーディングする上で必要なことは以下の2点

  • 参照設定
  • デフォルト名前空間の設定

 ライブラリ(Pythonではモジュールに対応)の使用にあたっては、実行されるソースコードを記載したファイルからライブラリが参照できるように設定される(参照設定される)ことが最低限必要となる。

 ここで、参照設定がされただけでは、単にライブラリ内のメソッドを使用できるに過ぎず、実際にソースコード上で使用するにあたっては、ライブラリ内の名前空間+メソッド名を記載する必要がある。毎回、名前空間+メソッド名を記載するのは非効率的なため、特段問題が生じない限りにおいては、デフォルトの名前空間を設定し、ライブラリ内のメソッド使用時に、名前空間の記載を省略できるように設定することが、望ましい。

↑

個人的メモ †

名前空間は、同じクラス名で中身の違うクラスを区別するために付けられたIDのようなもの。
クラス名とは、別物。ライブラリ名と一致するとは限らない。
ただし、.NETの場合DLL名を『名前空間+クラス名』とすることが推奨されている。(ので、うっかり名前空間とクラス名を同じものと理解してしまっても止むを得ない。と思う。)

C#の場合、1つのライブラリの中に、複数の名前空間があり、各名前空間の中に複数のクラスがある。
Pythonの場合、モジュール名と名前空間とは同一であり、モジュール内に複数のクラスがある。

↑

文法 †

C#Python
ライブラリXを使用(別途設定)import X
ライブラリX内の名前空間Aを使用するようにデフォルト名前空間を設定using Aimport A from X
AにBという別名をつけて使用using B = Aimport A from X as B

C#のusingは、デフォルトの名前空間を指定する(メソッド呼び出しに名前空間を指定するのを省略する)に過ぎない。

参照設定は、別途設定する必要あり。(ビルド時に、コンパイラにパラメータとして、参照するdllの情報を渡す?)

Pythonのimportは、モジュールを参照する。fromの有無で、importの役割が微妙に異なることに注意。
from無し→モジュールを参照、from有り→モジュールのうち使用するクラスを指定。

↑

メイン関数 †

↑

はじめに †

ていうか、Pythonの場合、ソースコードはそのまま、文頭から順次実行される。
一方、C#の場合は、C#で書かれたソースコードをMSILに変換するにあたり、メイン関数を指定してないと現状変換できない(ので、ビルド時にエラーになる。てことはあれか、メイン関数が必要なのはMSILに変換するコンパイラの仕様か?)。

ところで、オブジェクト指向言語においてメイン「関数」って呼び方していいんですかね?正しくは、C言語におけるメイン関数に相当するもの、って言ったほうがいい??

↑

文法 †

C#

static void Main(){}

Python

if __name__ == "__main__":

直接実行されたソースコードファイルの場合のみ、
__name__変数には、__main__が入る。
このため、仮に、実行されたソースコードファイルから
呼び出されるソースコードファイルにメイン関数のようなものが記入されていても

if __name__ == "__main__":

に続いて、そのメイン関数みたいなものを書いておけば、
実行されずに済む。

↑

コメント †

C#

 // 以降、文末までがコメントして扱われる
 /*
    複数の文のコメントアウトも可能
 */

Python

 # Perlと同様、この記号で文末までコメントアウト
 
 '''
 シングルまたはダブルクオテーション3つで囲んで、なおかつ
 これらの記号と同じインデント内に配置すれば、コメントアウトっぽく扱うこと可能
 (単に、複数文を文字列にしているに過ぎないことに注意)
 '''

'''によるコメントアウト方法は、
クラス、関数/メソッド宣言の際にそれらの内容を説明するドキュメントの生成に使われる。
この場合、'''に続いて、要約文を。次に空行を挟んで、引数の説明などを自由形式で記述する。
ドキュメンテーションの方法については、詳しくは下記参照。
http://www.python.jp/doc/2.4/tut/node6.html

↑

制御構文 †

↑

if †

C#

 if()
 {
 }
 else if ()
 {
 }
 else
 {
 }

elseifは、用意されていないので、ifの入れ子を用いる。

注意点として "{}"を省略した場合、空行を挟むまで続く行が
全てifの入れ子として扱われる。

  if(false) MethodA(); // falseの場合にMethodAが実行されないのは明らかとして
  MethodB();  //このMethodBも実行されないことに注意

  //こんな風に書くと、、、
  if(flag1) MethodA();
  if(flag2) MethodB();

  //こう解釈されることに注意
  if(flag1) 
  {
    MethodA();
    if(flag2) MethodB();  //if(flag1)の入れ子内の処理と解釈される
  }

Python

 if :
     #.....
 elif
     #...... 
 else
↑

switch †

C#

 switch()
 {
      case x:
          break; //必須
      case y:
          goto default; //個人的に好きじゃない。
      default:
          break;
 }

Pythonに、switch構文は存在しない。

switch構文っぽくみせるテクニック

参考サイト http://surgo.jp/2008/11/pythonswitch.html

↑

while †

C#

do〜whileループあり。
 while(){
     //break;
     //continue;
 }

 do{
 }while()

Pythonはelseの定義可。注意点としては、whileの条件式判定の結果、else節のコードに飛ぶので、break文で抜けた場合には、else節のコードは実行されない。

 while :
    #continue
 else
    #break
↑

foreach †

C#

 foreach(var a in x)
 {
      //..........
 }

Python

 for a in x :
     .....

PythonはforがC#でいうところのforeachの役割を果たす。

↑

for †

C#
開始条件、終了条件、繰り返し時の実行式を全て任意に設定可能。(複数の式を突っ込むことも可能。また、これら3つの式に依存性がなくても問題ない。3つの式はすべてオプション扱い。)

 for(int i=0; i<max ; i++)
 {
 }

Python では、range関数で連番を生成できる。

 for a in range(max) :
     #............

また、ループ回数を取得したい場合

 listA = ["A","B","C"]
 for i, value in enumerate(listA):
      print "%d %s" % (i, value)

http://php6.jp/python/tips/enumerate/
とすると良い。

↑

※ ループ構文の制御キーワード †

C#,Pythonともに同じ

C#

 break
 continue

Python

 break
 continue
↑

checked, uncheked †

C#では、数値計算時のオーバーフローをチェック可能

 checked{
    //計算
 }

Pythonでは該当する構文見つからず。

↑

例外処理 †

Python

 try:
     try_something ...
 except Exception_1:
     handler_1 ...
 except Exception_2:
     handler_2 ...
 else:
     do_something_unless_exception ...
 finally:
     this_is_always_done ...

try節 実行時にエラーが発生しなかったらelse節を実行

C#

 try
 {
     //例外が投げられる可能性のあるコード
 }
 catch(例外の種類)
 {
     //例外処理コード
 }
 finally
 {
     //例外発生の有無にかかわらず実行したいコード
     //リソースの破棄などを行う
 }
↑

in, not in †

C#でいうX.Contains() !X.Contains()

↑

三項演算子 †

C#

 // <条件式>? <正の場合の値> : <偽の場合の値>
 int a = (x > 5) ? 10 : 0; 

Python

 # <正の場合の値> if <条件式> else <偽の場合の値>
 a = 10 if x>5 else 0
↑

データ構造 †

C#Python
配列T[][a,b](リストで兼用)
リストList<T>[a,b]
タプルTuple<T>(a,b)
連想配列Dictionary<T1,T2>{"a":x,"b":y}
↑

関数型言語的な使い方 †

↑

匿名関数 †

↑

文法 †

お題:引数を2倍する関数

C#

 //匿名メソッドを参照する変数(クロージャ)を用意したい場合 (C#2.0)
 delegate double bai(double x) = new delegate(double x){ x*2; }
 //C#3.5から採用された汎用のデリゲート型を用いるなら
 Func<double,double> bai = new delegate(double x){ x*2; }

 //使いきりであれば、C#3.0から採用されたラムダ式を使用
 //ラムダ式を用いる場合、引数については型推論が働くので型の指定が省略可能な場合がある。
 (x) => x*2;
 // また、文が可能
 (x) => {HogehogeMethod(); return x*2;}

Python

 bai = lambda x: x*2

Pythonの場合、式のみ可。文は無理。

↑

カリー化関数 †

↑

はじめに †

↑

文法 †

↑

その他の言語との比較 †

JavaプログラマーのためのPython比較メモ
http://akj.akjava.com/javapython_gwtext/Main.html

Python 101
http://www.ibm.com/developerworks/jp/linux/library/l-python.html

PythonのリストとJavaのリストの比較 - Sticker@Something
http://d.hatena.ne.jp/hikm/20080221/1203619883

Java and Python « Python Conquers The Universe
http://pythonconquerstheuniverse.wordpress.com/category/java-and-python/

PythonとJavaのコード比較 - モジログ
http://mojix.org/2003/07/21/233418

配列操作の比較表: Ruby, Python, JavaScript, Perl, C++ - bkブログ
http://0xcc.net/blog/archives/000043.html

配列操作の比較表:Java,PHP,Python,Ruby : fujishinko 雑記帳
http://mblog.excite.co.jp/user/fujishinko/entry/detail/?id=6792747

python tips ― 002 for ループ構文:python と C/Java との比較 « Python sf
http://loboskobayashi.wordpress.com/2010/01/31/python-tips-002-for-%E3%83%AB%E3%83%BC%E3%83%97%E6%A7%8B%E6%96%87python-%E3%81%A8-cjava-%E3%81%A8%E3%81%AE%E6%AF%94%E8%BC%83/


トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS
Last-modified: 2015-10-14 (水) (1521d)
Link: Coding/Python/.NETとの比較/クラス定義(3104d)
Site admin: D*isuke YAMAKAWA

PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji. Powered by PHP 5.3.29. HTML convert time: 0.059 sec.