0

首先,我使用的是 Python3

我正在阅读 Khanacademy 关于函数的 Python 教程:

定义阶乘函数

这是代码:

def factorial(number):
    product = 1
    for i in range(number):
        product = product * (i+1)
    return product

user_input = int(input("enter a number that you want to factorial: "))
factorial_of_user_input = factorial(user_input)
print(factorial_of_user_input)

我很难解释我的困惑,所以请多多包涵。我不明白以下内容: Sal 命名参数number。但随后,数字消失了。

最初,在函数教程之前,user_input被命名为number后跟print(number)。你得到输入,称之为number然后你打印number,这非常有意义,因为它很好而且一致。

不幸的是,现在,对我来说,这种一致性被打破了。您如何更改使变量名称与参数名称不同并使其起作用?因为一致性被打破了,我认为它会爆炸。在我看来,我是这样看的:该函数在桶中查找一个名为number的整数。如果你没有从那个确切的桶中给它一个整数,它就不会工作 - 有点像将一个圆形钉子插入一个矩形。

Python 使用了什么魔法来确定user_input与number相同?

4

3 回答 3

0

factorial函数对它自己的代码块(缩进部分)之外发生的事情一无所知。当您将参数传递给它时,名称不会与它们一起传递。函数看到的只是你传入了一个整数对象。函数声明中括号的目的((number)在这种情况下)是为传递给函数的对象分配名称。

简而言之,虽然在函数外部输入称为user_input,但它作为无名整数传递给函数,并且函数负责通过其定义为自己命名对象。

于 2012-11-01T20:54:22.890 回答
0

number 是给factorial函数的名称,这就是所有语法含义:您输入一个参数,在factorial函数内部它被称为名称。名字user_input不相关,你也可以写 factorial(5)

这在其他语言中也类似。例如,在 C++ 中,您可以编写一个函数

int square(int input_number){ return input_number*input_number ; }

你可以这样称呼它square(5)

您对正在发生的事情的看法是自洽的,但这不是 python 或其他语言的工作方式。具体来说,您说该函数在存储桶中查找具有数字名称的整数。

当您声明一个与示例中类似的函数时,您会说您提供的任何值都将在内部被称为number. 但是,有一种方法可以获得您期望的行为。在python中它看起来像这样:

def myfunction():
    print(some_value)

在这种情况下,some_value必须存在并在范围(或您所称的存储桶)中以该名称为人所知。所以,你需要这样做才能使这项工作:

def myfunction():
    print(some_value)
some_value=3
myfunction()

作为一个相反的例子,想象如果你想输入一个不知道特定名称的值,你会做类似的事情

def myfunction(a,b,c): 
    print(("a ",a," b ",b,"c ",c))
j=4
myfunction(1,j,5+2)
gives('a ', 1, ' b ', 4, 'c ', 7)
于 2012-11-01T15:10:41.433 回答
0

这归结为名称空间。

您需要了解您所处的范围。在 python 中,范围由函数、类和模块分隔。在您的情况下,您首先需要了解功能范围。

如果我有这样的代码块:

def function1(var1):
    print var1

var1 = 'Variable 1'
function1(var1) #will print: Variable 1
function1('var1 is just for use inside the function') #will print: var1 is just for use...
print var1 #will print: Variable 1, because we never did any assignment outside of the function

它表明函数内部的 var1 不是函数外部的 var1。有名为globaland的命名空间local。要随时查看每个范围内的变量,python 调用了两个内置函数globals()locals()它将向您显示所有变量及其值在您调用的范围内的字典(映射到值的名称)。

于 2012-11-01T21:58:42.003 回答