为什么可以';在Python中,变量不能设置为等于函数调用吗?
请在下面的Python 3示例中,从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
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
都引用了相同的对象来澄清它!