Performance 我们应该将O(1)中可以获取的变量传递到嵌套函数中,还是在每个嵌套函数中调用该函数?

Performance 我们应该将O(1)中可以获取的变量传递到嵌套函数中,还是在每个嵌套函数中调用该函数?,performance,function,parameters,coding-style,standards,Performance,Function,Parameters,Coding Style,Standards,下面的例子最好地解释了这个问题。哪个是标准的:(A)还是(B) A)在每个嵌套函数中传递变量: def条(X,y,n行,n列): #做事。。。。 退货 def foo(X,y,n行,n列): stuff=bar(X,y,n行,n列) #做些事情。。。 退货 B)调用每个嵌套函数中的O(1)函数: def条(X,y): n_行=获取_行数(X)#X.shape[0] n_cols=get_cols(X)#X.shape[1] #做事。。。。 退货 def foo(X,y): n_行=获取_行数(

下面的例子最好地解释了这个问题。哪个是标准的:(A)还是(B)

A)在每个嵌套函数中传递变量:
def条(X,y,n行,n列):
#做事。。。。
退货
def foo(X,y,n行,n列):
stuff=bar(X,y,n行,n列)
#做些事情。。。
退货
B)调用每个嵌套函数中的O(1)函数:
def条(X,y):
n_行=获取_行数(X)#X.shape[0]
n_cols=get_cols(X)#X.shape[1]
#做事。。。。
退货
def foo(X,y):
n_行=获取_行数(X)#X.shape[0]
n_cols=get_cols(X)#X.shape[1]
stuff=bar(X,y)
#做些事情。。。
退货
将行数和列数传递给嵌套函数似乎有点冗长,但另一方面,保持设置变量似乎效率低下。我甚至不太确定是否可以在恒定时间O(1)中获得行数和列数。我用Python编写了这个问题(实际上使用了R),但我的目标是对这个问题进行足够的概括,使其能够应用于任何语言

帮助链接:
(建议将其设置为对象以避免使用多个参数)

问题:
  • 哪一个更易于阅读
  • 哪一种性能更好
  • 我们是否应该以这种情况永远不会出现的方式编写代码
  • 对于不同的语言,(1)和(2)的答案会不同吗
  • 旁白:在这个问题的命名上需要一些帮助——少一点冗长,多一点泛泛。

    我认为

  • B
    是首选,因为它避免了更改参数数量或名称时出现的一些问题。选项
    A
    有代码气味,他的解决方案称为
    B

    而且两种方法都有气味。这可以通过重新设计OO并使传递的变量成为类的成员来解决。或者引入全局变量或上下文变量(但这种情况非常罕见)

  • 如果没有不必要的副作用或按值复制大型对象,则可以忽略性能。我建议您在开发时遵守以下规则:

  • “从不”一词不适用于软件设计。这完全取决于上下文

  • 我认为是这样的,不仅对不同的语言,而且对在一种语言的框架内解决的问题,所使用的工具,库,框架等等

  • 我认为

  • B
    是首选,因为它避免了更改参数数量或名称时出现的一些问题。选项
    A
    有代码气味,他的解决方案称为
    B

    而且两种方法都有气味。这可以通过重新设计OO并使传递的变量成为类的成员来解决。或者引入全局变量或上下文变量(但这种情况非常罕见)

  • 如果没有不必要的副作用或按值复制大型对象,则可以忽略性能。我建议您在开发时遵守以下规则:

  • “从不”一词不适用于软件设计。这完全取决于上下文

  • 我认为是这样的,不仅对不同的语言,而且对在一种语言的框架内解决的问题,所使用的工具,库,框架等等


  • 还有一个方面:版本A容易出错。
    foo()
    bar()
    调用者必须将数组的维度冗余地传递给函数。通过
    X
    传递到
    n_行
    n_列
    没有任何用例,而且,它可能会给出无意义的结果。还有一个方面:版本A容易出错。
    foo()
    bar()
    调用者必须将数组的维度冗余地传递给函数。通过
    X
    传递到
    n_行
    n_列
    没有任何用例,而且,它可能会给出无意义的结果。