Using tuples as inputs in functions
假设我这样定义一个函数,其中args应该是一个包含两个元素的元组,一个例子是(1,2):
1 2
| def func(some_matrix,*args):
return some_multiplication = some_matrix[0,first element of args] * some_matrix[0,second element of args] |
如何访问用户在函数体中传递的元组的第一和第二个元素?我还假设一个调用函数的例子看起来像:func(A,(1,2))?
在本例中,您可以使用列表索引或元组索引来实现这一点。
1 2 3 4 5 6 7 8 9
| def acd(val, *vag):
print '''Given Fixed value:\t{}
Given Variable Tuple:\t{}
First Var Value:\t{}
Second Var value:\t{}
Len of var:\t{}
Len of first var element:\t{}
'''.format(val, vag, vag[0][0], vag[0][1], len(vag), len(vag[0]))
acd(1, (3,4)) |
输出:
1 2 3 4 5 6
| Given Fixed value: 1
Given Variable Tuple: ((3, 4),)
First Var Value: 3
Second Var value: 4
Len of var: 1
Len of first var element: 2 |
- 这是可行的。我试图在函数内部循环运行len(args)次,但出于某种原因,我得到了len(args)的不确定输出。在函数中查找元组中条目数的正确方法是什么?
- len(args)是tuple中称为args的对象数。如果其中一个物体,比如说第一个物体,是一个tuple,你可以用len(args[0])找到它的长度。它与任何嵌套容器完全相同。
- @Isquared Keepitreal我已经通过answer编辑了更多详细信息。
- 谢谢。完美地工作
- @Isquared Keepitreal你能更具体一点吗?我没有和Numpy合作过。所以再多解释一下就好了:)
- @基于这些问题,Isquared Keepitreal:你确定你需要*魔法吗?为什么不简单地用def func(some_matrix, some_tupel):?
- @21点我该如何迭代函数体中的某个元组?如果可能的话,我想这样做要容易得多
- 在函数中迭代元组的过程与在函数外部(例如在解释器中)相同。和迭代列表的方式相同。
- @我不明白为什么要迭代一个元组。接受的答案没有,问题中的代码也没有要求这样做。这个答案需要*vag的长度至少为1,并且忽略函数的任何其他参数。使用可选参数(复数)的魔力来获得一个强制参数,这有点矛盾。这应该只是一个简单的,没有星级的论点。为什么事情复杂化?
- 我很乐意忽略复杂的事情。但是我不知道如何定义一个函数,使得第二个输入是这样的元组:def func(somethinf,(a,b))。上述建议也起到了作用。
- @isquared keepitreal作为参数的元组没有什么特别之处。只需def func(something, xy):,然后用元组作为第二个参数调用该函数。在函数中,可以解包元组(a, b = xy或使用indexing(xy[0]和xy[1]获取该元组中的值。
- @在python 2中,isquared keepitreal甚至可以像上次注释中那样定义函数,并在函数中使用a和b!这种可能性在python 3中消失了。
- 两条评论加1条。谢谢