【发布时间】:2023-03-10 21:42:01
【问题描述】:
我想在 python 中编写一个函数,除了一个命名参数(具有默认值)之外,它还可以接收任意数量的未命名参数。
例如,我想写这样的东西
def myFunc(*args, optDefault=1):
但这只是给出了一个语法错误。有没有等效的方法来做到这一点?
【问题讨论】:
我想在 python 中编写一个函数,除了一个命名参数(具有默认值)之外,它还可以接收任意数量的未命名参数。
例如,我想写这样的东西
def myFunc(*args, optDefault=1):
但这只是给出了一个语法错误。有没有等效的方法来做到这一点?
【问题讨论】:
怎么样
def myFunc(*args, **kwargs):
optDefault = kwargs.pop('optDefault', 1)
assert kwargs == {}, "There may only be one keyword argument to myFunc"
不是最漂亮的,但它确实有效。
【讨论】:
TypeError,而不是AssertionError。是的,not kwargs 更惯用(尽管多态在这里并不重要,但假设type(kwarg) is dict 是一个相当省钱的赌注)。
怎么样:
def myFunc(optDefault=1, *args):
【讨论】:
import optparse
if __name__=="__main__":
parser = optparse.OptionParser("usage: %prog [options] arg1 arg2")
parser.add_option("-H", "--host", dest="hostname",
default="127.0.0.1", type="string",
help="specify hostname to run on")
parser.add_option("-p", "--port", dest="portnum", default=80,
type="int", help="port number to run on")
(options, args) = parser.parse_args()
if len(args) != 2:
parser.error("incorrect number of arguments")
hostname = options.hostname
portnum = options.portnum
【讨论】: