为什么可以';在Python中,变量不能设置为等于函数调用吗?

为什么可以';在Python中,变量不能设置为等于函数调用吗?,python,list,python-3.x,Python,List,Python 3.x,请在下面的Python 3示例中,从Python命令行解释为什么c=None >>> a = [1,2] >>> b = a >>> c = b.append(3) >>> print(a,b,c) [1, 2, 3] [1, 2, 3] None 在适当的位置追加条目,并且不返回任何Python认为是None(Python的默认行为)的内容。例如: >>> def foo(): ... prin

请在下面的Python 3示例中,从Python命令行解释为什么
c=None

>>> a = [1,2]
>>> b = a
>>> c = b.append(3)
>>> print(a,b,c)
[1, 2, 3] [1, 2, 3] None
在适当的位置追加条目,并且不返回任何Python认为是
None
(Python的默认行为)的内容。例如:

>>> def foo():
...     print "I am in Foo()"
...     # returns nothing
...
>>> c = foo()   # function call
I am in Foo()
>>> c == None
True   # treated as true

您正在分配
append
的返回值,该值为
None

>>> a = [1,2]
>>> b = a.append(3)
>>> b == None
True
>>>

函数append不返回任何内容,这就是为什么变量中没有任何内容。让我们通过一个小例子来更好地了解它:

假设你有这个函数

def foo:
    bar = "Return this string" 
    return bar 

x = foo() 
print(x) # x will be "Return this string" 
现在假设你有这个函数

def foo(bar):
    print(bar) 

x = foo(33) # Here 33 will be printed to the console, but x will be None 
这是因为函数上的return语句,如果没有,函数将不返回任何语句


append
是一个函数,用于在调用它的列表中执行某些操作(在Python中,字符串也是列表),该函数不需要返回任何内容,它只修改列表

你可以,而且你做得很好,这个特定函数调用的结果恰好是
None
。你的评论为我澄清了这一点。顺便说一句,我看到这个问题被标记为“重复”,然而,在我看来,它在本质上是不同的,因为我在问为什么一个变量不能被设置为等于一个函数调用。上面链接的另一个问题作为原始问题,与试图将变量设置为等于函数调用无关。(我敢打赌还有很多其他问题的答案是“因为函数返回”没有"但这只是我的偏见,因为我写的问题我认为我过于偏向它。这在大多数其他编程语言中,尤其是Perl、Ruby、java、C++还是会被语言改变的吗?@ USER 12711它是语言依赖的,更确切地说是编写编译器的方式。有些会给语法错误。如果你试图给一个函数分配一个变量,而有些函数不返回任何值。为了给出实现这一点的语言的确切列表,我应该知道每种语言,不幸的是,我不知道:)因此,它不是等于新的b值,而是等于函数的返回值(无)。a=新的b,因为列表(和字符串)是可变的,因此是一个。它与对象的可变性无关。您正在进行一个函数调用,即
list.append()
,它不返回任何内容,导致
c
的值变为
None
。另一部分,即
b==a
True
,因为当您执行
b=a
时,它没有创建新对象,但对
a
实例的引用也会复制到b。简而言之,
a
b
都引用了相同的对象来澄清它!