什么是+;=用Python是什么意思?

什么是+;=用Python是什么意思?,python,syntax,Python,Syntax,我在Python中看到这样的代码示例: if cnt > 0 and len(aStr) > 1: while cnt > 0: aStr = aStr[1:]+aStr[0] cnt += 1 +=是什么意思 a += b 在这种情况下与 a = a + b 在这种情况下,cnt+=1意味着cnt增加1 请注意,如果cnt>0且len(aStr)>1,则粘贴的代码

我在Python中看到这样的代码示例:

    if cnt > 0 and len(aStr) > 1:
        while cnt > 0:                  
            aStr = aStr[1:]+aStr[0]
            cnt += 1
+=
是什么意思

a += b
在这种情况下与

a = a + b
在这种情况下,cnt+=1意味着cnt增加1

请注意,如果cnt>0且len(aStr)>1,则粘贴的代码将无限循环

编辑:引用:``[…]答案几乎正确,令人误解。+和+=之间存在细微但非常显著的差异,请参见“.”。

它的意思是“将此”附加到当前值上”

例如:

a=“你好”; a+=“世界”


现在打印一个将输出:“hello world”

仅供参考:在您的示例中,似乎有一个无限循环

if cnt > 0 and len(aStr) > 1:
    while cnt > 0:                  
        aStr = aStr[1:]+aStr[0]
        cnt += 1
  • 进入循环的条件是
    cnt
    大于0
  • 只要
    cnt
    大于0,循环就会继续运行
  • 循环的每次迭代将
    cnt
    增加1

最终结果是,
cnt
将始终大于0,循环将永远不会退出。

Google'python+=operator'引导您


页面加载后搜索+=以获得更详细的答案。

a+=b
基本上与
a=a+b
相同,只是:

  • +
    总是返回一个新分配的对象,但是如果对象是可变的(例如,
    list
    dict
    ,但是
    int
    str
    是不可变的),则
    +=
    应该(但不必)修改该对象

  • a=a+b
    中,
    a
    计算两次

    • 一个简单语句包含在一个逻辑行中

如果这是您第一次遇到
+=
操作符,您可能想知道为什么它可能会在适当的位置修改对象,而不是构建一个新的对象。以下是一个例子:

# two variables referring to the same list
>>> list1 = []
>>> list2 = list1

# += modifies the object pointed to by list1 and list2
>>> list1 += [0]
>>> list1, list2
([0], [0])

# + creates a new, independent object
>>> list1 = []
>>> list2 = list1
>>> list1 = list1 + [0]
>>> list1, list2
([0], [])
+=
是最重要的

这与执行
cnt=cnt+1
相同。例如:

>>> cnt = 0
>>> cnt += 2
>>> print cnt
2
>>> cnt += 42
>>> print cnt
44
>>> s = "Hi"
>>> s += " there"
>>> print s
Hi there
运算符的使用方式通常与C-ish语言中的
++
运算符类似,用于在循环中将变量增加1(
i+=1

对于减法/乘法/除法/幂和其他运算,也有类似的运算符:

i -= 1 # same as i = i - 1
i *= 2 # i = i * 2
i /= 3 # i = i / 3
i **= 4 # i = i ** 4
+=
运算符也适用于字符串,例如:

>>> cnt = 0
>>> cnt += 2
>>> print cnt
2
>>> cnt += 42
>>> print cnt
44
>>> s = "Hi"
>>> s += " there"
>>> print s
Hi there
出于性能原因,人们倾向于建议不要这样做,但对于大多数脚本来说,这并不是一个问题。引自:

  • 如果s和t都是字符串,一些Python实现(如CPython)通常可以对形式为s=s+t或s+=t的赋值执行就地优化。如果适用,这种优化使二次运行时的可能性大大降低。此优化取决于版本和实现。对于性能敏感的代码,最好使用str.join()方法,该方法可确保跨版本和实现的一致线性连接性能
  • str.join()方法引用执行以下操作:

    mysentence = []
    for x in range(100):
        mysentence.append("test")
    " ".join(mysentence)
    
    …而不是更明显的:

    mysentence = ""
    for x in range(100):
        mysentence += " test"
    
    后者的问题是(除了前导空格之外),根据Python实现,Python解释器必须在每次追加时在内存中创建一个新的字符串副本(因为字符串是不可变的),这将随着要追加的字符串的长度而逐渐变慢。。然而,附加到一个列表,然后将其连接到一个字符串是一种一致的速度(无论实现如何)


    如果你在做基本的字符串操作,不用担心。如果你看到一个基本上只是添加到一个字符串的循环,考虑构建一个数组,然后<代码>“.Co())/代码>它。

    不一定是永远的。如果CNT是int,它最终会溢出并变为负数,所以如果你在32位INT的机器上,循环将在几十亿次迭代之后最终退出。(或者,如果你在一台64位整数的机器上,在宇宙热死的某个时候。)@Charlie:Python会自动处理溢出。使用Python 2.5:sys.maxint+1==2147483648L和isinstance(sys.maxint+1,int)==False进行测试。在Python 3.0中,int和long之间的区别甚至消失了(不再是long,int是“bignum”)。(显然,在64位上,我们有sys.maxint+1==9223372036854775808L,但关键是结果会自动转换为long)或者你可以告诉他这意味着a=a+乐队让他回来问‘what is-=?’what is*=?’:)不,谢谢。不管怎样,在我发布之前,排名靠前的ans已经这么做了。+1用于提供链接(有帮助),但-1表示你没有总结,这本可以用一句话来完成。Net:0这对我也很有帮助。谢谢。它也适用于其他运算符。你可以做x-=1;y*=3;z/=10;cnt+=1;可以认为比cnt=cnt+1更整洁;在这里输入错误的空间更大;)@S.Lott:否决票意味着答案没有帮助,就是这个。你投了否决票,只是因为他没有链接到文档?-1因为答案大多是正确的。+和+=之间有一个微妙但非常显著的区别,请看巴斯蒂安的回答。看在撒旦的份上,请不要用这个来构建字符串。StringIO和cStringIO就是为了这个目的而出现的。构建字符串:“”。join(可扩展的字符串中的\u)也可以很好地执行。它意味着在字符串上使用append。。“”.join()的性能更好,但将其用于示例中的短字符串是愚蠢的。在循环中连接字符串时使用“.join()”,但对于其中一种用法,+=是精细的小更正:如果对象支持_iadd _;()方法,而不是可变方法,则会发生就地修改。特别是,字典不支持
    +=
    @Rafal:很明显,如果一个对象不支持+=,就地修改就不会发生:-)微妙的一点是,不能保证一个支持+=的可变对象会进行就地修改-小心的代码会避免r