关于python:有没有办法将可选参数传递给函数?

Is there a way to pass optional parameters to a function?

在python中是否有一种方法可以在调用函数时将可选参数传递给函数,并且在函数定义中有一些基于"仅当传递可选参数时"的代码?


在Python文档2、7.6。函数的定义方式来给你a几A检测是否来电提供的选择参数。

第一,你可以使用特殊的语法*正式参数。如果函数的定义有一个正式的参数,由一*preceded单,然后populates Python是任何参数,定位参数不匹配的参数preceding正式(即元组)。如果函数的定义有一个正式的参数preceded red **是Python的参数,然后populates任何关键字参数不匹配是由preceding正式参数(即预测)。该函数的执行参数检查的内容可以从任何可选参数"of the sort你想。

例如,这是一个函数的参数是一个opt_fun定位x1x2for关键字参数,和另一个看起来"可选"命名。

1
2
3
4
5
6
7
8
9
10
11
12
>>> 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来电不会使用。这个参数的默认值。如果你不知道来电者指定的位置参数。如果有一个非参数的默认值,你知道它是从呼叫者。


1
2
def my_func(mandatory_arg, optional_arg=100):
    print mandatory_arg, optional_arg

docs.python.org http:/ / / / / 2 controlflow.html #教程默认参数值

我觉得这比使用**kwargs更可读。

如果传递的参数是确定的,在所有,我使用自定义对象,默认值为:效用

1
2
3
4
5
MISSING = object()

def func(arg=MISSING):
    if arg is MISSING:
        ...


1
2
3
4
5
6
7
8
9
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.


如果你想给一个参数赋值的一些默认值(价值)。样(X = 10)。但重要的是要充分的论据,然后第一默认值。

EC。

(y,x = 10)

(X = 10,y)是错的


你可以指定一个可选参数的默认值为东西不会传递到函数和检查它与is运算符:

1
2
3
4
5
6
7
8
9
class _NO_DEFAULT:
    def __repr__(self):return"<no default>"
_NO_DEFAULT = _NO_DEFAULT()

def func(optional= _NO_DEFAULT):
    if optional is _NO_DEFAULT:
        print("the optional argument was not passed")
    else:
        print("the optional argument was:",optional)

那么只要你做你需要做的func(_NO_DEFAULT)可以准确地检测是否或不通过的理由是不同的,和公认的答案你不担心侧效果*符号:

1
2
3
4
5
6
7
8
9
# these two work the same as using **
func()
func(optional=1)

# the optional argument can be positional or keyword unlike using **
func(1)

#this correctly raises an error where as it would need to be explicitly checked when using **
func(invalid_arg=7)