Python 将lambda函数保存到文件而不引用其他变量/显式

Python 将lambda函数保存到文件而不引用其他变量/显式,python,lambda,static,Python,Lambda,Static,我试图在Python中显式保存lambda函数。明确地说,我的意思是不引用变量(或者这称为静态?) 最低工作示例: from argparse import Namespace from math import asin import dill as pickle # Use 'dill' because it can pickle lambda functions, which 'pickle' cannot. def save_data_to_file(data_to_save, fi

我试图在Python中显式保存lambda函数。明确地说,我的意思是不引用变量(或者这称为静态?)

最低工作示例:

from argparse import Namespace
from math import asin
import dill as pickle  # Use 'dill' because it can pickle lambda functions, which 'pickle' cannot.


def save_data_to_file(data_to_save, file_name):
    with open(file_name, 'wb') as data_to_save_file:
        pickle.dump(data_to_save, data_to_save_file)


def load_data_from_file(file_name):
    with open(file_name, 'rb') as data_to_save_file:
        data = pickle.load(data_to_save_file)
    return data


# Definition function.
constant = 1
my_function = lambda x: asin(x) + constant

# Save function.
data_to_save = {'my_function': my_function}
file_name = 'my_function.input'
save_data_to_file(data_to_save, file_name)

# Delete variables for the sake of testing correct loading of the function.
print(my_function(0.15))
del my_function
del constant

# Load function.
data_loaded_from_file = load_data_from_file(file_name)
dlff = Namespace(**data_loaded_from_file)
print(dlff.my_function(0.15))  # NameError: name 'constant' is not defined
我得到错误
NameError:name“constant”未定义
。所以我想要的是保存
my_函数
,这样它就可以使用
常量
一次,但在定义之后就不再需要它了。这样,我就可以加载
我的_函数
,而不用Python抱怨不知道
常量


如何实现这一点?

如果希望常数成为函数的一部分,则必须使其成为函数的一部分:

my_function = lambda x, constant=1: asin(x) + constant
# or
my_function = lambda x: asin(x) + 1
# or
import functools
temp_func = lambda x, constant: asin(x) + constant
my_function = functools.partial(temp_func, constant=1)
或者,如果您绝对需要常数不是参数,但仍然是动态的,您可以通过eval实现这一点。不过,我强烈建议不要这样做

constant = 1
my_function = eval("lambda x: asin(x) " + str(constant))

如果希望常数成为函数的一部分,则必须使其成为函数的一部分:

my_function = lambda x, constant=1: asin(x) + constant
# or
my_function = lambda x: asin(x) + 1
# or
import functools
temp_func = lambda x, constant: asin(x) + constant
my_function = functools.partial(temp_func, constant=1)
或者,如果您绝对需要常数不是参数,但仍然是动态的,您可以通过eval实现这一点。不过,我强烈建议不要这样做

constant = 1
my_function = eval("lambda x: asin(x) " + str(constant))

不相关,但不应使用
lambda
定义命名函数-这就是
def
语句的目的。为什么不能使用普通函数,默认值为
constant
=0,
def func(x,constant=0):
返回asin(x)+constant
,如果要添加一个不相关的常量,但不应该使用
lambda
来定义命名函数,则将其传递给函数-这就是
def
语句的作用。为什么不能使用一个普通函数,默认值为
constant
=0,
def func(x,constant=0):
返回asin(x)+常量
,如果要添加常量,请将其传递给函数