Python中函数参数中的等号是什么意思?

3
这是来自这里的代码示例:
在函数的参数赋值中,等号的含义是什么?比如这里的N=20000? 那与简单的N作为参数有什么不同? import random,math
def gibbs(N=20000,thin=500):
   x=0
   y=0
   samples = []
   for i in range(N):
       for j in range(thin):
           x=random.gammavariate(3,1.0/(y*y+4))
           y=random.gauss(1.0/(x+1),1.0/math.sqrt(x+1))
       samples.append((x,y))
   return samples

smp = gibbs()

顺便提一下,把这个称为“赋值”可能会让事情变得有点混淆,甚至更加困惑。不幸的是,没有比=更少让人困惑的更好的名称了。因此,这只是一个警告,要小心不要读太多关于符号名称的信息,这对实际上并没有什么帮助... - abarnert
@abarnert,这个作业不是关于相等性的,而是将参数赋值给一个函数。 - Cupitor
@Naji:我不知道那个评论的意思。但是你的问题标题和描述都涉及“相等性”,然后描述继续讨论“参数赋值”。这里的=既不是相等性也不是赋值;它是另一种东西。但是没有一个好的词来描述它。( 语法 没有为它命名,只是使用文字"=",下面描述的语义也没有给出名称。) - abarnert
@abarnert,我的意思是上面使用的“赋值”是用于将参数分配给函数。 - Cupitor
@DavidRobinson 这不是那个问题的重复 - 这个问题涉及默认参数,而链接的问题询问位置参数与关键字参数的区别。我似乎找不到适合这个问题的重复。 - Steinar Lima
2个回答

5
在函数定义中,它指定参数的默认值。例如:
>>> def func(N=20000):
...     print(N)
>>> func(10)
10
>>> func(N=10)
10
>>> func()
20000

在第一次调用中,我们使用位置参数10指定了N参数的值。在第二个调用中,我们使用关键字参数N=10指定了N参数的值。在第三个调用中,我们根本没有指定值—所以它获得了默认值20000
请注意,使用关键字参数调用函数的语法与使用带有默认值参数的语法非常相似。这种并行不是偶然的,但重要的是不要被它搞混。当你开始拆包参数和变量参数等时,甚至更容易把自己搞糊涂。在除了最简单的情况下,即使你理解了它,它在头脑中的细节仍然很难掌握。 这篇博客文章试图在一个地方解释所有的内容。我认为它做得不好,但它至少提供了相关文档的有用链接...

如果您对底层发生的事情感兴趣,可以检查函数对象(func.__code__.co_varnames('N',),而 func.__defaults__(20000,)inspect 模块会告诉您一些关于它们的含义),或者使用 ast.parse 解析您定义的代码并使用 ast.dump 查看结果。 - abarnert

1

它指定了一个默认值。如果程序对未定义的值会失败,那么这将特别有用。例如,如果只是 n,并且您没有提供任何变量给函数,它就会失败。使用默认值则不会。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接