首先,我用的是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。但之后,数字就消失了。你知道吗
最初,在函数教程之前,用户输入被命名为数字,后面是一个打印(数字)。你得到输入,称之为数字,然后打印数字,这很有意义,因为它很好而且一致。你知道吗
不幸的是,现在,对我来说,这种一致性被打破了。如何更改变量名,使其与参数名不同,并使其正常工作?因为一致性被破坏了,我想它会爆炸的。在我看来,我是这样看的:函数在一个名为number的桶中查找整数。如果你不给它一个整数从确切的桶,它只是行不通-有点像把一个圆钉到一个矩形。你知道吗
Python使用了什么魔法来发现用户输入和数字是一样的?你知道吗
number是给
factorial
函数的名称,这是所有语法的意思:输入一个参数,在factorial
函数中它就变成了name。名字user_input
与此无关,您不妨写下factorial(5)
。你知道吗这在其他语言中是相似的。例如,在C++中,你可以编写函数
你可以这样称呼它:
square(5)
您对正在发生的事情的看法是自洽的,但这不是python或其他语言的工作方式。具体地说,函数在一个名为number的bucket中查找整数。
当您声明一个类似于示例中的函数时,您会说您输入的任何值在内部都将被称为
number
。然而,有一种方法可以达到你所期望的行为。在python中,它是这样的:在本例中,
some_value
必须存在,并且在范围中以该名称命名(或者您所称的bucket)。所以,你需要这样做才能让它工作:作为一个相反的例子,假设您想输入一个不为特定名称所知的值,您可以执行以下操作
factorial
函数对它自己的代码块(缩进部分)之外发生的事情一无所知。当您向其中传递参数时,名称不会随参数一起传递。函数所看到的只是您在中传递了一个integer对象。函数声明((number)
在本例中)中括号的目的是为传递到函数中的对象指定名称。你知道吗简而言之,在函数外部,输入称为
user_input
,它作为一个无名整数传递给函数,函数负责通过其定义为自己命名对象。你知道吗这归结为namespaces.
你需要了解你所处的范围。在python中,作用域由函数、类和模块分开。在您的例子中,您首先需要了解函数的作用域。你知道吗
如果我有这样的代码块:
它表明函数内部的var1不是函数外部的var1。有一些名称空间叫做
global
和local
。为了随时查看这些作用域中的每个变量,python有两个名为globals()
和locals()
的内置函数,它们将向您显示一个字典(映射到值的名称),其中包含您调用的作用域中的所有变量及其值。你知道吗相关问题 更多 >
编程相关推荐