python - 如何丢弃函数参数中的无值
问题描述
我有一个df()
对输入 *args 执行一些操作的函数:
def df(*args):
for arg in args:
# do some computation
我有这三个变量将成为的参数df()
:
a = 1234
b = 4321
c = None
有什么方法可以在函数调用中“丢弃”这个非类型值?
我知道我可以在函数内添加一个条件,但在我的情况下,我还有更多的函数也将接收这些值,那么有没有办法在函数调用中“丢弃”某种参数?
解决方案
从函数参数中过滤掉 None 的装饰器:
def omit_none(f):
def wrapper(*args):
args = [arg for arg in args if arg is not None]
return f(*args)
return wrapper
然后将其用作
@omit_none
def df(*args):
for arg in args:
# do some computation
这是假设您不打算对受影响的函数使用关键字参数。
如果我有这个其他功能 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
您用作:
@omit_none_from(1)
def bar(user, *args):
...
这将从参数 1 开始过滤掉 None ,因此它将保留第一个参数user
不变。
推荐阅读
- c++ - 如何使用 C++ 将 UTF-16 转换为 UTF-8?
- c# - 更改 url 中的查询字符串
- c++ - 如何用变量数组新建一个结构?
- arrays - 在数组中查找最小值/最大值 - 遍历循环
- docker - 使用 Check_MK 监控 Docker
- json - 如何将 json 文件读入地图
- android - 谷歌地图喜欢标记周围有地名的标记
- javascript - 如何使画布的不同部分(矩形)在给定的坐标对中淡出?
- c++ - cmake - 如何可能链接 Boost 的 sub_directory 头文件(例如:/archive/text_oarchive.hpp)?
- java - 修改现有的 JBehave 插件