【问题标题】:Can you create method with tuple of parameters?您可以使用参数元组创建方法吗?
【发布时间】:2020-11-26 20:15:07
【问题描述】:

你能在 Python 中做这样的事情吗?

def give_me_your_three_favorite_things_in_each_given_category(
    food=(first, second, third), 
    color=(first, second, third))
    println(f"Your favorite foods are {food.first}, {food.second} and {food.third}")
    println(f"Your favorite colors are {color.first}, {color.second} and {color.third}")

give_me_your_three_favorite_things_in_each_given_category(
    food=(first="pizza", second="pasta", third="ice cream"),
    color=(first="black", second="blue", third="green")

预期输出:
“你最喜欢的食物是比萨、意大利面和冰淇淋”
"你最喜欢的颜色是黑色、蓝色和绿色"

【问题讨论】:

  • 使用字典? def ...(food, ...): println(f"...{food['first']}...")give...(food={'first': 'pizza', ...})?
  • @deceze 我想要一个指定所需参数数量的方法。您和 maor10 的答案很好,但在您希望此方法的用户确切知道要传递多少个参数以及这些参数的确切含义时,情况并非如此。

标签: python python-3.x methods parameters parameter-passing


【解决方案1】:

当然- 你会这样做的方式如下:

def give_me_your_three_favorite_things_in_each_given_category(food, color):
    first_food, second_food, third_food = food
    print(f"Your favorite foods are {first_food}, {second_food}, {third_food}")
    first_color, second_color, third_color = color
    print(f"Your favorite colors are {first_color}, {second_color}, {third_color}")

您可以在这里看到我们接收元组作为参数,然后将它们解包。

然后你可以调用函数

give_me_your_three_favorite_things_in_each_given_category(
food=("pizza", "pasta", "ice cream"),
color=("black", "blue", "green"))

您还可以使用命名元组,以便为​​元组中的每个值命名:

from collections import namedtuple
Food = namedtuple("Food", ("first", "second", "third"))
Color = namedtuple("Color", ("first", "second", "third"))
give_me_your_three_favorite_things_in_each_given_category(
    food=Food(first="pizza", second="pasta", third="ice cream"),
    color=Color(first="black", second="blue", third="green")
)

【讨论】:

  • @Stanislaw 这到底是什么意思?
  • @Stanislaw 您的帖子显示了一堆无效代码。目前尚不清楚其中哪一部分对您来说很重要,以便在某种程度上得到密切实施,或者这是否只是一个坏例子。正如我评论的那样,为什么没有字典?
  • 字典在这里也不是正确的解决方案——你永远不会将字典用于具有已知参数的数据模型。如果您希望它带有参数名称,您可以创建一个数据类或命名元组
  • 所以你可以从集合中导入 namedtuple Food = namedtuple("Food", ("first", "second", "third"))
  • @maor10 你怎么能准确理解我的问题很有趣:D
猜你喜欢
  • 2013-08-18
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
  • 2014-05-22
  • 1970-01-01
相关资源
最近更新 更多