【发布时间】:2018-03-08 14:18:57
【问题描述】:
我正在创建一个函数,将一个或两个形状列表 A = [x1,y1,c1] / B = [x2,y2,c2] 作为输入。如果同时提供了形状 A 和 B,则每个都在 A 和 B 的一个地方使用。如果只提供一个形状 (A),则默认情况下,该函数会在两个不同的地方隐式使用它。
我用 if-else 结构解决了这个问题:
def data_process(shape_A, shape_B = None):
# ... some code ...
res1 = process.shape(shape_A) # shape A is always used
if shape_B is not None:
res2 = process.shape(shape_B)
else:
res2 = process.shape(shape_A)
return res1, res2
data_process(my_shape_A) # call 1
data_process(my_shape_A, shape_B=my_shape_B) # call 2
但是我认为更优雅的方法是在函数定义中使用 shape_B = shape_A 引用 shape_A 作为默认值:
def data_process(shape_A, shape_B = shape_A):
# ... some code ...
res1 = process.shape(shape_A) # shape_A is always used
res2 = process.shape(shape_B) # if shape_B not provided, shape_B = shape_A
return res1, res2
因为简单地这样做给了我引用未知变量的错误,我想知道:有没有办法为其他函数参数引用或重用 Python 函数参数(相同函数)?
这只是一个简单的用例,但我认为基于其他函数参数的默认函数参数对于节省几行代码非常有用。
【问题讨论】:
-
shape_A在你的函数头中只不过是一个位置参数的名称。您对if-else和None的使用是正确的。
标签: python function parameter-passing