减少函数接受的参数数量 python
Reducing the number of parameters a function takes in python
我的代码中有以下结构:
#!/usr/bin/env python
import <something>
.
.
.
from modules import *
from optparse import OptionParser
class Main:
def __init__(self):
parser = self.get_argument()
self.set_argument(parser)
def my_args(self):
parser = OptionParser(usage='usage: %prog [options]', version='%prog 1.0.0')
parser.add_option('-t', '--test', action='store_true', dest='test', default=False,
help='Help of test.')
.
.
.
return parser
def set_args(self, parser)
options, args = parser.parse_args()
params = dict(test=options.test, ..., arg100=options.arg100)
self.start(**params)
def start(self, **params):
print params
def ...:
...
.
.
.
if __name__ == '__main__':
Main()
我想运行开始获取参数及其值以用于其他函数。但是:
TypeError: start() takes exactly 2 arguments (1 given)
如何使用 kwargs 传递它们?
在 start
中使用参数的最佳方法是什么。
我真的是 kwargs
.
的新手
**kwargs
允许函数接受关键字参数,并构造一个字典
In [3]: def g(**kw):
...: print(kw)
...:
In [4]: g(a=1, b=2, c=3)
{'a': 1, 'c': 3, 'b': 2}
如果要将字典传递给函数,则需要解压字典,如下所示:
In [5]: d = dict(e=42, f=65)
In [6]: g(**d)
{'e': 42, 'f': 65}
见http://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/, or the official documentation
以下对我有用:
class Test(object):
def a(self):
p = {"a":1, "b":2}
self.start(**p)
def start(self, **params):
print(params)
t = Test()
t.a()
结果是:
{'a': 1, 'b': 2}
我的代码中有以下结构:
#!/usr/bin/env python
import <something>
.
.
.
from modules import *
from optparse import OptionParser
class Main:
def __init__(self):
parser = self.get_argument()
self.set_argument(parser)
def my_args(self):
parser = OptionParser(usage='usage: %prog [options]', version='%prog 1.0.0')
parser.add_option('-t', '--test', action='store_true', dest='test', default=False,
help='Help of test.')
.
.
.
return parser
def set_args(self, parser)
options, args = parser.parse_args()
params = dict(test=options.test, ..., arg100=options.arg100)
self.start(**params)
def start(self, **params):
print params
def ...:
...
.
.
.
if __name__ == '__main__':
Main()
我想运行开始获取参数及其值以用于其他函数。但是:
TypeError: start() takes exactly 2 arguments (1 given)
如何使用 kwargs 传递它们?
在 start
中使用参数的最佳方法是什么。
我真的是 kwargs
.
**kwargs
允许函数接受关键字参数,并构造一个字典
In [3]: def g(**kw):
...: print(kw)
...:
In [4]: g(a=1, b=2, c=3)
{'a': 1, 'c': 3, 'b': 2}
如果要将字典传递给函数,则需要解压字典,如下所示:
In [5]: d = dict(e=42, f=65)
In [6]: g(**d)
{'e': 42, 'f': 65}
见http://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/, or the official documentation
以下对我有用:
class Test(object):
def a(self):
p = {"a":1, "b":2}
self.start(**p)
def start(self, **params):
print(params)
t = Test()
t.a()
结果是:
{'a': 1, 'b': 2}