【问题标题】:Naming Parameters in PythonPython中的命名参数
【发布时间】:2018-06-11 18:45:10
【问题描述】:

我正在使用 Codecademany(我是初学者。)我遇到了一个与命名参数有关的问题。没有错误,它做了我想要的,但我注意到在第 19 行它命名了参数variance,这是一个先前定义的变量。我想知道的是,当函数调用其参数和同名变量时会发生什么。它是调用变量还是参数?它是如何决定的?我该如何选择哪一个?

grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]

def print_grades(grades_input):
  for grade in grades_input:
    print grade

def grades_sum(scores):
  return sum(scores)

def grades_average(grades_input):
  return grades_sum(grades_input) / float(len(grades_input))

def grades_variance(scores):
  variance = 0
  for score in scores:
    variance += (grades_average(scores) - score) ** 2
  return variance / len(scores)

def grades_std_deviation(variance):
  return variance ** 0.5

【问题讨论】:

  • 我认为这不是问题,因为variance 变量的范围 仅限于前一个函数。也就是说,从 Python 的角度来看,variance 之前没有定义过。
  • 变量将在函数范围内使用,而不是函数参数。 Python 标准表明了这种语义。您可以通过在函数中将参数和变量命名为不同的名称来控制它。

标签: python function variables parameters arguments


【解决方案1】:

参数是作为调用的一部分绑定到对象的本地名称。如果函数参数名称与全局名称相同,则在函数内部,名称指的是参数,而不是全局。

a = 0
def f(a):
    print(a)
f(1)  # prints 1, not 0

不相互嵌套的不同函数中的本地名称,在您的代码中带有variance,不会相互干扰。

【讨论】:

    【解决方案2】:

    这无关紧要,因为变量variance 的范围将包含在函数的范围内。这意味着一旦函数的使用结束,变量就会消失。如果你确实有这样的事情:

    x = 5
    y = 6
    
    def myFunction(x):
        return x + y
    
    myFunction(2)
    

    该函数将返回 8,而不是 11,因为它优先于范围。

    【讨论】:

      【解决方案3】:

      variance被定义在内部一个函数中,在本例中为grades_variance,所以当一个参数在@987654324中再次调用variance时@,它们根本不冲突。

      这称为 scope,用简单的英语表示:在哪里您可以使用该变量,而不会出现与其他变量冲突等错误具有相同名称的名称,或者解释器告诉您它不存在,因为它定义它的范围之外。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 2016-06-01
        • 2016-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多