ラベル 式 の投稿を表示しています。 すべての投稿を表示
ラベル 式 の投稿を表示しています。 すべての投稿を表示

2009年10月17日土曜日

演算子のオーバーロード

クラスに特殊メソッドを定義する

# -*- coding: utf-8 -*-

class A:
    # 二項算術演算
    def __add__(self, i):
        return 10 + i
    def __sub__(self, i):
        return 10 - i
    def __mul__(self, i):
        return 10 * i
    def __div__(self, i):
        return 10 / i
    def __truediv__(self, i):
        return 10 / i
    def __floordiv__(self, i):
        return 10 // i
    def __mod__(self, i):
        return 10 % i
    def __divmod__(self, i):
        return (10 / i, 10 % i)
    def __pow__(self, i):
        return 10 ** i
    def __lshift__(self, i):
        return 10 << i
    def __rshift__(self, i):
        return 10 >> i
    def __and__(self, i):
        return 10 & i
    def __xor__(self, i):
        return 10 ^ i
    def __or__(self, i):
        return 10 | i
    # 単項算術演算
    def __neg__(self):
        return -10
    def __pos__(self):
        return +10
    def __abs__(self):
        return abs(10)
    def __invert__(self):
        return ~10
    # 比較演算
    def __lt__(self, i):
        return 10 < i
    def __le__(self, i):
        return 10 <= i
    def __eq__(self, i):
        return 10 == i
    def __ne__(self, i):
        return 10 != i
    def __gt__(self, i):
        return 10 > i
    def __ge__(self, i):
        return 10 >= i

a = A()

print a + 2
print -a
print a < 4

# 2 + a
# 逆を出来るようにするには r をつけた特殊メソッドを定義する
# __radd__, __rsub__, __rmul__, __rdiv__, __rtruediv__
# __rfloordiv__, __rmod__, __rdivmod__, __rpow__, __rlshift__
# __rrshift__, __rand__, __rxor__, __ror__

# a += 2
# += などを出来るようにするには i をつけた特殊メソッドを定義する
# __iadd__, __isub__, __imul__, __idiv__, __itruediv__
# __ifloordiv__, __imod__, __ipow__, __ilshift__
# __irshift__, __iand__, __ixor__, __ior__

詳細はドキュメントで

2009年10月6日火曜日

演算子の優先順位

`expressions...`           文字列への型変換
{key:datum...}             辞書表現
[expressions...]           リスト表現
(expressions...)           式結合またはタプル表現
f(arguments...)            関数呼び出し
x[index:index]             スライス操作
x[index]                   添字指定
x.attribute                属性参照
**                         べき乗
~x                         ビット単位 NOT
+x, -x                     正符号、負符号
*, /, %                    乗算、除算、剰余
+, -                       加算および減算
«, »                       シフト演算
&                          ビット単位 AND
^                          ビット単位 XOR
|                          ビット単位 OR
<, <=, >, >=, <>, !=, ==   比較
is, is not                 アイデンティティテスト
in, not in                 メンバシップテスト
not x                      ブール演算 NOT
and                        ブール演算 AND
or                         ブール演算 OR
lambda                     ラムダ式
詳細はドキュメントで

2009年10月4日日曜日

べき乗

# -*- coding: utf-8 -*-

i = 2 ** 3
# または
i = pow(2, 3)

詳細はドキュメントで

三項演算子

i = 1 if True else 0

2009年9月28日月曜日

ジェネレータ式

単純なジェネレータを簡潔に作成できる

g = (i + i for i in range(5))

詳細はドキュメントで

2009年9月27日日曜日

lambda

lambdaとは小さな関数を生成する式

func = lambda a, b: a + b

i = func(3, 5)
変数 i は 8 になる

詳細はドキュメントで