1

string.joinはどのように解決されますか?私はそれを以下のように使ってみました:

import string 
list_of_str = ['a','b','c'] 
string.join(list_of_str.append('d'))

しかし、代わりにこのエラーが発生しました(2.7.2とまったく同じエラー):

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/string.py", line 318, in join
    return sep.join(words)
TypeError

list_of_stringに再度参加しようとするとわかるように、追加は行われます。

print string.join(list_of_string)
-->'a b c d'

string.pyのコードは次のとおりです(sepの組み込みstr.join()のコードが見つかりませんでした):

def join(words, sep = ' '):
    """join(list [,sep]) -> string

    Return a string composed of the words in list, with
    intervening occurrences of sep.  The default separator is a
    single space.

    (joinfields and join are synonymous)

    """
    return sep.join(words)

何が起きてる?これはバグですか?予想される動作の場合、どのように解決しますか/なぜ発生しますか?Pythonがその関数/メソッドを実行する順序について何か面白いことを学ぼうとしている、またはPythonの歴史的な癖にぶつかったような気がします。


補足:もちろん、事前に追加を行うだけで機能します。

list_of_string.append('d')
print string.join(list_of_string)
-->'a b c d'
4

1 に答える 1

5
list_of_str.append('d')

新しいを返しませんlist_of_str

このメソッドappendには戻り値がないため、を返しますNone

それを機能させるには、次のようにします。

>>> import string
>>> list_of_str = ['a','b','c']
>>> string.join(list_of_str + ['d'])

それはあまりPythonicではなく、する必要はありませんがimport string...この方法の方が優れています:

>>> list_of_str = ['a','b','c']
>>> ''.join(list_of_str + ['d'])
于 2012-04-06T05:37:16.707 に答える