Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-查找函数中传递的参数数_Python - Fatal编程技术网

Python-查找函数中传递的参数数

Python-查找函数中传递的参数数,python,Python,假设我想定义一个函数,其中所有参数都有默认值: def fun(a=2, b=1): ... 函数内部的逻辑是:如果没有传递任何内容,则使用默认值;如果只有a通过,则b始终等于a/2;如果a和b都被传递,则使用传递的值 完成此函数的问题在于,似乎很难区分(例如)fun(4)和fun(4,1)之间的区别,因为我不知道b=1是在外部提供的还是只是默认值 一个明显的解决方法是使用*args,然而,在我的例子中,我希望保留默认值和名称。因此,唯一的解决办法似乎是了解调用时在fun()内部传递了

假设我想定义一个函数,其中所有参数都有默认值:

def fun(a=2, b=1):
    ...
函数内部的逻辑是:如果没有传递任何内容,则使用默认值;如果只有a通过,则b始终等于a/2;如果a和b都被传递,则使用传递的值

完成此函数的问题在于,似乎很难区分(例如)fun(4)fun(4,1)之间的区别,因为我不知道b=1是在外部提供的还是只是默认值

一个明显的解决方法是使用*args,然而,在我的例子中,我希望保留默认值和名称。因此,唯一的解决办法似乎是了解调用时在fun()内部传递了多少个参数。我想可能有一些系统功能可以使用,但我没有成功地找到它们。任何关于这项工作的想法都会很有帮助

谢谢!:)

您可以(例如)使用默认值
b
be
None
,然后在函数内部计算出
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
您可以(例如)将默认值
b
设为
None
,然后在函数内部计算出
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

因此,不要使用默认参数
b=1
。让(例如)
b=None
,然后在函数内部根据情况计算出
b
应该取什么值。因此不要使用默认参数
b=1
。让(例如)
b=None
,然后在函数内部根据情况计算出
b
应该取什么值。谢谢@khelwood!这是一个非常清晰和好的解决方案。出于好奇,您认为在Python中可以知道函数中传递的参数数量吗?您可以在参数进入函数之前使用某种装饰器来捕获参数,但我认为这基本上还是一种
*args,**kwargs
解决方案。我明白了。谢谢你的帮助!谢谢@khelwood!这是一个非常清晰和好的解决方案。出于好奇,您认为在Python中可以知道函数中传递的参数数量吗?您可以在参数进入函数之前使用某种装饰器来捕获参数,但我认为这基本上还是一种
*args,**kwargs
解决方案。我明白了。谢谢你的帮助!