【问题标题】:variable positional and printing the values可变位置和打印值
【发布时间】:2021-10-19 05:36:35
【问题描述】:
def minimum (*n):
        print(n)
minimum(1)
minimum(1,2)
    
    
def func(*args):
     print(args)
    
values1 = (1,2)
values2 = ((1,2), (3,4))
func(values1)
func(values2)

OUTPUT:
(1,)
(1, 2)
((1, 2),)
(((1, 2), (3, 4)),)

Process finished with exit code 0

第一个 O/p: 我认为python期望传递多个参数,所以在1之后有一个逗号(,)。?

第二个O/p: 现在 python 看到多个参数被传递,没有逗号。它将 args 存储为一个元组?

第三个 O/p 和第四个 O/p: 为什么还有逗号?即使我通过了 2 个元组,假设 python 期望像上面这样的多个元组?

帮助我理解这一点。

【问题讨论】:

  • func(val) 只传递一个参数。由于*args,它最终形成一个元组。如果你传递一个元组作为那个参数,那么你会得到一个元组中的一个元组。
  • 你知道(1,)(1, 2) 都是元组吗?注意两者的形式是(..., ...)
  • 逗号组成一个元组。 (1,) 是一个元组,(1) 不是。
  • 目前还不清楚“好风格”是什么意思。这是表示元组的方式

标签: python python-3.x tuples function-call


【解决方案1】:

第一个输出显示一个逗号,因为没有它,1 是唯一的元素,(1) 将只是一个整数(括号包裹表达式1),(1,) 显示用于区分元组和简单括号。

在第二个中,不需要尾随逗号来区分元组,因为有多个元素。

在第三个 O/p 中,您没有传递 12,而是传递了整个 (1,2),因此它仅在一个元组中显示一个项目(即 (1,2)) , 并添加一个额外的逗号。第四个也一样:你传递了整个((1,2), (3,4))

【讨论】:

    【解决方案2】:

    在函数调用 func(value2) 中,您传递了一个参数列表。它应该被传递为func(*value2)

    func(value2) --> func(((1, 2), (3, 4)))

    func(*value2) --> func((1, 2), (3, 4))

    【讨论】:

    • 谢谢!我的问题是为什么逗号尾随?即使通过了多个元组。我假设一旦我们传递了多个元组,逗号就不应该出现。
    • 因为没有 * ((1, 2), (3, 4)) 被视为单个实体。计算输出中大括号的数量。
    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多