我有许多不同的python文件,每个文件都有许多不同的方法。这些方法中的每一个都执行某项任务,我想用一个描述该方法的输出和参数的文件名保存该任务的结果。我目前的想法是,对于每种方法,都有一个带有return_name:file_name结构的字典,并保存为方法属性,例如
def addNumbers(number_1, number_2):
addNumbers.filename_dictionary = {
"number1": "number1_" + str(number_1) + ".txt",
"number2": "number2_" + str(number_2) + ".txt"
}
final_number = number_1 + number_2
return final_number
这样做的基本动机是我希望将与该方法相关的所有信息保留在其中,因此,如果我想更改文件名,这将很容易。我想到的另一种方法是拥有一个名称相似的方法,该方法仅返回字典,但这似乎是一种更方便的方法。
def addNumbers(number_1, number_2):
added_number = number_1 + number_2
multiplied_number = number_1 * number_2
return added_number, multiplied_number
def addNumbersDictionary(number_1, number_2):
return {
"added_number": "added" + str(number_1) + "_"+ str(number_2)+".txt",
"multiplied_number": "multiplied" + str(number_1) + "_"+ str(number_2)+".txt",
}
一些问题:这个想法有根本的缺陷吗?是否有其他模式可以更标准地解决此问题?实际问题定义不明确还是没有道理?
感谢您的帮助。
答案 0 :(得分:1)
好吧,让我们忘记示例代码,只坚持主要的问题陈述(略作措辞):
我有许多不同的python文件,每个文件具有许多不同的功能。我想用描述输出和参数的文件名保存这些函数的结果。
出于好奇,请问为什么要“使用文件名”?
无论如何:您想以某种方式“保存”某些函数调用的参数和相关结果。在Python中执行此操作的简单方法是使用函数装饰器。这是一个简单快捷的示例,使用全局字典来保存您感兴趣的数据:
from collections import defaultdict
from functools import wraps
saved_data = defaultdict(list)
def save(func):
@wraps(func)
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
saved_data[func.__name__].append({"args": args, "kwargs": kwargs, "result": result})
return result
return wrapper
@save
def add_nums(num1, num2):
return num1 + num2
add_nums(1, 2)
add_nums(3, 4)
add_nums(num2=2, num1=1)
print(saved_data)
现在,您已经收集了数据,您可以对它们进行任何操作。
这当然可以大大改善(例如,避免使用全局saved_data
,使用inspect.getargspecs(func)
对保存的参数进行更统一的表示等,但这至少可以帮助您入门。) >
注意:如果您确实想要“描述输出和参数的文件名”,则可以重写装饰器以保存这些“文件名”,而不是实际值,或者随后从收集的值中生成这些文件名。
>