在下面的方法定义,什么是*和**为做param2?
def foo(param1, *param2):
def bar(param1, **param2):
Run Code Online (Sandbox Code Playgroud) python syntax parameter-passing variadic-functions argument-unpacking
我正在使用itertools.chain以这种方式"压扁"列表列表:
uniqueCrossTabs = list(itertools.chain(*uniqueCrossTabs))
Run Code Online (Sandbox Code Playgroud)
这有什么不同于说:
uniqueCrossTabs = list(itertools.chain(uniqueCrossTabs))
Run Code Online (Sandbox Code Playgroud) 所以我有一个带有几个可选参数的函数,如下所示:
def func1(arg1, arg2, optarg1=None, optarg2=None, optarg3=None):
Run Code Online (Sandbox Code Playgroud)
Optarg1和optarg2 通常一起使用,如果指定了这两个args,则不使用optarg3.相反,如果指定了optarg3,则不使用optarg1和optarg2.如果它是一个可选参数,则函数很容易"知道"使用哪个参数:
if optarg1 != None:
do something
else:
do something else
Run Code Online (Sandbox Code Playgroud)
我的问题是,当有多个可选参数并且并非总是指定所有参数时,如何"告诉"函数使用哪个可选参数?用**kwargs解析参数的方法是什么?
我想知道是否有人有任何好方法可以快速解释如何使用可选参数有效地和pythonically地创建用户定义的对象.例如,我想创建这个对象:
class Object:
def __init__(self, some_other_object, i, *j, *k):
self.some_other_object = some_other_object
self.i = i
# If j is specified, assume it is = i
if(j==None):
self.j = i
else:
self.j = j
# If k is given, assume 0
if(k==None):
self.k = 0
else:
self.k = k
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
编辑:我更改了代码,使其更广泛,更容易理解.