Unpack positional arguments from data structure in Python
鉴于:
1 2
| def psum(a,b,c):
return a**b+c |
和x = [1,2]和y = 3。我怎样才能做一个等价物。
我不想做x[0], x[1],因为函数返回x,并且两次调用它将是无效的。一个人能做一件事吗?其中z = x。然后做z[0],z[1]。
但我想知道,是否可以这样做,并以这种方式使用位置参数。
另外,不使用包装。
编辑:不能使用名称,因为我没有实现函数,函数编写器没有使用命名参数:./
- 另外,请注意,如果您有x--x = func(...),那么您可以自然地索引x。它不会再调用函数。x = func(); psum(x[0],x[1],3)只调用func一次。
您可以这样做:
- 它起作用了!他赢了:)。你可以做任何顺序的*x+[2],[2]+x…等等。现在,关于分散的关键字和位置,例如func(a=2,b,c,d=7);)
在这种情况下,你的论点的顺序并不重要,所以psum(3,*x)会起作用。
在更一般的情况下,如果知道参数的名称,
似乎对我也有用,但如果定义sum以使它需要varargs,它就不起作用了。
我认为在完全一般的情况下,没有办法不修改传递给psum的对象就可以做到这一点:
- 对不起的。固定的。秩序很重要。我认为理想的绘图(x,y,z)是我的问题,我使用网格网格(x,y)得到x,y
- 我认为你可以做一些类似于x_out,y_out = meshgrid(x,y)的事情,这样结果就是两个独立的对象。
- 问题是命名参数不能跟在*指针类型表达式之后。因此,要么命名所有参数,要么编写函数来处理一个iterable,要么在定义中使用*args和**kwargs。我不认为这对Python来说是非常令人满意的,但它就是这样。
- @Eiyrio&252;von Kauyf,查看Meshgrid的docs:link。主要的用例是这样的,您可以取回两个独立的对象,而不是它们的元组。
- EMS:错了。1。命名参数可以跟在*表达式之后:f(*[1,2],c=3)是合法的2。函数总是返回python中的单个对象(它可能是一个元组)。
- 对不起,是打字错误。我的意思是,未命名的论点是无法遵循的。我觉得我的意思很清楚,编辑评论为时已晚。注意我在命名所有参数之后怎么说可能是一个解决方案。
- 此外,您还可以自动解包输出,如numpy中的链接示例所示。当然,这是句法上的甜头,但可能解决了OP的问题。
- @ems是的,但是如果你明白我的意思,我想画线框(*meshgrid(x,y),z)。更多的非对称短促的东西;)。
- *一个人不知道名字
- 在这种情况下,我强烈建议首先将输出存储到变量。如果只是一个临时的绘图脚本,那么编写额外的任务对您来说只是一个不便的问题。如果它是在一个供别人使用的脚本中,那么可读性比试图把它全部塞进一行程序要重要得多。