Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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 - Fatal编程技术网

在Python中使用可变序列方法创建列表失败

在Python中使用可变序列方法创建列表失败,python,Python,这些工作: >>> print [1,2,3] + [4,5] [1,2,3,4,5] >>> 'abc'.upper() 'ABC' 这并不是: >>> print [1,2,3].extend([4,5]) None 为什么??可以在裸字符串上使用字符串方法,那么为什么不能在诸如列表之类的裸序列类型上使用方法呢?即使这样也不行: >>> print list([1,2,3]).extend([4,5]) None

这些工作:

>>> print [1,2,3] + [4,5]
[1,2,3,4,5]
>>> 'abc'.upper()
'ABC'
这并不是:

>>> print [1,2,3].extend([4,5])
None
为什么??可以在裸字符串上使用字符串方法,那么为什么不能在诸如列表之类的裸序列类型上使用方法呢?即使这样也不行:

>>> print list([1,2,3]).extend([4,5])
None
注:对于“工作”的口语含义。当然,我预期的行为不正确是有充分理由的。我只是好奇那是什么

另外,我接受了下面soulcheck的回答,他是对的,但在调查加法运算符的实现方式时,我发现以下几点是有效的:

>>> [1,2,3].__add__([4,5])
[1, 2, 3, 4, 5]
但是add方法可能不会修改底层对象,而是创建一个新的对象来返回,就像string方法一样。

extend有效,只是在修改对象时不返回任何值。这是一个python约定,不从修改调用对象的方法返回任何值

尝试:

编辑:

至于为什么会出现这种情况,原因之一可能是该方法返回的内容有时模棱两可。是否应该list.extend返回扩展列表?布尔值?新的列表大小

它也是的一个实现,即,如果它返回了一些东西,它将是一个查询和命令,cqs说这是邪恶的,尽管有时很方便-请参阅list.pop

所以一般来说,您不应该从变种返回任何内容,但与python中的几乎所有内容一样,它只是一个指南

list.\uuuu add\uuuuu是在列表上执行+操作时调用的方法-它返回一个新列表。

extend有效,只是在修改对象时不返回任何值。这是一个python约定,不从修改调用对象的方法返回任何值

尝试:

编辑:

至于为什么会出现这种情况,原因之一可能是该方法返回的内容有时模棱两可。是否应该list.extend返回扩展列表?布尔值?新的列表大小

它也是的一个实现,即,如果它返回了一些东西,它将是一个查询和命令,cqs说这是邪恶的,尽管有时很方便-请参阅list.pop

所以一般来说,您不应该从变种返回任何内容,但与python中的几乎所有内容一样,它只是一个指南


list.\uuuu add\uuuu是在列表上执行+时调用的方法-它返回一个新列表。

这是由于界面的设计。Extend扩展列表,但不返回任何值

l = [1, 2, 3]
l.extend([4, 5])
print l

这是由于界面的设计。Extend扩展列表,但不返回任何值

l = [1, 2, 3]
l.extend([4, 5])
print l

不鼓励命名列表,因为您需要一个有意义的名称。但在讨论列表的示例代码中,还有什么更有意义呢?@PaulMcGuire您当然是对的。我只是在键入此代码时没有考虑。@ugoren也不鼓励这样做,因为您正在跟踪标准列表类。@ugoren-我要说的是,在示例代码中尤其不鼓励这样做,因为许多新来者希望通过在线示例获得良好的编码实践和样式。不鼓励命名列表,因为您需要一个有意义的名称。但在讨论列表的示例代码中,还有什么更有意义呢?@PaulMcGuire您当然是对的。我只是在键入此代码时没有想到。@ugoren也不鼓励这样做,因为您正在跟踪标准列表类。@ugoren-我想说,在示例代码中尤其不鼓励这样做,因为许多新来者都希望在线示例能够获得良好的编码实践和风格。虽然字符串是不可变的,所以字符串方法不能修改原始对象,所以它们返回一个值?这不适用于say tuples,因为尽管它们像字符串一样是不可变的,但它们没有任何方法,因为只有可变序列才有方法。或者别的什么。接受@西蒙希布斯很抱歉。您提供的字符串和列表示例创建一个新的字符串/列表。这种约定的一个原因可能是,方法返回的内容有时模棱两可。是否应该list.extend返回扩展列表?布尔值?新的列表大小?它也是的一个实现,即,如果它返回了某个东西,那么它将是one==evil中的一个查询和命令。我将把它放在编辑中。而字符串是不可变的,所以字符串方法不能修改原始对象,所以它们会返回值吗?这不适用于say tuples,因为尽管它们像字符串一样是不可变的,但它们没有任何方法,因为只有可变序列才有方法。或者别的什么。接受@西蒙希布斯很抱歉。您提供的字符串和列表示例创建一个新的字符串/列表。这种约定的一个原因可能是,方法返回的内容有时模棱两可。是否应该list.extend返回扩展列表?布尔值?新的列表大小?它也是的一个实现,即,如果它返回了某个东西,那么它将是one==evil中的一个查询和命令。我会把它编辑一下。