Python 3.x 在一个单独的函数中使用对象作为输入多次引用对象属性,最适合的方式是什么?

Python 3.x 在一个单独的函数中使用对象作为输入多次引用对象属性,最适合的方式是什么?,python-3.x,class,object,attributes,Python 3.x,Class,Object,Attributes,从pythonic效率的角度来看,如果我创建了一个具有属性的对象,然后在其他地方的另一个函数中多次使用这些属性,那么我应该每次引用对象属性(如下面示例中的函数_a)还是创建一个变量来设置对象属性以供重用(如下面的函数_b) 注意:我认为代码的清洁度/可读性和代码执行的效率都很重要 另外,对于这两种方法是否有需要注意的注意事项 例如: class Original(object): def __init__(self,value1,value2,value3):

从pythonic效率的角度来看,如果我创建了一个具有属性的对象,然后在其他地方的另一个函数中多次使用这些属性,那么我应该每次引用对象属性(如下面示例中的函数_a)还是创建一个变量来设置对象属性以供重用(如下面的函数_b)

注意:我认为代码的清洁度/可读性和代码执行的效率都很重要

另外,对于这两种方法是否有需要注意的注意事项

例如:

class Original(object):
    
    def __init__(self,value1,value2,value3):
        
        self.value1 = value1
        self.value2 = value2
        self.value3 = value3

original_object = Original(1,2,3)

def function_a(original_object):
    
    a = original_object.value1 * 3
    b = original_object.value2 / 4
    c = original_object.value3 * 10
    d = original_object.value1 * 20 + original_object.value2 * 5 - original_object.value3 * 5
    e = original_object.value2 / original_object.value3
    
    output = sum([a,b,c,d,e])
    
    return output

def function_b(original_object):
    
    value1 = original_object.value1
    value2 = original_object.value2
    value3 = original_object.value3
    
    a = value1 * 3
    b = value2 / 4
    c = value3 * 10
    d = value1 * 20 + value2 * 5 - value3 * 5
    e = value2 / value3
    
    output = sum([a,b,c,d,e])
    
    return output



%%timeit
function_a(original_object=original_object)

1.07 µs ± 135 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%%timeit
function_b(original_object=original_object)

806 ns ± 6.43 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

谢谢

我不会广泛应用这一点。我认为如果过度使用,它会使函数变长,并且在每个函数中创建本质上重复的变量本身并不会帮助提高可读性。如果使用局部变量“重命名”属性会使原本长而嘈杂的行更容易读取,我会说,去吧,然后比较哪个更容易读取。在这种情况下,我会创建一个带有修改的函数副本,然后并排执行。