【问题标题】:Calling a function multiple times consecutively with different arguments in Python (3.x)?在Python(3.x)中使用不同的参数连续多次调用一个函数?
【发布时间】:2017-12-03 06:45:24
【问题描述】:

我有一段代码如下所示:

myfunction(a, b, c)
myfunction(d, e, f)
myfunction(g, h, i)
myfunction(j, k, l)

参数的数量不会改变,但函数必须每次使用不同的值连续调用。这些值不是自动生成的,而是手动输入的。是否有内联解决方案可以在不创建函数来调用此函数的情况下执行此操作?比如:

myfunction(a, b, c)(d, e f)(g, h, i)(j, k, l)

任何帮助表示赞赏。提前致谢!

【问题讨论】:

  • 我不完全理解您想要实现的目标。你想用所有可能的值只调用一次函数吗?
  • 是否要将调用函数的结果作为下一次调用同一函数的参数?
  • 你可以在一段时间内做a, b, c = input().split(' ')真正的循环然后调用类myfunction(a, b, c)
  • 你能给出一个示例实现吗?似乎没有人确切地知道你想做什么。 myfunction 取回什么?
  • @Adam 创建一个名为 a 的字典键,附加值 b 的次数为 c。但不是真正相关的 imo,基本上是一种使用不同参数调用相同函数的简短方法,而不必每次都手动输入。

标签: python python-3.x function shortcut


【解决方案1】:

简单,使用元组解包

tripples = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i'), ('j', 'k', 'm')]
for tripple in tripples:
    print(myfunction(*tripple))

【讨论】:

    【解决方案2】:

    我很惊讶没有人提到map

    map(func, iter)
    

    它将iter 中的每个可迭代对象映射到第一个参数中传递的func

    对于您的用例,它应该看起来像

    map(myfunction, *zip((a, b, c), (d, e, f), (g, h, i), (j, k, l)))
    

    【讨论】:

    • 这似乎不起作用:四个元组被解释为四个参数,所以它失败了TypeError: myfunction() takes 3 positional arguments but 4 were given。更好地与map(myfunction, *zip( (a, b, c), ... )) 一起使用。
    • 我认为这并不像您想象的那样有效。 >>> print(*zip((1,2,3), (4,5,6), (7, 8, 9), (10, 11, 12))) (1, 4, 7, 10) (2, 5, 8, 11) (3, 6, 9, 12) >>> 打印(*((1,2,3), (4,5,6), (7, 8, 9), ( 10, 11, 12))) (1, 2, 3) (4, 5, 6) (7, 8, 9) (10, 11, 12)
    【解决方案3】:

    你可以在这里误用列表理解

    [myfunction(*item) for item in ((a, b, c), (d, e, f), (g, h, i), (j, k, l))]
    

    【讨论】:

      【解决方案4】:

      您好,我不确定这是否是最 Pythonic 的方式,但是如果您在列表中定义了参数,您可以在循环中调用该函数,并从列表的开头删除 n 参数:

      查看示例代码:

      def myfunction(x1,x2,x3):
          return x1+x2+x3
      
      
      arglist = [1,2,3,4,5,6,7,8,9]
      for _ in range(3):
          print  myfunction(arglist[_+0],arglist[_+1],arglist[_+2])
          # remove used arguments from the list 
          arglist= arglist[2:] 
      

      【讨论】:

      • 这是一个有趣的替代方法,而不是简单地多次调用一个函数,没错,但它似乎比公认的答案更复杂。不过这也是可行的。
      • @Terrornado : 100% 同意你的观点,即使它服务于目的,打包解包概念是更好的方法
      • _ 符号表示永远不会使用该值。也许改用i
      • @AdamSmith : 两者含义相同,_也代表变量,_或i无所谓
      • 我不明白为什么即使答案是正确的,人们也会投票,可能不是最好的,但它可以达到目的
      【解决方案5】:

      我认为你想要做的是这样的......

      myfunction(myfunction(d, e, f), myfunction(g, h, i), myfunction(j, k, l))
      

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 2012-02-11
        • 2020-05-07
        • 1970-01-01
        • 2017-01-19
        • 2017-07-20
        • 2017-01-19
        • 1970-01-01
        相关资源
        最近更新 更多