Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
究竟什么是+;=你喜欢python吗?_Python_Operators_Notation_Shorthand_Compound Assignment - Fatal编程技术网

究竟什么是+;=你喜欢python吗?

究竟什么是+;=你喜欢python吗?,python,operators,notation,shorthand,compound-assignment,Python,Operators,Notation,Shorthand,Compound Assignment,我需要知道+=在Python中做了什么。就这么简单。我还希望能够链接到Python中其他速记工具的定义。+=使用变量的值添加另一个值,并将新值分配给变量 >>> x = 3 >>> x += 2 >>> print x 5 -=,*=,/=对减法、乘法和除法的作用类似。它将右操作数添加到左操作数x+=2表示x=x+2 它还可以向列表中添加元素,请参见。+=向变量添加一个数字,在过程中更改变量本身(而+不会)。与此类似,以下内容也会修改变量:

我需要知道
+=
在Python中做了什么。就这么简单。我还希望能够链接到Python中其他速记工具的定义。

+=
使用变量的值添加另一个值,并将新值分配给变量

>>> x = 3
>>> x += 2
>>> print x
5

-=
*=
/=
对减法、乘法和除法的作用类似。

它将右操作数添加到左操作数<代码>x+=2表示
x=x+2


它还可以向列表中添加元素,请参见。

+=
向变量添加一个数字,在过程中更改变量本身(而
+
不会)。与此类似,以下内容也会修改变量:

  • -=
    ,从变量中减去一个值,将变量设置为结果
  • *=
    ,将变量与一个值相乘,使结果成为变量
  • /=
    ,将变量除以值,使结果成为变量
  • %=
    ,对变量执行模运算,然后将变量设置为其结果

可能还有其他人。我不是Python程序员。

在Python中,+=是
\uuuIdd\uIdd\uIdd
特殊方法的糖衣,或者
\uIdd\uIdd\uIdd>或者
\uIdd\uIdd\uIdd\uIdd>如果
不存在的话。类的
\uuu\iadd\uu
方法可以做它想做的任何事情。list对象实现它,并使用它在iterable对象上迭代,该对象将每个元素附加到自身,方法与list的extend方法相同

下面是一个简单的自定义类,它实现了
\uuuidd\uuuu
特殊方法。使用int初始化对象,然后可以使用+=运算符添加数字。我在
中添加了一个print语句,表明它被调用。另外,
\uuuuu iadd\uuuu
预计将返回一个对象,因此我返回了自身的加法加上在本例中有意义的其他数字

>>> class Adder(object):
        def __init__(self, num=0):
            self.num = num

        def __iadd__(self, other):
            print 'in __iadd__', other
            self.num = self.num + other
            return self.num

>>> a = Adder(2)
>>> a += 3
in __iadd__ 3
>>> a
5

希望这有帮助。

正如其他人所说,+=运算符是一种快捷方式。 例如:

var = 1;
var = var + 1;
#var = 2
也可以这样写:

var = 1;
var += 1;
#var = 2

因此,不必编写第一个示例,您可以只编写第二个示例,这将很好地工作。

它不仅仅是一个语法糖分。试试这个:

x = []                 # empty list
x += "something"       # iterates over the string and appends to list
print(x)               # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']

x = []                 # empty list
x = x + "something"    # TypeError: can only concatenate list (not "str") to list

+=
操作符调用
\uuu iadd\uuuu()
列表方法,而
+
操作符调用
\uuu add\uuuu()
操作符。它们对列表执行不同的操作。

x+=5
与Python中的
x=x+5
并不完全相同

请注意:

In [1]: x = [2, 3, 4]    
In [2]: y = x    
In [3]: x += 7, 8, 9    
In [4]: x
Out[4]: [2, 3, 4, 7, 8, 9]    
In [5]: y
Out[5]: [2, 3, 4, 7, 8, 9]    
In [6]: x += [44, 55]    
In [7]: x
Out[7]: [2, 3, 4, 7, 8, 9, 44, 55]    
In [8]: y
Out[8]: [2, 3, 4, 7, 8, 9, 44, 55]    
In [9]: x = x + [33, 22]    
In [10]: x
Out[10]: [2, 3, 4, 7, 8, 9, 44, 55, 33, 22]    
In [11]: y
Out[11]: [2, 3, 4, 7, 8, 9, 44, 55]

请参阅以供参考:

记住,当您过去在旧计算器中进行求和时,例如2和3,每次您点击
=
时,您会看到总数中增加了3,而
+=
也做了类似的工作。例如:

>>> orange = 2
>>> orange += 3
>>> print(orange)
5
>>> orange +=3
>>> print(orange)
8

+=
只是写作的快捷方式

number = 4
number = number + 1
所以你会写

numbers = 4
numbers += 1
这两种方法都是正确的,但是示例二可以帮助您编写更少的代码

从概念上讲,a+=b向a“添加”b,并将结果存储在a中。这种过于简单的描述将用多种语言描述+=运算符

然而,这种过于简单的描述提出了几个问题

  • “添加”到底是什么意思
  • 我们所说的“将结果存储在数据库中”到底是什么意思?python变量不直接存储值,而是存储对对象的引用
  • 在python中,这两个问题的答案取决于a的数据类型


    那么,“添加”到底意味着什么呢

    • 对于数字,它意味着数字相加
    • 对于列表、元组、字符串等,它意味着连接
    请注意,对于列表+=比+,列表上的+运算符需要另一个列表,但+=运算符将接受任何iterable


    那么,“将价值存储在”是什么意思呢

    如果对象是可变的,则鼓励(但不是必需)就地执行修改。所以a指向它以前做过的同一个对象,但该对象现在有不同的内容

    如果对象是不可变的,那么它显然不能执行适当的修改。某些可变对象也可能没有就地“添加”操作的实现。在这种情况下,变量“a”将更新为指向包含加法运算结果的新对象

    从技术上讲,这是通过首先查找
    \uuuuu IADD\uuuu
    来实现的,如果没有实现,则尝试
    \uuuuuuu添加\uuuu
    ,最后是
    \uuuuu RADD\uu


    在python中对不确定确切类型的变量使用+=时,尤其是在不确定类型是否可变的情况下,需要小心。例如,考虑下面的代码。

    def dostuff(a):
        b = a
        a += (3,4)
        print(repr(a)+' '+repr(b))
    
    dostuff((1,2))
    dostuff([1,2])
    
    当我们使用元组调用dostuff时,元组作为+=操作的一部分被复制,因此b不受影响。然而,当我们用一个列表调用它时,列表会被修改,所以a和b都会受到影响

    在Python3中,“bytes”和“bytearray”类型也观察到类似的行为


    最后请注意,即使对象未被替换,也会发生重新指定。如果左侧只是一个变量,这并不重要,但当您有一个引用可变集合的不可变集合时,它可能会导致混乱的行为,例如:

    a = ([1,2],[3,4])
    a[0] += [5]
    

    在这种情况下,[5]将成功添加到[0]引用的列表中,但之后当代码尝试重新分配[0]失败时,将引发异常。

    简短的回答是
    +=
    可以翻译为“将+=右侧的任何内容添加到+=”左侧的变量中”

    例如,如果你有
    a=10
    ,那么
    a+=5
    将是:
    a=a+5


    那么,“a”现在等于15

    注意
    x+=y
    x=x+y
    在某些情况下不相同,在这些情况下,需要使用附加运算符
    >>> x = 2
    >>> x += 2 and 1
    >>> x
    3
    
    >>> x = 2
    >>> x = x + 2 and 1
    >>> x
    1
    
    >>> x = 2
    >>> x = x + (2 and 1)
    >>> x
    3
    
    x -= 1 + 3
    
    x = x - (1 + 3)
    
    x = (x - 1) + 3
    
    x = 2
    
    x += 3
    
    print(x)