ホームページ  >  記事  >  バックエンド開発  >  Python でのクロージャーの適用の詳細な説明:translate と maketrans の使用法

Python でのクロージャーの適用の詳細な説明:translate と maketrans の使用法

WBOY
WBOYオリジナル
2016-06-16 08:42:301201ブラウズ

Python は比較的文字列の処理効率が高く、メソッドも豊富です。その中でも、maketrans と translation がよく使われているので、この記事ではこれら 2 つの方法の使い方をまとめます。

まず、これら 2 つの方法を確認してみましょう:

① s.translate(table,str) は、文字列 s から str に含まれる文字を削除し、テーブル内の文字マッピング関係に従って残りの文字列を置き換えます。この表は、「a」→「A」、「b」→「B」を比較する変換表として理解できます。

② tabel = string.maketrans('s1', 's2') s1 と s2 の長さが同じである必要があります。この変換は s に s1 があれば、それを s2 に置き換えます。 table は文字と文字は対応していますので、すべてを含める必要はありません。

いくつか例を挙げてみましょう:

import string
s = 'helloworld, 0001111'
table = string.maketrans('','')#没有映射,保留原字符串
s.translate(table) #hello world, 0001111
s.translate(table, 'hello000)'#world, 1111
table = string.maketrans('abcdefgh','ABCDEFGH')
s.translate(table)#HEllo,worlD,0001111
s.translate(table,'world')#HEllo,0001111

次に示すように、makerns をラップし、クロージャを返すファクトリ関数を形成するように変換できます (print はファクトリ関数です)。

import string
def translator(frm = '', to='', delete= '', keep = None):
  if len(to) == 1:
    to = to * len(frm)
  trans = string.maketrans(frm, to)
  if keep is not None:
    allchars = string.maketrans('','')
    delete = allchars.translate(allchars, keep.translate(allchars, delete))
    def translate(s):
      return s.translate(trans, delete)
    return translate

クロージャは関数の最後で使用されます。クロージャは、別の関数のスコープ内の変数にアクセスする権限を持つ関数を指します。クロージャを作成する一般的な方法は、別の関数の中に関数を作成することです:

def make_adder(addend):
   def adder(augend): return augend + addend
   return adder

p = make_addr(23) を実行すると、内部関数 addr のクロージャが生成されます。このクロージャは内部的に名前 addend を参照し、addend は値 23 にバインドされます。p(100) を実行すると、最終的に 123 が返されます。

これで、提案されたインターフェースの背後にある可能性が封じ込められました。

>>>digits_only = translator(keep = string.digits)
>>>digits_only('Chris Perkins :224 -7992')
'2247992'

特定の文字セットに属する要素を削除することも非常に簡単です:

>>>no_digits = translator(delete = string.digits)
>>>no_digits('Chris Perkins:224-7992')
'Chris Perkings : - '

は次のように置き換えることもできます:

>>>digits_to_hash = translator(from = string.digits, to = '#')
>>>digits_to_hash('Chris Perkins :224-7992')
'Chris Perkins: ###-####'

削除と保持が重複する場合、削除パラメータが優先されます

>>>trans = translator(delete = 'abcd', kepp ='cdef')
>>>trans('abcdefg')
'ef'

実際、削除と保持を同時に行う状況を処理するために、いくつかの例外をより詳細に追加できます。

この記事が皆さんの Python プログラミングに役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。