2016-05-26 17 views
0

私は、ゼブラのラベルプリンタにテキストデータを送るpythonスクリプトを開発しています。 "zebra_line"という1つのバインド関数があり、x、y、text、およびfont変数を入力する必要があります。バインドされた関数のデフォルト引数

zebra_line = "^FO{x},{y}^A0,N,{font}^FH^FD{text}^FS".format 

    template = "^XA\n" 
    template += "^CI28\n" 
    template += zebra_line(x=30,y=350, text="Test", font=35) 
    template += zebra_line(x=30,y=700, text="Test", font=35) 

send_to_printer(template) 

これはうまくいきますが、私の問題はフォント引数にあります。私はそれがほとんど同じであるので、すべての行でそれを渡したいとは思わない。

だから、Pythonのバインドされた関数でデフォルトの引数を使うことは可能ですか?

+0

あなたが「バウンド機能」とはどういう意味ですか?バインドされたメソッドは他の関数と同様にデフォルトの引数を持つことができますが、デフォルトの引数の値は関数の*定義*の一部であり、呼び出しの一部ではありません。 – BrenBarn

答えて

3

はい、既存の機能ではありません。あなたは、ラッパー関数を記述することもできますし、functools.partial()を使用してfontのデフォルト引数を指定できます。

from functools import partial 

zebra_line = partial("^FO{x},{y}^A0,N,{font}^FH^FD{text}^FS".format, font=35) 

fontキーワード引数が供給されていない場合は今、35のデフォルト値が使用されます。

>>> print(zebra_line(x=30,y=350, text="Test")) 
^FO30,350^A0,N,35^FH^FDTest^FS 
>>> print(zebra_line(x=30,y=350, text="Test", font=1234)) 
^FO30,350^A0,N,1234^FH^FDTest^FS 
0

独自のラッパー機能を定義するだけです。

これが働かない理由

def my_zebra_line(x, y, text): 
    zebra_line(x=x,y=y, text=text, font=35) 

template += my_zebra_line(30,700, "Test") 

けれども、私はよく分からない(そこに名前付きパラメータと関数のパラメータと競合することが、あなたのアイデアを得るでしょうかどうかわかりません)(フォントをパラメータとして削除)

zebra_line = "^FO{x},{y}^A0,N,35^FH^FD{text}^FS".format 
1

可能です。ここではあなたのためにこれを行うだろうコードは次のとおりです。

from functools import partial 

zebra_line = partial(zebra_line, font=35) 

さて、あなたはこのようなzebra_lineを呼び出すことができます。

zebra_line(x=30,y=700, text="Test") 
関連する問題