【问题标题】:How to use an inline list update as function parameter?如何使用内联列表更新作为函数参数?
【发布时间】:2019-01-29 04:31:36
【问题描述】:

我有一个列表,我附加了一个值,然后使用新列表调用一个函数,我想在一行中执行此操作但不起作用...

list = ['a', 'b']
my_funtion(list.append('c'))

my_function 收到了一个None 而不是包含三个字母的列表,这是正确的,因为来自文档:

def append(self, p_object):
    """ L.append(object) -> None -- append object to end """
    pass

如果我这样做,它会起作用:

list = ['a', 'b']
list.append('c')
my_funtion(list)

我想知道是否有办法用我的原始示例简化代码。

【问题讨论】:

  • 不要使用list 作为变量名,因为它会影响内置类型。 list.append() 就地修改对象并返回None
  • 顺便说一句,即使在 Java 中这也行不通。在 Java 中,List.add 返回 true

标签: python list


【解决方案1】:

你可以使用:

L = ['a', 'b']
my_funtion(L + ['c'])

将单项列表['c']L 列表连接起来创建一个新列表['a', 'b', 'c'] 作为my_function 的参数。

由于这会创建一个新列表,调用者中的原始列表L 不会受到函数内连接或对其执行的突变的影响。如果您想使用添加的元素永久改变原始列表并通过引用将其传递给您的函数,请在调用函数之前坚持使用 append 的原始方法。

请注意,在您的原始示例中,当您调用变量 list 时,您已重新定义了内置函数 list(),它将可迭代对象转换为列表,因此请谨慎选择变量名称。

另见Why does append() always return None in Python?

【讨论】:

    【解决方案2】:

    在python中,参数被定义为在调用函数时提供给函数的值。 type(list.append()) 返回一个无类型。这在此线程 What is a 'NoneType' object? 中进行了解释。据我所知,python 中没有内置的列表方法返回修改后的列表。简而言之,@ggorlen 的回答可能是最好的,因为l + ['c'] 返回一个列表。 或者您可以编写自己的附加函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-07
      • 2018-08-10
      • 2012-03-03
      • 2011-06-26
      • 2020-07-13
      • 1970-01-01
      • 2023-01-30
      • 2021-09-08
      相关资源
      最近更新 更多