メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年1月25日金曜日

[Python][お勉強] Python入門(5) - ビルトインオブジェクト

プログラム作成にあたって中心的なビルトインオブジェクトを勉強します。

数値

1.数値リテラル

数値リテラルの種類は以下のとおり。

  1. 整数と浮動小数点数
  2. 長整数
  3. 16進数、8進数
  4. 複素数

2.式・演算子
Pythonの演算子は以下のとおり。
演算子説明
lambda無名関数生成
or論理和
and論理積
not論理否定
<、<=、>、>=
==、<>、!=、
is、is not、in、not in
比較演算子
|ビット論理和
^ビット排他的論理和
&ビット論理積
<<、>>シフト演算子
-、+加減算
*、%、/、//乗算/繰り返し、剰余/文字列フォーマット、除算
-x、+x、~x、x ** y符号反転、ビット反転、べき乗※xは変数。
x[i]、x[i:j]、x.attr、x(...)インデクシング、スライシング、属性参照、関数呼び出し
(...)、[...]、{...}、`...`タプル、リスト、ディクショナリ、文字列への変換

上の行の方が優先度は低く、下の行の方が優先度が高い。
優先度を明確にするためには括弧を使う。

3.変数
Pythonでは事前の型宣言を必要としない。以下特徴を記す。
  • はじめに値が代入された時点で「入れ物」が作成される。
  • 変数を使用して式を書くと変数に代入された値が使用される。
  • 値が代入されていない変数は使用することができない。
  • 変数の名前だけ宣言することはできない。
例:

$ python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 3 # 変数の作成
>>> b = 4 # 変数の作成
>>> a + 1, a-1 # 加減算
(4, 2)
>>> b * 3, b / 2 #乗除
(12, 2)
>>> a % 2, b ** 2 # 余り、べき乗
(1, 16)
>>> 2 + 4.0, 2.0 ** b # 型の混在
(6.0, 16.0)
>>> c * 2 # 代入していない変数の使用
Traceback (most recent call last):
File "", line 1, in ?
NameError: name 'c' is not defined
>>> b / 2 + a # カッコを使用しないで演算。演算子の優先順が使用される。
5
>>> print b / (2.0 + a) # カッコを使用した演算。カッコが先に評価される。
0.8




また、変数はリファレンスを保持している。よって以下のような場合、

$ python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 3
>>> b = a
>>> a
3
>>> b
3



変数aと変数bは同じ領域をさしている。ただし、bの値を変えてもaの値は変更されない(リストやディクショナリは変更されることもある)。
また、上記の"3"という値は"3"というオブジェクトであるが値を変更できないオブジェクトである。
そのような値を変更できないオブジェクトの特性を不変性(immutability)という。
(変更できるオブジェクトの特性を可変(mutable)という。)


4.数値の表現
以下の例を見てみる。

$ python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 3
>>> b = 4
>>> b / (2.0 + a)
0.80000000000000004
>>> print b / (2.0 + a)
0.8



上記のようにprintステートメントが無い場合とある場合で値が異なっているのがわかる。
これは、printステートメントがある方は浮動小数点数を丸めてくれるからである。


5.ガーベージコレクション
Pythonではメモリアロケーションを意識しなくて良い。ガーベージコレクションによってメモリ領域は自動で開放される。






0 コメント: