Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数参数(以Python为例)_Python_Function_Arguments_Language Design_Argument Passing - Fatal编程技术网

函数参数(以Python为例)

函数参数(以Python为例),python,function,arguments,language-design,argument-passing,Python,Function,Arguments,Language Design,Argument Passing,什么是[函数]参数?它们是用来干什么的? 我最近开始学习Python;我是编程新手,我为这个基本问题道歉 在我读过的每一篇Python教程中,它们都讨论参数。我一直在寻找这个问题的答案,并找到了很多答案,但这些答案对我来说太难理解了。我可能只是缺少一些概念背景。 所以当我定义一个函数时,括号中的东西是用来做什么的? 例如: 编辑: 与此相关的两个后续问题后来在这里被关闭和合并,因此部分答案具有部分脱离上下文的特征。 后续问题为:[改写] 使用参数的其他例子有哪些? 为什么要使用参数,而不是让函数

什么是[函数]参数?它们是用来干什么的? 我最近开始学习Python;我是编程新手,我为这个基本问题道歉

在我读过的每一篇Python教程中,它们都讨论参数。我一直在寻找这个问题的答案,并找到了很多答案,但这些答案对我来说太难理解了。我可能只是缺少一些概念背景。 所以当我定义一个函数时,括号中的东西是用来做什么的? 例如:

编辑: 与此相关的两个后续问题后来在这里被关闭和合并,因此部分答案具有部分脱离上下文的特征。 后续问题为:[改写]

使用参数的其他例子有哪些? 为什么要使用参数,而不是让函数调用原始输入? 在我看来,我们只是用它们来代替用户可以在键盘上输入的东西。
简单地说,它们是传递给函数的数据,用来告诉函数该做什么。维基百科提供了详细信息

例如,hi功能可能需要知道向谁打招呼:

def hi(person):
    print "Hi there " + person + ", how are you?"
或者数学函数可能需要一个值来操作:

def square(x):
     return x * x

在您的示例中,没有使用它们

如果你的函数需要根据你给它的参数而有不同的行为,那么参数是用来做什么的

def hi_name(name):
    print 'Hi ' + name

hi_name("John doe")
这印的是约翰·多伊


现在回到关于的基本知识。

如果您不能向函数提供它们应该处理的信息,那么函数将毫无用处。 参数就是这样的信息

def GiveMeANumberAndIDuplicateIt(x):
    return x * 2

def DontGiveMeAnythingAtAll():
    return None

这不是一个Python问题,而是一个通用编程问题。一个非常基本的

在回答有关论点的问题之前,以及考虑到您提出的其他问题,讨论变量的概念是很有用的。 变量是一个命名的内存块,可以在其中存储和检索底层程序感兴趣的信息。换句话说,它是一个符号名,由程序员选择,与它的内容相关联。使用各种语言结构(通常称为赋值),程序员可以读取或写入变量的内容。 值得注意的是,在编写程序时,不需要定义变量的值,即变量的内容。只有在运行时才需要。这允许程序描述在符号元素上执行的操作,而不确切知道这些元素的值。考虑这个片段,一个更大的程序的一部分:

# ... some logic above
ball_volume = 4.0 / 3 * math.pi * ball_radius
if ball_volume > 200:
   print ("Man, that's a big ball")
# ... more logic below
在编写程序时,不需要知道球半径的实际值;然而,假设这个变量将包含某个假想球的数值,代码片段能够描述如何计算球的体积。以这种方式,当程序正在运行时,以及稍后以某种方式对ball_radius变量进行了初始化,并使用了一些适当的值,变量ball_volume也可以被初始化和使用,在条件语句if中,可能在下面。在某些情况下,变量可能超出范围,但这个控制程序何时可以访问特定变量的概念远远超出了本入门书的范围。 在某些语言中,可能与特定变量关联的数据类型需要明确定义,并且不能更改。例如,一些变量只能保存整数值,其他变量只能保存字符串值文本等。在Python中,没有这样的限制,可以将变量分配和重新分配给任何类型的数据,但当然,程序员需要跟踪这一点,例如,避免将一些文本数据传递给数学函数

存储在变量中的数据可能来自非常不同的来源。在教程和介绍性文档中提供的许多示例中,这些数据都来自键盘输入,就像您在一些问题中提到的使用原始输入一样。这是因为它允许尝试这些教程片段的人进行交互式测试。但是,如果变量只从交互式用户输入中获取数据,那么程序的有用性将相当有限。还有许多其他来源,这正是编程如此强大的原因:可以使用以下来源的数据初始化变量:

数据库 文本文件或各种文本基格式的文件XML、JSON、CSV。。 各种格式的二进制文件 互联网连接 物理设备:摄像机、温度传感器。。。 简言之,参数(也称为)是传递给函数的变量,通常用于提供不同于函数的输出和行为。例如:

>>> def say_hello(my_name):
...    print("Hello,", my_name, "!")

>>> say_hello("Sam")
Hello, Sam !
>>> customer_name = "Mr Peter Clark"    #imagine this info came from a database
>>> # ...
>>> say_hello(customer_name)
Hello, Mr Peter Clark !
>>>
在上面的示例中,my_name与say_hello函数的任何局部变量一样;这允许函数定义在运行时调用函数时它将如何处理基础值。 在运行时,可以使用立即值调用该函数,该值在逻辑中是硬编码的,例如e中的Sam 例如,或使用另一个变量(如customer_name)的[值]。在这两种情况下,函数的my_name变量的值分别被赋值为Sam和Peter Clark先生。在后一种情况下,该值是customer_name变量包含的任何值。请注意,函数my_name内部使用的变量名称与函数调用customer_name时使用的变量名称不需要相同。这些参数分别称为形式参数和实际参数

请注意,虽然大多数参数通常作为输入传递给函数,但在某些情况下,它们可以用作输出,即在调用函数的逻辑级别提供新的/修改的值。这样做需要隐式或显式地使用正确的调用约定规范,请参见下面的参数传递约定

现在。。。除了对参数用途的基本理解之外,事情会变得稍微复杂一些,但不会太复杂。我将一般性地讨论这些附加概念,并在它们应用于Python时加以说明

参数的默认值也称为可选参数 声明函数时,它可能会指定某些参数的默认值。这些值用于调用函数时未指定的参数。由于明显的原因,这些可选参数位于参数列表的末尾,否则语言编译器/解释器可能难以确定哪个参数是哪个

>>> def say_hello(dude = "Sir"):
...     print("Hello,", dude, "!")
...
>>> say_hello()
Hello, Sir !
>>> say_hello("William Gates")
Hello, Bill !            #just kidding ;-)
Hello, William Gates !   # but indeed. works as the original function when param
                         # is specified
参数数量可变 在某些情况下,可以方便地定义一个函数,以便它可以接受数量可变的参数。虽然这样的参数值列表最终会在某种容器列表、数组、集合中传递。。。各种语言提供了访问此类参数值的方便方法

>>> def add_many(operand1, *operands):
...    Sum = operand1
...    for op in operands:
...       Sum += op
...    return Sum
...
>>> add_many(1, 3, 5, 7, 20)
36
>>> add_many(1, 3)
4
命名参数关键字参数 使用Python和其他一些语言,可以在调用函数时显式地命名参数。默认情况下,参数传递是基于位置基础的第一个参数、第二个参数等,Python将允许您命名参数并按任意顺序传递它们。这在很大程度上是一种语法上的精确性,但与接受很多参数的函数的默认参数结合使用时可能会很有用。这也是一个很好的自我记录功能

>>> def do_greetings(greeting, person):
...    print (greeting, "dear", person, "!")
...
>>> do_greetings(person="Jack", greeting="Good evening")
Good evening dear Jack !
在Python中,您甚至可以传递一个字典来代替几个命名参数。例如,使用do_greetingsas-is,假设您有一个字典,如:

>>> my_param_dict = {"greeting":"Aloha", "person":"Alan"}

>>> do_greetings(**my_param_dict)
Aloha dear Alan !
最后,虽然传递参数的奇特方式以及方法处理可变数量参数的能力是各种语言的有用特性,但需要提到两个关键概念:

参数传递约定:按值还是按引用 到目前为止,我们使用的所有函数都没有改变传递给它们的参数的值。我们可以想象,在许多情况下,函数可能希望这样做,或者对所述值执行一些转换或计算,以供其自身内部使用,或者有效地更改变量的值,以便在调用函数的逻辑级别上反映更改。这就是论点传递约定派上用场的地方。。。 通过值传递的参数可以由函数为其自身的内部计算而更改,但不会在调用方法级别更改。 通过引用传递的参数将反映在调用方法级别对其所做的更改。 每种语言都指定传递参数的方式。一个典型的约定是按值传递整数、数值和其他基本类型,并按引用传递对象。大多数语言还提供允许更改默认约定的关键字

在python中,所有参数都是通过引用传递的。然而,一些变量类型是不可变的数字、字符串、元组。。。因此,它们不能被功能改变

隐式self或类方法的此参数 在面向对象语言中,方法(即类中的函数)接收一个额外的参数,该参数是类实例的底层对象的值,允许方法在计算中使用类成员的各种属性和/或更改其中一些属性的值

在Python中,此参数在方法定义级别声明,但隐式传递。声明后,它可以被命名为任何人想要的名字,尽管按照惯例这通常被称为self


括号中的内容称为参数。基本上,这些是您希望函数使用的变量。例如,假设您有一个函数,您希望它在调用它时打印一个单词。通过参数,您可以定义该词的含义。以下是一个例子:

def hi(word):
    print word
现在,如果我这样做:

hi('Hello!')
它将打印:

'Hello!'
嗨,通过了“你好!”作为一个名为word的变量,然后它将该单词打印出来。

对于使用参数,它只是一个演示如何使用参数的例子,而不是您演示的最有效的方法。函数非常有用。例如,如果我想添加两个数字:

def add(num1, num2):
  x = num1 + num2
  return x
add(1,3)
函数对于执行重复性任务非常有用,比如说,在您的示例中,您必须向数百个姓名打招呼,而不必执行原始输入函数的循环来读取他们的姓名并向其添加一些文本,您只需调用函数来执行任务并向其传递姓名参数即可

根据您的第二个问题,参数只是传递给函数的变量,因此无论您从外部传递给它的变量是什么,例如,我将数字1和3传递给我的函数add,在该函数的内部,它们被简单地称为num1 num2

在您的情况下,传递太多参数会产生以下结果:

>>> add(1,2)
3
>>> add(1,2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: add() takes exactly 2 arguments (3 given)
>>> 

祝你好运!如果您需要进一步帮助,请随时给我发电子邮件。麻省理工学院的Brichards.edu

参数是一个特殊变量,它只存在于该函数中

在您的示例中,有一个函数包含两个参数:

def add(num1,num2):
    x = num1 + num2
    return x
当我用add调用这个函数时,我必须在括号中加上我想要的num1和num2。在你的例子中,你有1和3,所以你把它叫做add1,3

你要说的是,你想调用add,你想让第一个参数num1等于1,第二个参数num2等于3。

def maina,b: 版画 版图 缅因州3、5 这是带有参数的函数的基本示例,有关详细信息,请查看

输出:

3
5

谢谢你简单的解释。回答得好。。。虽然我担心在这种情况下,你讨论复杂的东西太快了,但在这种情况下,许多讨论基础知识的段落是必要的。@Nate,你可能是对的。冒着让人们进一步困惑的风险,鉴于OP提出的其他问题,我添加了更多细节,特别是关于变量的概念。这也许没什么帮助,但话说回来,你似乎是我的化身-请不要重复问同一个问题。我把你在过去六个小时里问的另外两个相同的问题合并到这一个问题中。再一次,不要再发布这个问题。为什么会有反对票?当然,这个问题有点弱,而且是一个初学者的问题,他显然没有花太多的时间去想问题。尽管如此,这个问题在本质上是概念性的,但在StackOverflow中的范围非常广泛,并且确实对应于新手在筛选教程和其他书籍时遇到的一个真正且可能非非典型的障碍,但缺乏适当的词汇。而且许多教程都假设这些关于基本概念的明显/常见知识很容易理解。让我们更加热情@mjv我认为否决票是合理的,因为用户显然没有阅读常见问题,此外,缺乏努力和重复发布相同的问题,这迫使我将其标记并让版主将其合并。如果人们认为它离题了,它将被投票关闭,而不是被否决。这是一个糟糕的问题,对于一个问题来说,这不是一个糟糕的话题,而且受到了社区的如此对待。我认为,也有人对那些似乎以英语为母语但不努力清晰地使用英语的人抱有偏见。这真让我讨厌。
def add(num1,num2):
    x = num1 + num2
    return x
3
5