我想知道是否有一种方法可以在函数的默认参数中添加一个参数。你知道吗
例如:
SOME_CITIES = ["Gotham","Chicago"]
def do_something(name, cities=SOME_CITIES):
for city in cities:
print(name, city)
do_something("Clark")
>> Clark Gotham
>> Clark Chicago
# Can I do something like this (pseudocode, obviously):
do_something("Clark", *["New York", "LA"])
>> Clark Gotham
>> Clark Chicago
>> Clark New York
>> Clark LA
想法是do_something("Clark", *"New York")
将贯穿函数,执行Gotham
、Chicago
、然后我添加的城市New York
。你知道吗
从我对**kwargs
的理解来看,这是类似的,但看起来像:
def do_something(name, **kwargs):
# Code here...
do_something("Clark", SOME_CITIES, "New York")
但这需要我回想一下发送SOME_CITIES
通过,在默认情况下我想包括它。这有道理吗?你知道吗
编辑:SOME_CITIES
可能并不总是一个列表。它可以是两个函数,即SOME_FUNCTIONS = func1, func2
。另外,正如下面的一些答案所显示的,如果这是一个坏主意,而且kwargs
/args
更好,那也没关系,让我知道并解释一下:)
Python没有语法或行为来扩展用作默认参数的列表,没有。您只需在这里使用
*args
catch all参数并在函数中连接:如果预期序列较大,则可以使用
itertools.chain()
而不是串联。请注意此处对使用元组的更改,这避免了使用可变数据类型的常见陷阱,因为在这种情况下,您根本不打算在运行时对值进行更改。你知道吗在使用列表作为默认参数值时,需要非常小心,请参见"Least Astonishment" and the Mutable Default Argument。在这种特殊情况下避免它没有什么意义,因为
SOME_CITIES
也是在函数之外定义的,您有更多的选项来更改该对象,但是您可能需要考虑改用None
哨兵:您可以将函数中的默认参数更改为
*args
,然后使用functools.partial
:输出:
相关问题 更多 >
编程相关推荐