1

Python の組み込み関数は、キーワードのデフォルトとして使用できませんか、それとも関数を参照する別の方法を使用する必要がありますか?

次のような関数を書きたかったのです。

def isPNGBlock(bytes, blockLen, pngOffset=0, pngErrorLogger=print):
    ...
    try:
        r.validate_signature()
        width, height, pixels, metadata = r.read(lenient=True)
    except png.Error as e:
        pngErrorLogger(e)

代わりに、フラグ値として None のデフォルト引数を使用してこれを行うことに落ち着かなければなりませんでした。

def isPNGBlock(bytes, blockLen, pngOffset=0, pngErrorLogger=None):
    ...
    try:
        r.validate_signature()
        width, height, pixels, metadata = r.read(lenient=True)
    except png.Error as e:
        if pngErrorLogger is None:
            print(e)
        else:
            pngErrorLogger(e)

またはラッパー関数を使用します。

def defaultLogger(str):
    print(str)

def isPNGBlock(bytes, blockLen, pngOffset=0, pngErrorLogger=defaultLogger ):
    ...
    try:
        r.validate_signature()
        width, height, pixels, metadata = r.read(lenient=True)
    except png.Error as e:
        pngErrorLogger(e)
4

3 に答える 3

3

Python の組み込み関数は、キーワードのデフォルトとして使用できませんか

他の機能と同じように使用できます。

ただし、Python 2 ではprint関数ではなくステートメントです。これは Python 3 で関数になったので、コードはそこで動作します。を使用すると、Python 2 の最近のバージョンでも動作しますfrom __future__ import print_function。たとえば、Python 2.7.3 を使用すると、次のようになります。

In [2]: from __future__ import print_function

In [3]: def isPNGBlock(bytes, blockLen, pngOffset=0, pngErrorLogger=print):
   ...:     pngErrorLogger('test')
   ...:     

In [4]: isPNGBlock(0, 0)
test

関数として使用できない場合はprint、ラッパーを作成するか、次を使用できsys.stdout.writeます。

In [7]: isPNGBlock(0, 0, 0, sys.stdout.write)
test
于 2012-12-12T07:38:34.763 に答える
2

Python 2 では、printは関数ではなく、ステートメントです。ステートメントは引数として使用できません。

Python 3 では、printは関数であり、実行している方法で使用できます。

を実行すると、Python 2 で Python 3 の動作を取得できますfrom __future__ import print_function

于 2012-12-12T07:38:47.000 に答える
1

Python 2 を使用しています。ここで、printは関数ではなくキーワードです。もちろん、キーワードを引数として渡したり、シャドウしたり、変更したりすることはできません。これは python 3 で変更され、print はこれらすべてが可能な関数になりました。

于 2012-12-12T07:39:10.300 に答える