参数或参数? [复制]

Posted

技术标签:

【中文标题】参数或参数? [复制]【英文标题】:Arguments or parameters? [duplicate] 【发布时间】:2010-09-30 11:17:18 【问题描述】:

我经常发现自己对如何使用“参数”和“参数”这两个术语感到困惑。它们似乎在编程世界中可以互换使用。

它们的正确使用约定是什么?

【问题讨论】:

作为记录,一个密切相关的问题:***.com/questions/156767/…(这是针对 C# 制定的,而这与语言无关;其他方面基本相同。) @Jonik:这并不是 C# 所特有的,因为发帖者还询问了其他编程语言中的术语。另一个问题比较老,(在我看来)有一些更好的答案。 如果我们认为它与语言无关,那么它确实是一个完全的骗局。 【参考方案1】:

参数是函数定义为输入的东西,参数是作为参数传递的东西。

void foo(int bar)  ... 

foo(baz);

在本例中,barfoo 的参数。 baz 是传递给 foo 的参数。

【讨论】:

Rinat 有正式的定义——你所拥有的没有错,但也不完全正确。【参考方案2】:

参数是函数声明中的变量:

functionName(parameter) 
    // do something

参数是传递给函数的这个变量的实际值:

functionName(argument);

【讨论】:

这是正式正确的解释。 啊,所以 parameterformal argumentargumentactual argument我>。 ;-)【参考方案3】:

对于user1515422,一个非常具体的例子来说明参数和参数之间的区别:

考虑这个函数:

int divide(int numerator, int denominator) 
    return numerator/denominator;

它有两个参数numeratordenominator,在定义时设置。一旦定义,函数的参数是固定的,不会改变。

现在考虑调用该函数:

int result = divide(8, 4);

在这种情况下,84 是传递给函数的参数numerator 参数设置为参数8 的值,denominator 设置为4。然后使用设置为参数值的参数来评估函数。你可以认为这个过程等同于:

int divide() 
    int numerator = 8;
    int denominator = 4;
    return numerator/denominator;

形参和实参之间的区别类似于变量与其值之间的区别。如果我写int x = 5;,变量是x,值是5。可能会出现混淆,因为将“x 是 5”作为“变量 x 的值 5”的简写是很自然的,但希望区别很清楚。

这能说明问题吗?

【讨论】:

【参考方案4】:

参数是您在调用子例程时所拥有的。参数是您在子例程中访问的内容。

argle(foo, bar);

foobar 是参数。

public static void main(final String[] args) 
    args.length;

args 是一个参数。

【讨论】:

"args 是一个参数"。您同意将args 作为命名选择吗? @Liam 我可能不会选择它,但这是惯例,所以我坚持使用它以避免混淆。 @Liam:这里有点晚了,但是:args 是一个参数,但它的内容是在命令行中传递来启动程序的参数。称它为parameters 是不正确的,因为虽然变量本身(在方法签名中)是一个参数,但该数组(运行时)的内容不是参数。【参考方案5】:

parameter Wikipedia 文章中有关于此主题的精彩部分。

简而言之 -- parameter 是函数定义的正式名称,argument 是传递给函数的实际值(如 5)或事物(如变量)。 p>

【讨论】:

【参考方案6】:

虽然 Wikipedia 几乎不是权威来源,但 explaining the terms 做得不错。

我猜你可以说参数之于参数就像类之于对象实例...

【讨论】:

【参考方案7】:

当你定义一个函数时:

MyFunction(param1,param2) 
  print parameter1, parameter

在定义函数时设置参数。 当你像这样调用函数时:

MyFunction('argument1', 'argument2');

您将参数的值设置为您传递的参数。论点是您在调用问题时提出的问题。希望对您有所帮助。

【讨论】:

【参考方案8】:

只是没有大的区别。如果我们深入其中,我们可以识别差异。主要我们知道 Argument/Parameter/signature 都是相同的。

Parameter 基本上定义了我们传递的数据的类型。而 Argument 定义了我们传递的实际数据/变量。

参数示例:-

int add(int a,int b) //Here a and be both can treated as Parameter
 return a+b;

参数示例:-

int return_result=add(3,4); // Here 3 and 4 both can treated as Argument

or

int x=3,y=4;
int return_result=add(x,y);// Here x and y both can treated as Argument

【讨论】:

【参考方案9】:

在大多数情况下,一个过程需要一些关于它被调用的环境的信息。执行重复或共享任务的过程对每个调用使用不同的信息。此信息由您在调用过程时传递给过程的变量、常量和表达式组成。

为了将此信息传递给过程,过程定义了一个参数,调用代码将一个参数传递给该参数。您可以将参数视为停车位,将参数视为汽车。正如不同的汽车可以在不同的时间停放在停车位一样,调用代码每次调用过程时可以将不同的参数传递给同一个参数。

参数

参数表示过程在调用时希望您传递的值。过程的声明定义了它的参数。

定义FunctionSub 过程 时,在紧跟过程名称的括号中指定参数列表。为每个参数指定名称、数据类型和传递机制(ByVal 或 ByRef)。您还可以指示参数是可选的,这意味着调用代码不必为其传递值。

每个参数的名称用作过程中的局部变量。您使用参数名称的方式与使用任何其他变量的方式相同。

参数

自变量表示您在调用过程时传递给过程参数的值。调用代码在调用过程时提供参数。

当您调用 FunctionSub 过程 时,您在紧跟过程名称之后的括号中包含一个参数列表。每个参数对应于列表中相同位置的参数。

与参数定义相比,参数没有名称。每个参数都是一个表达式,它可以包含零个或多个变量、常量和文字。计算表达式的数据类型通常应与为相应参数定义的数据类型匹配,并且在任何情况下都必须可转换为参数类型。

【讨论】:

【参考方案10】:

实际上参数和实参都是不同类型的参数。那些是

1)形式参数 - 变量出现在函数/子程序定义中

例如。 (在 Java 中)

public void foo(Integer integer, String... s2)

这里的 integer 和 s2 都是形式参数或松散的参数。

2)实参或实参——变量在调用时出现在子程序中

已经定义的子程序

例如。 (在 Java 中) 假设如果函数“foo”驻留在对象“testObject”中,

testObject.foo(new Integer(1), "test")

因此,函数定义中的变量称为形参或简单的参数和变量,而调用方法则称为实参或实参。希望对你有帮助。

【讨论】:

【参考方案11】:

把它想象成基本代数。 X 是您必须填写的参数,您在其中放置的数字是参数。所以如果你有一个像 X+2 这样的方程,X 是你的参数,你为 X 改变的任何数字都被称为参数。因此,如果使用该等式为 x 补充 1,则得到 1+2。这意味着 1 是一个参数,提供给 X 的参数。

同样,如果你有一个像 dosomething("This") 这样的函数,它的定义就是 dosomething(string parametername),但 "This" 将是提供给参数的实际参数,这里命名为 parametername。

以最简单的方式来看,参数是参数填充的东西,参数可以是该参数允许的任意数量的东西。

所以参数和参数之间是多对一的关系,因为你可以有一个参数可以有许多有效的参数,就像我们上面的 X+1 方程。 X 可以是任何已知的数字,它们都是有效的。

【讨论】:

【参考方案12】:

变量是一个存储位置和一个相关的符号名称(一个标识符),其中包含数据,一个值。

参数是传递给函数的变量。

参数是传递给函数的数据(值)。

$variable = 'data/value';

function first($variable) ... 

function second('data/value') ... 
function third(16) ... 

在函数中,我们首先传递一个参数。

在第二个和第三个函数中,我们传递参数。

【讨论】:

以上是关于参数或参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将无限参数和一个或两个参数传递给 JavaScript 函数? [复制]

如何定义带参数或不带参数调用的函数? [复制]

如何 OrderBy() 2 个或更多参数? [复制]

args 或 kwargs 是不是接受 python 参数的默认值? [复制]

Ruby - 按引用或按值的参数? [复制]

参数和参数有啥区别? [复制]