2012/12/30

Pythonにまつわるアイデア:PEP

Pythonには、「PEP」(Python Enhancement Proposal)(日本語では「Python強化提案」?となるでしょうか)と呼ばれるドキュメント集があります。

法律の条文のように、「PEP 8」「PEP 20」「PEP 234」といった風に「PEP+数字」という形で膨大なドキュメントがオープンに管理されています。

Python(の言語そのもの)の開発は、このPEPをベースに進められています。考え方や方向性をPEPドキュメントとしてひとつひとつ作成・オープンにしてから、コミュニティからの意見を取り入れた形で開発の方向づけや意思決定が行われているようです。

PEPの一覧PEPの目的とルールを説明したページなどがありそれで詳細も見ることができますが、いずれも分量が多いです。。。いちPythonユーザとしてPythonを使う範囲であれば「PEPは開発に関わるドキュメント」程度におさえておくのでよいのかなと思います。

2012/12/28

PythonのBoolean変数型

Python の bool 型(真偽値型)の変数には次の2つがあります。

  • True
  • False

TrueFalse のいずれも、最初の 1 文字は大文字です。

bool 型は、 andornot などで論理演算が可能です。これらはいずれも小文字で書きます。

たとえば、変数 a b に bool 型の値が入っているときに

c = a and b

と書くと、変数 cab がともに True の場合のみ True 、いずれかひとつでも False であれば c は False となります。

同様に

c = a or b

とすると、 ab の少なくとも一方が True であれば cTrue に、両方とも False だった場合のみ cFalse となります。

not は、前置型の演算子で TrueFalse を裏返す処理になります。つまり、「 not a 」は aTrue なら FalseFalse なら True を返します。

この bool 型の変数を使うことによって、たとえば

while True:
    (処理A)

とすると、Aという処理を繰り返し行うことが可能です。

2012/12/26

Pythonの制御構造

Pythonの制御構文には、次のようなものがあります。
  • 条件分岐: if文
  • ループ: for文 while文

条件分岐

条件分岐とは、「ある条件が成り立つときだけAという処理を行う」といった構文です。

「ある条件が成り立つときだけ」ではなく、「ある条件が成り立つときにはA、成り立たないときにはB」と、MECEに(モレなくダブりなく)何らかの処理を行うようなやり方もできます。

Pythonの条件分岐には「通常のif文」と「ifを使った三項演算子」とがありますが、三項演算子についてはできることはif文と変わらないためここでは割愛します。

ちなみに、条件分岐は英語で「conditional branching」というそうです。日本語の条件分岐はその直訳ですね。

ループ

ループとは、「ある一定の処理を何度も繰り返し行う」ような構文です。こちらは英語でも同じく「loop」と呼ぶみたいですね。

if

条件分岐のif文は次のような形で使います。
if n > 10:
    print 'nは10よりも大きな数字です'
elif n > 5:
    print 'nは10以下で5よりも大きな数字です'
else:
    print 'nは5以下の数字です'

このコードは、nという変数が10を越えていたら「nは10よりも大きな数字です」と画面に出力してくれます。一方で、nが5よりも大きく10以下の場合は「nは10以下で5よりも大きな数字です」と、さらに、nが5以下の場合は「nは10以下の数字です」という文章を画面に表示します。

Pythonのif文では、ほかの言語でよく見るような「()」(丸括弧)や「{}」(中括弧)、「endif」を使いません。代わりに、「:」(セミコロン)とインデント(字下げ)を使って階層構造を表現します。Pythonにおける「else if」は「elif」と書きます。

この例であれば、「print~」の文の左には4つの半角空白が入っており、これをPythonインタプリタは階層構造になっているものと解釈します。

ちなみに、PythonにはC言語で見られるような「switch~case」文は用意されていません。

for文

Pythonでのfor文は次のような形で使います。
for i in range(0, 10):
    print i

このコードは、0、1、2、・・・9と、0から9までの数字を順番にprint出力します。「range(0, 10)」という部分の0と10を一般化して「range(m, n)」として
for i in range(m, n):
    print i
とすると、これはnから始まってn+1、n+2、と順番にn未満の最大の整数まで表示してくれます。

また、Pythonでいう配列(リスト)の各要素を順番に走査したい場合は次の形で行うことができます。
for e in array:
    print e

if文と同様、こちらも、繰り返し行いたい部分をインデント(字下げ)することで階層構造を表現する形になります。

詳細はここでは割愛しますが、「for a in b:」のbにあたる部分をPythonで「イテレータ」と呼びます。

while文

Pythonでのwhile文は次のような形で使います。
i = 10
while i > 1:
   print i
   i = i - 1

このコードは、10から1までの整数を順に表示します。if文やfor文と同様、繰り返し行いたい処理の部分をインデント(字下げ)します。

2012/12/11

Pythonの集合型

Pythonには、ほかの変数を格納できる集合型の変数として次の4つがあります。
  • リスト
  • タプル
  • 集合
  • 辞書

リスト

listA = [1, 2, 3, 4]
listB = ['Hello', 'World']
リストは、変数を一列に並べたものです。英語では「list」。

順序が付いており、0から始まるインデックスを使って各要素にアクセスすることができます。他の言語では「配列」にあたるものです。
listA[1]  # 2番目の要素「2」が格納されている
listB[0]  # 1番目の要素「Hello」が格納されている
ひとつのリストに型の異なるさまざまな要素を混在させることもできます。
listC = [1, 'Hello']
ほかのリストを要素として持つこともできます。
listD = [listA, listB]
この場合、サブのリストの要素へは、インデックスを続けて2つ使うことでアクセスすることができます。
listD[1][0]  # 「Hello」が格納されている

タプル

tupleA = (1, 2, 3, 4)
tupleB = ('Hello', 'World')
タプルはリストと同じく変数を一列に並べたものです。英語では「tuple」。便宜上タプルと書きますが、発音は「トゥプル」に近いです。

タプルもリストと同様に、0から始まるインデックスを使って各要素にアクセスすることができます。
tupleA[1]  # 2番目の要素「2」が格納されている
リストとタプルのちがいは、リストは定義した後にも要素の追加や更新・削除といった編集が可能な一方、タプルはそのような操作を受けつけない点。というのが最初の理解としてはよいかと思います。

そういった操作が可能かどうかを表す特徴を、mutable(可変)/immutable(不可変)といったりします。


集合

setA = set([1, 2, 3])
集合は、順序なしで変数をまとめたものです。英語では「set」。

集合の各要素は必ずユニークであるという制限があり、同じ要素を2つ以上持つことはできません。つまり、
setA = set([1, 2, 3])
setA.add(1)
と、すでに含まれている要素を追加してみても、その後の中身は変わらず
setA  # set([1, 2, 3])
のままとなります。

Pythonの集合では、数学の集合論で使う集合でいう「集合同士の演算」が可能です。つまり、和集合(union)、共通部分(intersection)、差集合(difference)といった集合をごくカンタンな記述で得ることができます。


辞書

dictA = {'pochi':'wan', 'tama':'nyan' }
辞書は、変数を「キー」と「値」という2つをひとセットとしてまとめたものです。英語では「dictionary」。

リストの要素はインデックスでアクセスできましたが、辞書の要素にはキーでアクセスすることができます。
dictA['pochi']  # 'wan'が入っている


リスト、タプル、集合、辞書―-それぞれに特徴があります。まずはその特徴を把握し、それぞれを適切な「使いどころ」で使うということがPythonらしいシンプルなコードを書く最初のポイントかと思います。

それぞれについてはまた別に取り上げていきます。

2012/12/05

Pythonの基本的な変数の型

Python の基本的な変数の型の主なものとして、次の 2 つがあります。

  1. 数値型
  2. 文字列型

数値型


1、2、3、9.0、100 といった数値を扱うものです。

数値型の中にもさらに3つのタイプがあり、

  • 整数
  • 浮動小数点数
  • 複素数

に分けられます。

それぞれ中身は名前のとおり、整数は 0、1、10 といった整数を扱い、浮動小数点数は 1.5、2.0、3.1415 といった小数点以下を含む数字を扱います。同じ 1 でも「 1 」と表記した場合は整数型となり、「 1.0 」と表記した場合は浮動小数点数となります。

また、複素数型は 1+j 、 3+4j という形で虚数単位を「 j 」で表します。

変数を定義するときは

x = 1
y = 1.5
z = 3 + 5j

という形で定義します。

もちろんどういう使い方をするかにはよりますが、整数と不動小数点数にくらべて複素数を使う機会は少ないことが多いかと思います。

文字列型

"Hello" 、 'World' といった文字列を扱うものです。

Python では、 " (ダブルクォーテーション)と ' (シングルクォーテーション)の両方を文字列のマークとして使うことができ、

text1 = "Hello"
text2 = 'World'

という形で文字列を定義することができます。

文字列にダブルクォーテーションやシングルクォーテーションそのものを含めたい場合は

text3 = "'"
text4 = "\""

シングルクォーテーションをダブルクォーテーションで囲む(あるいはその逆)か、バックスラッシュ( \ )を使ってエスケープすると使うことができます。

2012/11/23

Pythonの基本セット

公式サイトのインストーラを使ってPythonをインストールしたときに入ってくるものについて説明します。
  • IDLE インタラクティブモード
  • IDLE エディタ
  • ヘルプ

IDLE インタラクティブモード


ユーザがコマンド(命令文)を打ってインタプリタが結果を返して、という、いわゆる対話型でPythonが使えるモードです。

たとえば
1 + 1と入力すれば、すかさず2という答えが返ってきます。

複数行の入力もできるのですが、基本的に1行ずつ打ち込む形で使うことが多いと思います。電卓に近い感覚で使えます。

IDLE エディタ


Pythonスクリプト用を編集するためのエディタです。

インタラクティブモードで打ち込むには多いまとまったコードを書く場合は、こちらのエディタを使うことになります。

本格的にコーディングを行うためには必須です。


Pythonヘルプ


Pythonのヘルプファイルです。

文法や関数について解説したリファレンスはもちろん、チュートリアルも充実しています。有志で翻訳された日本語版もあり、最新版はオンラインで公開されています。

2012/11/21

PythonのIDLEの設定ファイルの場所

Pythonをインストールしたら標準で入ってくるインタフェースIDLE

そのIDLEの設定ファイルは、ユーザフォルダの直下にある「.idlerc」というサブフォルダに入っているようです。私の手元にあるPython2.7.3×Windows XPの場合だとここでした。

C:\Documents and Settings\(ユーザ名)\.idlerc

中にいくつか設定用のファイルが入っています。それぞれ設定内容は
  • config-main.cfg … 設定全般
  • config-highlight.cfg … テーマ(デザイン)の設定
  • recent-files.lst … 最近開いたファイル一覧
となっているようです。

テーマの設定の画面は、実際にやるとわかるのですがなかなか癖があって、ひととおり色を設定するのに結構時間がかかります。。。ですので、家とオフィスで同じデザイン設定を使いたい場合、新しいPCに環境を移したい場合なんかには、config-main.cfg、config-highlight.cfgの2つをまるごとコピーして移すのがよいかと思います。

たとえば、私の場合これら2つの中身は次のようになっていました。

config-main.cfg



[Theme]
name = theme201211
default = 0

[EditorWindow]
font-size = 11
encoding = utf-8
height = 30

[General]
autosave = 1

config-highlight.cfg



[theme201211]
definition-foreground = #13ecc0
error-foreground = #ff7777
normal-foreground = #e3e3e3
keyword-foreground = #ff7700
hilite-foreground = #000000
comment-background = #000000
hit-foreground = #000000
builtin-background = #000000
stdout-foreground = #13ecc0
string-background = #000000
break-background = #ffff55
comment-foreground = #c6d000
hilite-background = #c8c8c8
definition-background = #000000
stderr-background = #000000
hit-background = #ffff00
console-foreground = #e3e3e3
normal-background = #000000
builtin-foreground = #ff00b4
stdout-background = #000000
console-background = #000000
stderr-foreground = red
keyword-background = #000000
string-foreground = #c6d000
break-foreground = black
error-background = #000000
cursor-foreground = #e3e3e3

なぜ、このテーマ設定の項目の並びがこうもぐちゃぐちゃになっているのかはわかりませんが、、要は、以下の14項目×foreground(文字)かbackground(背景)か、という形で設定できるようです。ただしcursorだけはbackgroundがありませんので、合計で27項目の設定です。
  • break
  • builtin
  • comment
  • console
  • definition
  • error
  • hilite
  • hit
  • keyword
  • normal
  • stderr
  • stdout
  • string
  • cursor

2012/11/20

Pythonで一番最初に入れるべきパッケージ setuptools と pip

追記 20170227: pip は Python 3.4 以降では Python 本体に同梱されるようになったとのことで、以下の作業は不要になりました。 Python 本体をインストールすれば pip がモジュールとして次の形式ですぐに利用できます。

python -m pip install SomePackage

次のページが参考になります。


注:ここでは setuptools を紹介してますが、現在 setuptools は更新がストップしています。代わりに distribute というパッケージが開発されていて、それが setuptools の代わりになるので、以下、 setuptools の部分を distribute で読み替えていただくとよいかと思います。基本的な使い方は全く同じです。

Python の魅力のひとつに、世界中で開発されている豊富なパッケージ(ライブラリ)群があります。

すばらしいパッケージがたくさんあるのであれこれ目移りするところですが、まず最初、何よりも先に入れるべきなのは、パッケージ管理用のパッケージです。

具体的には次の2つになります。

実際によく使うのは後者の pip の方ですが、 pip を使うためには setuptools が必要です。

まずは setuptools のインストールから。

setuptools のインストール

まず、 Python のパッケージを集めたサイト「 PyPI (Python Package Index) 」(パイピーアイ)の setuptoolsのページ に行き、インストーラをダウンロードします。


環境( OS や Python のバージョン)によってインストーラが異なるため、自分の環境に合ったものを選ぶようにしましょう。例えば、 Windows の場合は 32bit 版か 64bit 版かでも異なるためそのあたりも要注意です。


ちなみに、 Python のバージョンはコマンドラインから「 python -V 」で確認することができます。

インストールが完了したら、( Windows の場合は) Python の Scripts フォルダを Windows の環境変数 PATH に追加します(たとえば「 C:\Python27\Scripts 」)。このあたりの説明は公式サイトで次のように説明されています。

Once installation is complete, you will find an easy_install.exe program in your Python Scripts subdirectory. Be sure to add this directory to your PATH environment variable, if you haven't already done so.
インストールが完了したら、 Python の Scripts というサブディレクトリに easy_install.exe というファイルが入っているかと思います。このファイルのディレクトリが環境変数 PATH に含まれていない場合は必ずこれを追加してください。

pip のインストール

setuptools がインストールできたら続いて pip をインストールします。

インストールのやり方はいくつかあるのですが、 setuptools をすでにインストールしたなら、早速その機能を使っていくのが便利です。

念のため、コマンドプロンプトで easy_install というコマンドが使えるかどうか確認します。
easy_install


easy_install が使えることが確認できたら、コマンドプロンプトから次のとおりに打ち込みます。
easy_install pip
うまくいけば、パッケージを探しているような挙動のあとしばらくカチャカチャと動いて、自動的に pip がインストールされます。最終的に「 successfully ~ 」という表記が出ればインストールは成功です。

pip の使い方

pip はコマンドライン上で使用します。通常使うのは次の 4 つかと思います。
  • pip freeze
  • pip help
  • pip install [パッケージ名]
  • pip uninstall [パッケージ名]

pip freeze
すでにインストールされている Python パッケージをリストアップしてくれます。

pip help
pip コマンドのヘルプを表示します。

pip install [パッケージ名]
指定したパッケージを自動でインストールしてくれます。パッケージのバージョンを指定したい場合は パッケージ名==1.2 といった形で指定します。たとえば、 Django をインストールした場合の画面は次のようになります。



インストールされたパッケージがどこにあるのかを確認したい場合も、この pip install で確認することができます。


pip uninstall [パッケージ名]
インストールされているパッケージをアンインストールします。

・・・以上です。


pip の基本のコマンドさえ覚えてしまえば、あとはサクサクとパッケージを入れていくことができます。その他詳細を知りたい場合は公式ドキュメントをどうぞ。

参考
pipについては丁寧な解説をされている方がいました。こちらもよろしければ。

2012/11/15

Pythonのインストール

Pythonを使うには、まずはPythonをインストールする必要があります。

ここではWindows版のインストール方法について。

まずはPythonの公式サイトにアクセス。
Python Programming Language – Official Website


日本語はありませんが、気にせず左の「Download」をクリックし、インストーラのダウンロードページへ。


通常のPythonをダウンロードする場合は、「Download Python」という枠の中からどれかひとつ適切なインストーラを選択します。


ここで注意したいのは、現在Pythonには2.*系と3.*系があるという点です。2やら3やらというのはバージョンを指しており、3系の方がもちろん新しくはあるのですが、何かと2系の方が3系よりも良い場合が多いようです。

2系で提供されているモジュールが3系にはなかったり、Google App Engineなど現在2系だけに対応しているサービスがあったりということがかなりたくさんあるので、何か明確な目的があり「絶対に3じゃないとダメ!」という場合でなければ、原則、2系をインストールしておくのがおすすめです。

2012/11/14

Life with Python



最近Pythonを触り始めました。

これから、Pythonの習得に役に立つツールや学び、おもしろいことなんかを載せていきたいと思います。