2016-08-31 8 views
0

私は最初に遭遇したコロンで、文字列を2つの部分に分割する機能を持っています(括弧で囲まれた部分をスキップします)。Python:タプル代入で値をスキップすることはできますか?

def substitute_expression(expression): 
    # Split function and arguments 
    colon_ptr, func, args = split_on_colon(expression) 
    ... 

しかし、時には、それは気にしない:私はこのようにそれを呼び出す

def split_on_colon(str): 
    colon_ptr = find_separator(str, 0, ':') 
    if colon_ptr == -1: 
     return (colon_ptr, str, None) 
    return (colon_ptr, str[:colon_ptr], str[colon_ptr+1:]) 

:コロンの後にコロンと一部の前にコロンが発生したインデックス、部分:この関数は、3つの要素のタプルを返します。約colon_ptr部分。

Pythonでは、メモリと変数の名前空間を浪費しないように、タプルの一部を割り当てなくすることができる単純な構造はありますか?このような

何か:

Ignore, func, args = split 
+2

これは通常、 '' '_、func、args = split'''(これはよく見られます)で行われます。しかし、私は内部については分かりません。 – sascha

+1

@sascha '_'は' builtins'モジュールに保存され、確実にメモリを消費します。 – Kasramvd

+0

@ Kasramvdこの発言をありがとう! – sascha

答えて

1

あなたは、不要な値を格納するために使用され_を、使用することができます。あなたの文は次のようになります。

_, func, args = split 
+3

'_'には特別なことはないことに注意してください。 *変数を無視する*に変換するのは、単に環境設定/スタイルです。 – SuperSaiyan

+0

'_'は、' gettext'のエイリアスとしてよく使われるので、これは最善の考え方ではありません。この使用法は公式ドキュメントにも書かれています:["この関数は通常、ローカル名前空間で_()としてエイリアスされています]"](https://docs.python.org/3/library/gettext.html#gettext.gettext) 。 'unused'や' dummy'のような別の名前を使用してください。 – spectras

+0

@spectras私はその逆を主張したいと思います。なぜなら、 '_'はしばしばスローアウェイ値を示すために、' _'へのエイリアシング 'gettext'はベストアイデアではありません。 – SethMMorton

2

余分なメモリを消費することを拒否するための最良の方法は、あなたの関数内でこれを処理することです。関数の引数としてフラグを使用し、このフラグに基づいて2つまたは3つのアイテムを返すことができます。

def split_on_colon(my_str, flag): 
    colon_ptr = find_separator(my_str, 0, ':') 
    if flag: 
     if colon_ptr == -1: 
      return (my_str, None) 
     return (my_str[:colon_ptr], my_str[colon_ptr+1:]) 
    else: 
     if colon_ptr == -1: 
      return (colon_ptr, my_str, None) 
     return (colon_ptr, my_str[:colon_ptr], my_str[colon_ptr+1:]) 
関連する問題