与函数参数混淆,以及为什么不需要通过其名称调用参数

2024-04-23 19:10:45 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我用的是Python3

我正在学习Khanacademy的Python教程关于函数:

Defining a Factorial Function

代码如下:

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使用了什么魔法来发现用户输入和数字是一样的?你知道吗


Tags: of函数用户numberinput参数教程数字
3条回答

number是给factorial函数的名称,这是所有语法的意思:输入一个参数,在factorial函数中它就变成了name。名字user_input与此无关,您不妨写下 factorial(5)。你知道吗

这在其他语言中是相似的。例如,在C++中,你可以编写函数

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

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

您对正在发生的事情的看法是自洽的,但这不是python或其他语言的工作方式。具体地说,函数在一个名为number的bucket中查找整数。

当您声明一个类似于示例中的函数时,您会说您输入的任何值在内部都将被称为number。然而,有一种方法可以达到你所期望的行为。在python中,它是这样的:

def myfunction():
    print(some_value)

在本例中,some_value必须存在,并且在范围中以该名称命名(或者您所称的bucket)。所以,你需要这样做才能让它工作:

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)

factorial函数对它自己的代码块(缩进部分)之外发生的事情一无所知。当您向其中传递参数时,名称不会随参数一起传递。函数所看到的只是您在中传递了一个integer对象。函数声明((number)在本例中)中括号的目的是为传递到函数中的对象指定名称。你知道吗

简而言之,在函数外部,输入称为user_input,它作为一个无名整数传递给函数,函数负责通过其定义为自己命名对象。你知道吗

这归结为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。有一些名称空间叫做globallocal。为了随时查看这些作用域中的每个变量,python有两个名为globals()locals()的内置函数,它们将向您显示一个字典(映射到值的名称),其中包含您调用的作用域中的所有变量及其值。你知道吗

相关问题 更多 >