首先,我使用的是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命名参数数字。但是,数字消失了。
最初,在功能教程之前, user_input 被命名为数字,后跟打印(数字)。你得到输入,称之为数字,然后打印数字,这非常有意义,因为它很好且一致。
不幸的是,现在,对我来说,这种一致性已被打破。如何更改变量名称与参数名称不同并使其有效?因为一致性被打破了,我认为它会炸毁。在我看来,我这样看:该函数在一个名为数字的存储桶中查找整数。如果你没有从那个确切的桶中给它一个整数,它就不会工作 - 就像把一个圆形的钉子钉在一个矩形中一样。
Python使用什么魔法来确定 user_input 与数字相同?
答案 0 :(得分:0)
number是factorial
函数的名称,所有语法都意味着:您输入一个参数,并在factorial
函数内部称为名称。名称user_input
不相关,您也可以写
factorial(5)
。
这与其他语言类似。例如,在C ++中,您可以编写一个函数
int square(int input_number){ return input_number*input_number ; }
您可以通过说square(5)
您对正在发生的事情的看法是自洽的,但这不是python或其他语言的工作方式。具体来说,你说该函数在一个名为number的存储桶中查找整数。
当你声明一个类似于你的例子中的函数时,你会说你所提供的任何值都将在内部被称为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)
答案 1 :(得分:0)
factorial
函数不知道在自己的代码块(缩进部分)之外发生了什么。将参数传递给它时,名称不会随之传递。所有函数都看到你已经传递了一个整数对象。函数声明中的括号的用途(本例中为(number)
)是为传递给函数的对象赋值。
简而言之,在函数外部,输入被称为user_input
,它作为无名整数传递给函数,函数负责通过其定义为对象命名对象。
答案 2 :(得分:0)
这归结为namespaces.
您需要了解您所处的范围。在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。有名为global
和local
的名称空间。要在任何时候查看每个范围中的变量,python有两个内置函数,名为globals()
和locals()
,它们将显示所有变量及其值的字典(映射到值的名称)在您呼叫的范围内。