在Python中运行时将对象分配给对象

sma*_*ili 4 python python-2.7

我正在尝试在Python中使用Javascript等效项:

a.new_func = function(arg1, arg2) {
    var diff = arg1 - arg2;
    return diff * diff;
}
Run Code Online (Sandbox Code Playgroud)

现在,我这样做的方法是首先定义方法,然后分配它,但我的问题是Python是否允许速记在同一行中进行赋值和定义部分.像这样的东西:

a.new_func = def new_func(arg1, arg2):
    diff = arg1 - arg2
    return diff * diff
Run Code Online (Sandbox Code Playgroud)

而不是这个:

def new_func(arg1, arg2):
    diff = arg1 - arg2
    return diff * diff
a.new_func = new_func
Run Code Online (Sandbox Code Playgroud)

我意识到差异不大,但我仍然有兴趣知道它是否可能.

use*_*ica 9

Python不支持这样的语法.

我想如果你想,你可以写一个装饰师.它可能看起来更好一些:

def method_of(instance):
    def method_adder(function):
        setattr(instance, function.__name__, function)
        return function
    return method_adder

@method_of(a)
def new_func(arg1, arg2):
    stuff()
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望该方法可以访问self:

def method_of(instance):
    def method_adder(function):
        setattr(instance, function.__name__, function.__get__(instance))
        return function
    return method_adder

@method_of(a)
def new_func(self, arg1, arg2):
    stuff()
Run Code Online (Sandbox Code Playgroud)


ins*_*get 6

与您正在寻找的最接近的是lambda表达式,它不像正确编写的函数那样易于使用:

a.new_function = lambda arg1,arg2 : (arg1-arg2)**2
Run Code Online (Sandbox Code Playgroud)

但是,在几乎所有情况下,定义一个函数并分配它,您在示例中的方式就是要走的路