プログラミング言語の Python を試してみる。

今回の環境

今回の環境は Mac OS X Yosemite


$ uname -mrsv
Darwin 14.1.0 Darwin Kernel Version 14.1.0: Mon Dec 22 23:10:38 PST 2014; root:xnu-2782.10.72~2/RELEASE_X86_64 x86_64

Python 3 をインストールする

Mac OS X 10.8 には Apple によって Python 2.7 がプリインストールされています。 Python の Web サイト (http://www.python.org) から最新バージョンの Python 3 を取得しインストールすることもできます。新しい Intel の CPU でも古い PPC の CPU でもネイティブに動作する “ユニバーサル・バイナリ” ビルドの最新のものがあります。

4. Macintosh で Python を使う — Python 3.4.2 ドキュメント

たしかに。


$ python --version
Python 2.7.6

Mac にはすでに Python 2 がインストールされていた。

今回は最新バージョンの Python 3 を使いたいので、Homebrew で Python 3 をインストールする。


$ brew search python
boost-python	python		python3		wxpython	zpython
homebrew/apache/mod_python		homebrew/python/vpython
homebrew/versions/gst-python010		Caskroom/cask/python
homebrew/python/python-dbus		Caskroom/cask/python3

$ brew install python3
(中略)
Run `brew linkapps python3` to symlink these to /Applications.
==> /usr/local/Cellar/python3/3.4.3/bin/python3 -s setup.py --no-user-cfg instal
==> /usr/local/Cellar/python3/3.4.3/bin/python3 -s setup.py --no-user-cfg instal
==> Summary
🍺  /usr/local/Cellar/python3/3.4.3: 4647 files,  81M

$ brew linkapps python3
Linking /usr/local/opt/python3/IDLE 3.app
Linking /usr/local/opt/python3/Python Launcher 3.app
Finished linking. Find the links under /Applications.

$ python --version
Python 2.7.6

$ python3 --version
Python 3.4.3

python コマンドは相変わらずバージョン2系を指したままだが、 python3 というコマンドで Python 3 系が使えるようになった。

hello, world を実行してみる

サンプルコード。


$ cat ./hello.py 
print('hello, world')
print('こんにちは、SEKAI')
print(u'こんにちは、SEKAI')

実行結果。


$ python3 ./hello.py 
hello, world
こんにちは、SEKAI
こんにちは、SEKAI

ループと条件分岐を試してみる

サンプルコード。


$ cat ./loop_and_if.py 
numbers = [1,2,5,10]
sum = 0
for n in numbers:
  sum += n
  print (str(n) + "を足す")
  print ('合計: ' + str(sum))
  if sum < 10 and sum % 2 == 0:
    print('合計は10より小さい数で偶数です。')
  else:
    print('合計は10より大きい数か、または奇数です。')
else:
  print('last number: ' + str(n))
print ('合計: ' + str(sum))

実行結果。


$ python3 ./loop_and_if.py 
1を足す
合計: 1
合計は10より大きい数か、または奇数です。
2を足す
合計: 3
合計は10より大きい数か、または奇数です。
5を足す
合計: 8
合計は10より小さい数で偶数です。
10を足す
合計: 18
合計は10より大きい数か、または奇数です。
last number: 10
合計: 18

インデントに使う文字はタブでも動いたし、空白文字2文字にしても動いた。統一してあれば問題なさそう。ドキュメントを読んでもいまいち理解できていないが、「最初の非空白文字までのスペースの総数が、その行のインデントを決定します」というところだろうか。タブと空白文字を混ぜるときは、タブを空白文字8個分と考えるらしい。

タブは (左から右の方向に) 1 つにつき 8 つのスペースで置き換えられ、置き換え後の文字数は 8 の倍数になります (Unix で使われている規則と同じになるよう意図されています)。そして、最初の非空白文字までのスペースの総数が、その行のインデントを決定します。インデントは、バックスラッシュで複数の物理行に分割できません; 最初のバックスラッシュまでの空白がインデントを決定します。

2. 字句解析 — Python 3.4.2 ドキュメント

ずっと前にも Python を学ぼうと思ったことがあったのを思い出す

いつだったか、スクリプト言語を何か学ぼうと考えたときがあり、そのとき選択肢に上がったのは Python か Ruby の2つだった。

Python ではインデントが構文規則に盛り込まれているため、変なインデントを書くとエラーになるということで、これは良い言語だなと思ったおぼえがある。

ただ、日本語の文字列を扱う際には、文字列の前に「u」という文字を付ける必要があると聞いて、


u'日本語の文字列'

これはいやだ(;´∀`) と思って、 Python ではなく Ruby を使うことにしたのだった。

手元にある Mac OS X Yosemite に入っている Python 2 では、日本語を含む hello, world が


$ python ./hello.py 
  File "./hello.py", line 2
SyntaxError: Non-ASCII character '\xe3' in file ./hello.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

と、エラーになってしまった。やはり Python 2 では日本語を含む文字列の前に「u」という文字を付けないといけないのだろうか。エラーメッセージを見るとエンコーディングを指定すればいいのかもしれない。Python 3 だと「u」があろうとなかろうと動いてくれた。こういう文字コード系はあまり深入りしたくないところ。

参考資料

ref. Python 言語リファレンス — Python 3.4.2 ドキュメント

tags: python

Posted by NI-Lab. (@nilab)