首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法将可选参数传递给函数?

问有没有办法将可选参数传递给函数?
EN

Stack Overflow用户
提问于 2012-12-24 14:41:25
回答 5查看 256.4K关注 0票数 137

在Python中,有没有一种方法可以在调用函数时将可选参数传递给函数,并且在函数定义中有一些基于“只有在传递可选参数时”的代码

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-24 15:29:20

Python 2 documentation, 提供了两种方法来检测调用者是否提供了可选参数。

首先,您可以使用特殊的形参语法*。如果函数定义有一个前面有一个元组的形参,那么*会用前面的形参不匹配的任何位置参数填充该参数(作为一个元组)。如果函数定义有一个前面带有**的形参,那么Python会用前面的形参不匹配的任何关键字参数来填充该参数(作为字典)。该函数的实现可以检查这些参数的内容,以获得您想要的任何“可选参数”。

例如,这里有一个函数opt_fun,它接受两个位置参数x1和x2,并查找另一个名为"optional“的关键字参数。

代码语言:javascript
复制
>>> def opt_fun(x1, x2, *positional_parameters, **keyword_parameters):
...     if ('optional' in keyword_parameters):
...         print 'optional parameter found, it is ', keyword_parameters['optional']
...     else:
...         print 'no optional parameter, sorry'
... 
>>> opt_fun(1, 2)
no optional parameter, sorry
>>> opt_fun(1,2, optional="yes")
optional parameter found, it is  yes
>>> opt_fun(1,2, another="yes")
no optional parameter, sorry

其次,您可以提供调用者永远不会使用的某个值的默认参数值,如None。如果该参数具有此默认值,则表明调用方没有指定该参数。如果参数有非默认值,您就知道它来自调用方。

票数 116
EN

Stack Overflow用户

发布于 2012-12-24 14:43:07

代码语言:javascript
复制
def my_func(mandatory_arg, optional_arg=100):
    print(mandatory_arg, optional_arg)

http://docs.python.org/2/tutorial/controlflow.html#default-argument-values

我发现这比使用**kwargs更具可读性。

为了确定是否传递了参数,我使用一个自定义实用程序对象作为默认值:

代码语言:javascript
复制
MISSING = object()

def func(arg=MISSING):
    if arg is MISSING:
        ...
票数 83
EN

Stack Overflow用户

发布于 2015-06-30 21:08:00

代码语言:javascript
复制
def op(a=4,b=6):
    add = a+b
    print add

i)op() [o/p: will be (4+6)=10]
ii)op(99) [o/p: will be (99+6)=105]
iii)op(1,1) [o/p: will be (1+1)=2]
Note:
 If none or one parameter is passed the default passed parameter will be considered for the function. 
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14017996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档