How to toggle a value in Python

后端 未结 17 1007
梦谈多话
梦谈多话 2020-12-07 07:46

What is the most efficient way to toggle between 0 and 1?

17条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-07 08:19

    How about an imaginary toggle that stores not only the current toggle, but a couple other values associated with it?

    toggle = complex.conjugate
    

    Store any + or - value on the left, and any unsigned value on the right:

    >>> x = 2 - 3j
    >>> toggle(x)
    (2+3j)
    

    Zero works, too:

    >>> y = -2 - 0j
    >>> toggle(y)
    (-2+0j)
    

    Easily retrieve the current toggle value (True and False represent + and -), LHS (real) value, or RHS (imaginary) value:

    >>> import math
    >>> curr = lambda i: math.atan2(i.imag, -abs(i.imag)) > 0
    >>> lhs = lambda i: i.real
    >>> rhs = lambda i: abs(i.imag)
    >>> x = toggle(x)
    >>> curr(x)
    True
    >>> lhs(x)
    2.0
    >>> rhs(x)
    3.0
    

    Easily swap LHS and RHS (but note that the sign of the both values must not be important):

    >>> swap = lambda i: i/-1j
    >>> swap(2+0j)
    2j
    >>> swap(3+2j)
    (2+3j)
    

    Easily swap LHS and RHS and also toggle at the same time:

    >>> swaggle = lambda i: i/1j
    >>> swaggle(2+0j)
    -2j
    >>> swaggle(3+2j)
    (2-3j)
    

    Guards against errors:

    >>> toggle(1)
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: descriptor 'conjugate' requires a 'complex' object but received a 'int'
    

    Perform changes to LHS and RHS:

    >>> x += 1+2j
    >>> x
    (3+5j)
    

    ...but be careful manipulating the RHS:

    >>> z = 1-1j
    >>> z += 2j
    >>> z
    (1+1j) # whoops! toggled it!
    

提交回复
热议问题