0
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 还很陌生,几乎没有编程知识。

4

4 回答 4

2

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

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

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

更新:

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

于 2012-04-12T05:07:47.327 回答
1

您需要为参数指定默认值

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

或者,将您的真实默认值放入其中,这样您就不需要if声明:

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
于 2012-04-12T05:06:10.323 回答
0

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

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

此外,在 Python 中,最好测试单例对象None,例如:

if size is None:

ETC...

于 2012-04-12T05:06:12.083 回答
0

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

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

于 2012-04-12T05:25:59.840 回答