“TypeError:CreateText()正好接受8个参数(给定5个)”和默认参数

2024-06-25 06:00:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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函数在不使用参数的情况下用我的“默认”值创建一个文本对象。我希望备用文本是12磅的黑色信使。我尝试过用空字符串""代替None,但没有运气。我对Python相当陌生,而且几乎没有编程知识。在


Tags: textnonesizeifstyledefwinelse
3条回答

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

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

另外,在Python中,最好使用以下方法测试None等单例对象:

^{pr2}$

等等。。。在

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

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

您可以将默认值设置为None,即size=None,在某些情况下这是有用的,但在本例中,您不需要这样做。不带默认值的参数是必需的,如果它们在调用时不存在,则会引发错误(正如您刚才看到的)。在

更新:

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

您需要为参数指定default values

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

或者,输入实际的默认值,这样就不需要if语句:

^{pr2}$

相关问题 更多 >