Pythonのインクリメント演算子とデクリメント演算子?
Pythonには単項インクリメント/デクリメント演算子(+ +/--)がありません。価値を高める代わりに、
a += 1
値をデクリメントするには、-
を使用しますa -= 1
例
>>> a = 0 >>> >>> #Increment >>> a +=1 >>> >>> #Decrement >>> a -= 1 >>> >>> #value of a >>> a 0
Pythonは、同じことを行うための複数の方法を提供していません。
ただし、Cのような言語から来ている場合は、PythonにはCのような「変数」がないことに注意してください。代わりに、Pythonは名前とオブジェクトを使用し、Pythonでは整数(int)は不変です。
例を挙げて理解しましょう-
>>> a =1 >>> print(id(a)) 1919375088 >>> print(hex(id(a))) 0x726756f0
したがって、Pythonで上記のステートメントが意味するのは、値が1のint型のオブジェクトを作成し、それに名前を付けることです。オブジェクトは値1を持つintのインスタンスであり、名前aはそれを参照します。割り当てられた名前aとそれが参照するオブジェクトは異なります。
次に、
をインクリメントしましょう>>> a +=1 >>> print(id(a)) 1919375104 >>> print(hex(id(a))) 0x72675700
intは不変であるため、Pythonは上記のステートメントを次のように理解します
-
aが参照するオブジェクトを検索します(これはintおよびid 0x726756f0です)
-
オブジェクト0x726756f0の値を検索します(1です)。
-
その値に1を加算します(1 + 1 =2)
-
値が2の新しいintオブジェクト(IDが0x72675700のオブジェクト)を作成します。
-
名前aをこの新しいオブジェクト(0x72675700)に再バインドします
-
これで、aはオブジェクト0x72675700を参照し、前のオブジェクト(0x726756f0)は名前aで参照されなくなりました。元のオブジェクトを参照する他の名前がない場合は、後でガベージコレクションされます。
したがって、上から、次のことを理解できます:a + =1
これにより、aが+1に再割り当てされます。をインクリメントしないため、インクリメント演算子ではありませんが、再割り当てされます。
上記のインクリメント/デクリメントをもう少し例を挙げて理解しましょう-
>>> a = b = c =1 >>> id(a) 1919375088 >>> id(b) 1919375088 >>> id(c) 1919375088 >>> #Above all have the same id >>> >>> # Now increment a >>> a +=1 >>> id(a) 1919375104 >>> id(b) 1919375088 >>> id(c) 1919375088
上記から、a、b、cが参照する単一のオブジェクト(ID 1919375088のint)があることがわかります
aの値をインクリメントすると、aはa + 1(id:1919375104)に再署名され、他のbとcは同じオブジェクト(1919375088)を参照します。
また、Pythonは++/-演算子を思い付きます。
>>> a =1 >>> ++a 1 >>> --a 1
-
++および--演算子はPythonでどのように機能しますか?
C、C ++、Javaなど++および--演算子では、変数の値を1ずつインクリメントおよびデクリメントします。Pythonでは、これらの演算子は機能しません。 Pythonでは、変数はメモリ内のオブジェクトへの単なるラベルです。 Pythonでは、数値オブジェクトは不変です。したがって、a ++(a =10の場合)によって、10オブジェクトの値を11にインクリメントしようとしていますが、これは許可されていません。 >>> a=10 >>> a++ SyntaxError: invalid syntax 代わりに、+=演算子を使用する必要があります >
-
Pythonで文字列を評価し、オブジェクトを返すにはどうすればよいですか?
組み込みのeval()関数には文字列引数が必要です。ただし、Pythonインタープリターは、文字列をPython式として扱い、それが有効かどうかを評価してから、式の結果である型オブジェクトを返します。 算術式を含む文字列 >>> x=eval('2+2') >>> type(x) <class 'int'> >>> x 4 リスト/タプルに評価する文字列 >>> x=eval('tuple([1,2,3])') >>> x (1, 2, 3)