Sta*_*ack 1 python function python-3.x
我有一个函数df()可以对输入 *args 执行一些操作:
def df(*args):
for arg in args:
# do some computation
Run Code Online (Sandbox Code Playgroud)
我有这三个变量,它们将成为 的参数df():
a = 1234
b = 4321
c = None
Run Code Online (Sandbox Code Playgroud)
有什么办法可以在函数调用中“丢弃”这个非类型值?
我知道我可以在函数内添加一个条件,但在我的情况下,我有更多的函数也将接收这个值,那么有没有办法在函数调用中“丢弃”某种参数?
从函数参数中过滤掉 None 的装饰器:
def omit_none(f):
def wrapper(*args):
args = [arg for arg in args if arg is not None]
return f(*args)
return wrapper
Run Code Online (Sandbox Code Playgroud)
然后将其用作
@omit_none
def df(*args):
for arg in args:
# do some computation
Run Code Online (Sandbox Code Playgroud)
那是假设您不打算对受影响的函数使用关键字参数。
如果我有另一个函数 bar(user, *args) 并且我只需要在 args 上使用装饰器
好的。这是一个适应性更强的版本:
def omit_none_from(index):
def omit_none_from(func):
def wrapper(*args):
args = list(args[:index]) + [arg for arg in args[index:] if arg is not None]
return func(*args)
return wrapper
return omit_none_from
Run Code Online (Sandbox Code Playgroud)
您用作:
@omit_none_from(1)
def bar(user, *args):
...
Run Code Online (Sandbox Code Playgroud)
这将从参数 1 开始过滤掉 None ,因此它将user保持第一个参数不变。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |