【问题标题】:What does an equality mean in function arguments in python? [duplicate]python中函数参数中的相等是什么意思? [复制]
【发布时间】:2013-10-31 20:30:50
【问题描述】:

这是来自here的代码示例:

在函数的参数赋值中相等是什么意思?像N=20000 在这里? 那和简单的 N 作为参数有什么区别? 导入随机数,数学

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,赋值不是为了相等,而是为函数分配参数。
  • @Naji:我不知道那个评论是什么意思。但是您的问题标题和描述都指的是“相等”,然后描述继续谈论“参数分配”。 = 在这里既不是相等也不是赋值;这是不同的东西。但它是什么没有好词。 (syntax 没有命名,它只是使用文字 "=",下面描述的语义也没有给出名称。)
  • @abarnert,我只是说上面使用的“赋值”是用来给函数赋值的。
  • @DavidRobinson 这不是那个 Q 的副本 - 这个问题涉及默认参数,而链接的问题询问位置参数与关键字参数。我似乎找不到适合这个问题的副本。

标签: python function syntax arguments definition


【解决方案1】:

它指定一个默认值。如果程序在未定义的值上失败,这将特别有用。例如,如果它只是 n,并且您没有为函数提供任何变量,它将失败。默认情况下不会。

【讨论】:

    【解决方案2】:

    在函数定义中,它指定参数的默认值。例如:

    >>> def func(N=20000):
    ...     print(N)
    >>> func(10)
    10
    >>> func(N=10)
    10
    >>> func()
    20000
    

    在第一次调用中,我们使用位置参数10N 参数指定一个值。在第二个调用中,我们使用关键字参数N=10N 参数指定一个值。在第三次调用中,我们根本没有指定一个值——所以它得到了默认值,20000

    请注意,使用关键字参数调用函数的语法看起来与使用具有默认值的参数定义函数的语法非常相似。这种平行并非偶然,但重要的是不要被它混淆。当您解压参数与变量参数参数等时,更容易混淆自己。除了最简单的情况外,即使您得到了它,这一切在直觉上都是有道理的,但实际上仍然很难得到细节直接在你的脑海里。 This blog post 试图将所有解释集中在一个地方。我不认为它做得很好,但它至少提供了指向文档中所有相关内容的有用链接……

    【讨论】:

    • 如果你对幕后发生的事情感兴趣,你可以检查函数对象(func.__code__.co_varnames('N',)func.__defaults__(20000,)inspect 模块告诉你一些关于这些的意思),或者ast.parse你的定义代码和ast.dump结果。
    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 2014-04-18
    • 1970-01-01
    • 2012-03-17
    • 2011-07-08
    • 2014-02-18
    • 2020-02-27
    • 1970-01-01
    相关资源
    最近更新 更多