2012-04-12 14 views
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を初めて使い、プログラミングに関する知識はほとんどありません。:デフォルト引数を持つ「はTypeError CreateText()は正確に8つの引数を(5が与えられた)かかり、」

+0

「デフォルトの引数」が最初に存在するという考えをどこから得ましたか? Pythonのリファレンスを想像するのは難しいです。私はPythonの設定方法を記述することなく何らかの言及をしています。 –

+0

サイズ、スタイルなどの引数をCreateText(win、text、x、y、size、style、...)関数に入力しないと、Pythonは自動的にサイズとスタイルを12 pt(?)に設定し、normalフォントスタイル。 –

+0

それは私が尋ねたことに全く答えません。最初に「デフォルトの議論」という言葉を聞きましたか?これがPythonができることだと思ったところはどこですか?その場所はどのようにしてそれを行う方法を教えていないことができますか? –

答えて

1

あなたは引数に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 
0

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

また、Pythonでは、s NoneなどのIngletonのオブジェクト:あなたが設定することができます

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

if size is None: 

等... Pythonで

2

我々は関数のシグネチャで直接、引数/キーワードのデフォルト値、すなわちを置きますデフォルト値はNone、つまりsize=Noneですが、これは便利な場合もありますが、この場合は必要ありません。デフォルト値のない引数は必須です。呼び出し時に存在しない場合は、エラーが発生します(見たとおりです)。

更新:

@agfが指摘したように、あなたの関数が変更されたり、それらを返す場合、あなたは署名で変更可能なデフォルト値を設定しないでください。この場合、argument=Noneを使用することをお勧めします。

+1

[デフォルトは不変です](http://stackoverflow.com/questions/1132941/leastastastish-in-python-the-mutable-default-argument)これは問題ありませんが、 'if引数はNoneです'バージョンは驚きを避けるためによく使われます。 – agf

0

I'm trying to get the CreateText function to create a text object with my "default" values if the parameters are not used.

エラーは、問題の内容を正確に示しています。関数の内容を変更することによって、関数を呼び出す正しい方法(現在は:8つの引数)を変更することはできません。インタフェースを関数に変更する必要があります(つまり、def行)。関数への引数は、デフォルト値を与えた場合にのみデフォルト値を持ちます。

+0

私はそれがまさに彼がやるべきことを尋ねていることであると確信しています。彼はそれを非常にはっきりと尋ねていません。 – agf

関連する問題