Python
 Computer >> コンピューター >  >> プログラミング >> Python

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

  1. ++および--演算子はPythonでどのように機能しますか?

    C、C ++、Javaなど++および--演算子では、変数の値を1ずつインクリメントおよびデクリメントします。Pythonでは、これらの演算子は機能しません。 Pythonでは、変数はメモリ内のオブジェクトへの単なるラベルです。 Pythonでは、数値オブジェクトは不変です。したがって、a ++(a =10の場合)によって、10オブジェクトの値を11にインクリメントしようとしていますが、これは許可されていません。 >>> a=10 >>> a++ SyntaxError: invalid syntax 代わりに、+=演算子を使用する必要があります >

  2. Pythonで文字列を評価し、オブジェクトを返すにはどうすればよいですか?

    組み込みのeval()関数には文字列引数が必要です。ただし、Pythonインタープリターは、文字列をPython式として扱い、それが有効かどうかを評価してから、式の結果である型オブジェクトを返します。 算術式を含む文字列 >>> x=eval('2+2') >>> type(x) <class 'int'> >>> x 4 リスト/タプルに評価する文字列 >>> x=eval('tuple([1,2,3])') >>> x (1, 2, 3)