2

私のコードには現在、whileループの条件の一部として次のものが含まれています。

reduce(operator.or_, map(lambda y: reduce(operator.or_, map(lambda x: x[0] == y, data[testedoffset:])), footers))

目的は、pythonarray.arrayインスタンスの特定のスライスにいくつかの特定のバイト値の1つが含まれているかどうかを確認することです。

私が得ているエラーは次のとおりです。

NameError: global name 'y' is not defined

ですから、それはスコーピングの問題だと確信しています。でも、ここからやりたいことをやる方法が思いつかない。

4

2 に答える 2

3

あなたは自分で答えを見つけたようですが、ここにいる間... そのコードは本当にいくつかの作業を必要とする可能性があります.

シーケンスdata[testedoffset:]全体に基づいてその式をマッピングしている理由が完全にはわかりません。footers副作用がない限り、何の効果もないようです__getitem__

しかし、全体map + reduce + operator.or_が私にウィリーを与えます。

このようなことをもっと試してください:

y = 'whatever'
if any(x[0] == y for x in data[offset:]):
    print "yep, it's in there"
于 2011-02-23T03:08:58.053 に答える
0

それは確かにスコープの問題ではなく、明らかに非pythonicな式です。ここにそれを理解しようとする私の試みがあります.yをラムダ式に渡す必要があることがわかりました.

reduce(operator.or_,
       map(lambda y: reduce(operator.or_, map(lambda x: x[0] == y, data[testedoffset:]))
                ,#Where is y
           , footers))
于 2011-02-23T02:32:46.510 に答える