【问题标题】:What is the use of () in the Python code?Python代码中的()有什么用?
【发布时间】:2020-07-13 09:52:25
【问题描述】:
for x in range(10):
   arr.append(lambda:x**2)
arr[4]()

预期输出:16 或没有,因为没有打印语句 但是,当我运行时,输出是 81。为什么会这样?

【问题讨论】:

  • 您在交互式解释器中运行它。 (那个,还有stackoverflow.com/questions/12423614/…
  • 数组中的每个元素都是一个函数(或 lambda)。所以 arr[4] 是一个函数, () 是一个函数调用
  • 另外,听起来你已经知道这段代码中所有括号的作用,如果你理解的足够多,可以期待 16 或没有。

标签: python


【解决方案1】:

在您的代码中,arr.append(lambda:x**2)x 的作用域在函数之外。

当您完成循环时,x 设置为 9(0 到 9)。

那么x**2是81,所以arr[4]()会重新计算x,所以结果是81。

只是为了好玩,您可以尝试以下方式:

f_generator = lambda i: lambda: i**2
arr = [f_generator(i) for i in range(10)]
arr[4]()  # 16

【讨论】:

  • 实际上arr[y]() 会为每个y 返回81。好答案,+1 OP
  • 但是当我调用 arr[4]() 和 arr[3]() 它应该返回 81 和 81 但它只返回 81 一次。为什么会这样?
  • 在您的版本中,arr[4]()arr[3]() 都返回 81。
【解决方案2】:

要获得您想要的效果,您应该像这样删除 lambda:

arr = []
for x in range(10):
   arr.append(x**2)
print(arr[4])

因为否则您将存储一个函数,而不是一个数字。请注意,现在您不需要()

【讨论】:

    【解决方案3】:

    () 用于调用任何对象,可以是方法或类 喜欢,

    class Name:
        ...
    
    Name()
    

    或者,

    name = Name()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2017-10-02
      相关资源
      最近更新 更多