【问题标题】:"TypeError: CreateText() takes exactly 8 arguments (5 given)" with default arguments“TypeError:CreateText() 正好采用 8 个参数(给定 5 个)”,带有默认参数
【发布时间】:2012-04-12 05:00:25
【问题描述】:
def CreateText(win, text, x, y, size, font, color, style):
    txtObject = Text(Point(x,y), text)
    if size==None:
        txtObject.setSize(12)
    else:
        txtObject.setSize(size)

    if font==None:
        txtObject.setFace("courier")
    else:
        txtObject.setFace(font)

    if color==None:
        txtObject.setTextColor("black")
    else:
        txtObject.setTextColor(color)

    if style==None:
        txtObject.setStyle("normal")
    else:
        txtObject.setStyle(style)

    return txtObject

def FlashingIntro(win, numTimes):
    txtIntro = CreateText(win, "CELSIUS CONVERTER!", 5,5,28)
    for i in range(numTimes):
        txtIntro.draw(win)
        sleep(.5)
        txtIntro.undraw()
        sleep(.5)

如果不使用参数,我正在尝试获取 CreateText 函数以使用我的“默认”值创建一个文本对象。我希望后备文本是 12pt 黑色信使。我试过用空白字符串"" 而不是None 并且没有运气。我对 Python 还很陌生,几乎没有编程知识。

【问题讨论】:

  • 您是从哪里得知“默认参数”甚至首先存在的?我很难想象 Python 的参考文献会以某种方式提及它们而不描述如何设置它们。
  • 如果我不在 CreateText(win, text, x, y, size, style, ...) 函数中输入大小、样式等参数,Python 会自动将大小和样式设置为12 pt(?) 和普通字体样式。
  • 这根本不能回答我的问题。你第一次听到“默认参数”这个词是在哪里?你从哪里知道这是 Python 可以做的事情?那个地方怎么能不告诉你怎么做?

标签: python typeerror default-arguments


【解决方案1】:

在python中,我们将参数/关键字的默认值直接放在函数签名中,即:

def CreateText(win, text, x, y, size=12, font="courier", color="black", style="normal"):
    #do stuff

您可以将默认值设置为无,即size=None,在某些情况下这很有用,但在这种情况下您不需要这样做。没有默认值的参数是必需的,如果它们在调用时不存在,则会引发错误(如您所见)。

更新:

正如@agf 所指出的,如果您的函数修改或返回它们,则不应在签名中设置可变默认值。在这种情况下,最好使用argument=None

【讨论】:

【解决方案2】:

您需要为参数指定default values

def CreateText(win, text, x, y, size=None, font=None, color=None, style=None):

或者,把你真正的默认值放进去,这样你就不需要if statments:

def CreateText(win, text, x, y, 
                         size=12, font="courier", color="black", style="normal"):

    txtObject = Text(Point(x,y), text)
    txtObject.setSize(size)
    txtObject.setFace(font)
    txtObject.setTextColor(color)
    txtObject.setStyle(style)

    return txtObject

【讨论】:

    【解决方案3】:

    在函数定义中设置默认值:

    def CreateText(win, text, x, y, size=None, font=None, color=None, style=None):
    

    另外,在 Python 中,最好使用以下命令测试像 None 这样的单例对象:

    if size is None:
    

    等等……

    【讨论】:

      【解决方案4】:

      如果不使用参数,我正在尝试让 CreateText 函数使用我的“默认”值创建一个文本对象。

      该错误会告诉您确切的问题所在。您无法通过更改函数的内容来更改调用函数的正确方法(当前:使用 8 个参数)。您必须将接口更改为函数(即def 行)。一个函数的参数只有在你给它们默认值的情况下才有默认值。

      【讨论】:

      • 我很确定这正是他要问的,只是他没有问得很清楚。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      相关资源
      最近更新 更多