python - 将需要修改的函数放在装饰器的什么位置
问题描述
有人可以解释我应该把函数放在哪里,以便我可以修改它以将给定字符串中的所有 u 更改为 t?到目前为止,这仅在我修改函数时返回 none
def my_decorator(func):
def wrapper(**kwargs):
for arg in kwargs.values():
if arg=='u':
arg.replace('t','u')
func(**kwargs)
return wrapper
def reverse_dna(**kwargs):
results=[]
for arg in kwargs.values():
if 'u' in arg:
return 'this only works for dna'
else:
reverse=arg[::-1]
results.append(reverse)
return results
@my_decorator
def reverse_dna2(**kwargs):
results=[]
for arg in kwargs.values():
if 'u' in arg:
return 'this only works for dna'
else:
reverse=arg[::-1]
results.append(reverse)
return results
print(reverse_dna(a='augc', b='uagcagcagc'))
print(reverse_dna2(a='augc', b='uagcagcagc'))
解决方案
你没有做的两件事;
- 您需要替换值
kwargs
本身 - 你调用函数后没有返回值,你只是调用它并忘记使用
return
.
*
$ cat reverse_dna.py
def my_decorator(func):
def wrapper(**kwargs):
for key, val in kwargs.items():
kwargs[key] = val.replace('u', 't')
return func(**kwargs)
return wrapper
@my_decorator
def reverse_dna2(**kwargs):
results=[]
for arg in kwargs.values():
if 'u' in arg:
return 'this only works for dna'
else:
reverse=arg[::-1]
results.append(reverse)
return results
print(reverse_dna2(a='augc', b='uagcagcagc'))
输出:
$ python reverse_dna.py
['cgta', 'cgacgacgat']
推荐阅读
- python-3.x - Pyspark Py4JJavaError
- java - 无法使用 NetBeans 8.2 和 Spring Boot 启动嵌入式 Tomcat
- pandas - 将 pandas groupby 对象转换为数据框,同时保留组语义
- firebase - 无法从 firebase 数据库接收数据
- python - 在虚拟环境中找不到模块
- javascript - 当代码在不同的文件中时,问题得到简单的承诺
- docker - ConnectionError:错误 -3 连接到 redis:6379。再试一次
- ios - iOS 开发的*真正*要求是什么
- c# - 电报机器人无法向超级组发送消息
- ios - Swift 4 从 tableView 数组中删除 JSON 零值和它的键名