検索
特集/連載

「Python 3」と「Python 2」の“決定的な違い”とは?ペネトレーションテストのためのPython【中編】

「Python 2」と「Python 3」にはさまざまな違いがある。ペネトレーションテストでの「Python」活用を推奨する有識者が、特筆すべき両者の違いを解説する。

Share
Tweet
LINE
Hatena

関連キーワード

プログラミング | セキュリティ


 前編「初めてのプログラミングには『Python』を選ぶべき“セキュリティ的な理由”」は、実際にシステムに侵入して脆弱(ぜいじゃく)性を確認する「ペネトレーションテスト」(侵入テストとも)の担当者が、プログラミング言語「Python」を習得すべき理由を解説した。この主張は、ペネトレーションテストへのPython活用を解説した書籍『Black Hat Python, 2nd Edition: Python Programming for Hackers and Pentesters』の著者、ジャスティン・サイツ氏とティム・アーノルド氏による。Pythonを習得する上で理解しておくべきポイントを両氏に聞いた。

―― 「Python 3」だけを学習するのがお勧めですか。「Python 2」も学習する意味はありますか。

アーノルド氏 Python 2とPython 3の両方の知識があると役に立つ。Python 2の知識を持っていることは重要だ。Python 3を使用して新しいプログラムを開発する場合がほとんどだとしても、Python 2の知識は依然必要になる。Python 2で記述された概念実証(PoC)コードやシェルスクリプト(OSの基本的なユーザーインタフェース「シェル」で動作する簡易的なプログラミング言語)もある。知らないうちに自身のPCにマルウェアを取り込まないようにするためにも、Python 2の知識は欠かせない。Python 3の知識があれば、Python 2を学習するのは難しくない。

Python 2とPython 3の大きな違い

―― Python 2とPython 3にはどのような違いがありますか。

アーノルド氏 Python 2とPython 3には知っておくべき違いがある。個人的に重要だと感じるのは、Python 3で文字列を扱う際の標準文字コードが「Unicode」になったことだ。Python 2では、開発者がプログラム内に文字コードを変換する処理を明示的に記述する必要があり、これによってしばしば問題が発生した。例えば操作対象の文字列の文字コードが分からない場合だ。Python 3は全ての文字列データをUnicode文字列として扱うため、Python 2より簡単に文字列を読み取ることができる。

 Python 2とPython 3の最大の違いは、プログラムの水面下での処理にある。一例がソケット通信(プログラム同士の通信)だ。Pythonのソケット通信は、文字列をバイナリデータとして送受信する。Python 2とPython 3ではバイナリデータを保持する変数の型が異なるので、注意しなければならない。

 個人的に気に入っていることを1つ紹介しよう。Python 2は「print」の後に半角スペースと表示したい文字列を記述する必要がある。Python 3はprintが関数になり、表示したい文字列をかっこ内に記述する。これは軽微ではあるが、見た目で判断できる構文の違いだ。Pythonプログラムのソースコードでprintがどのように使用されているかを確認すれば、Python 2とPython 3のどちらでソースコードが記述されているのかが分かる。

 もう一つの大きな変化は、Python 3で「コンテキストマネージャ」が使えるようになったことだ。Python 3では、「with」文を使って関数を実行するよう記述すると、コンテキストマネージャがその関数を安全に終了する。外部ファイルなどのリソースを読み込む場合を考えてみよう。リソースのクローズは忘れがちな処理で、開いたまま処理を終了してしまうことは少なくない。「with open(ファイル名)」と記述すれば、開いたファイルを閉じるための処理内容を記述する必要がない。ソースコードの実行対象がブロック(処理のまとまり)の外になった瞬間に、コンテキストマネージャがファイルを閉じる。

TechTarget発 先取りITトレンド

米国TechTargetの豊富な記事の中から、最新技術解説や注目分野の製品比較、海外企業のIT製品導入事例などを厳選してお届けします。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る