能否用单个通用函数替代两个Python正负转换函数?
能否用单个通用函数替代两个Python正负转换函数?
当然可以!而且实现起来相当简洁,完全能保留原两个函数的功能——不管你传入的是列表还是元组,它都能返回对应类型的负数值集合。
咱们直接上代码,这个通用函数的写法非常巧妙:
def negative(a): return type(a)(-e for e in a)
原理说明:
type(a)会自动获取传入参数的类型(比如你传列表就返回list,传元组就返回tuple)- 然后用这个类型的构造函数,把生成器表达式
(-e for e in a)的结果转换成对应类型的实例,生成器的作用就是把每个元素取反
你可以直接测试一下效果,和原函数完全一致:
# 测试列表输入 print(negative([1, 2, 3])) # 输出: [-1, -2, -3] # 测试元组输入 print(negative((4, 5, 6))) # 输出: (-4, -5, -6)
甚至这个函数还具备一定的扩展性——如果以后你需要处理其他支持用生成器构造实例的可迭代序列类型(比如某些自定义序列),它也能正常工作,当然前提是序列里的元素支持取反操作,这和原函数的限制是一样的。
备注:内容来源于stack exchange,提问作者Paul Jurczak




