2017-03-09 55 views
0

想象我要定义具有缺省值的所有参数的函数:Python的 - 找到一个函数中传递的参数个数

def fun(a=2, b=1): 
    ... 

函数内部的逻辑是:如果没有通过,使用默认值;如果只有a被通过,那么b总是等于a/2;如果a和b都通过,则使用传递的值。

在完成这一功能的问题是,它似乎很难分辨之间的差异(例如)乐趣(4)乐趣(4,1),因为我不知道是否B = 1在外部提供,或者只是默认值。

一个明显的解决方法是使用* args,但是,在我的情况下,我想保留默认值和名称。因此,看起来唯一的出路就是知道里面有多少个参数在调用时传入fun()。我猜可能有一些系统功能可以使用,但我没有成功找到它们。任何想法如何可能这项工作将是非常有益的。

谢谢! :)

+5

所以没有默认参数'B = 1'。有(例如)'b = None',然后根据情况在函数内部计算出'b'应该采用什么值。 – khelwood

回答

2

你可以有(例如)默认值bNone,然后在你的函数内找出b应该采取的值。

def fun(a=2, b=None): 
    if b is None: 
     b = a/2 
    ... 

这会给你:

f() : a=2, b=1 
f(4) : a=4, b=2 
f(4,1) : a=4, b=1 
+0

谢谢@khelwood!这是一个非常明确,很好的解决方案。出于好奇,你认为在Python中可以知道函数内部传递的参数数量吗? – zhxywzy

+0

你可以使用某种修饰器在参数进入函数之前捕获参数,但我认为它基本上等于一个'* args,** kwargs'解决方案。 – khelwood

+0

我明白了。谢谢你的帮助! – zhxywzy

相关问题