2012-04-06 7 views
1

string.joinはどのように解決されますか?Pythonはどのような順序で機能を解決しますか? (なぜstring.join(lst.append( 'a'))が失敗するのですか?)

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 

あなたがしようとした場合、あなたが見ることができるようにAPPENDは、起こりません再びlist_of_string参加:

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

ここで(9月のための組み込みstr.join(のコードを見つけることができませんでした))string.pyからのコードがあります:

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' 

答えて

5
list_of_str.append('d') 

は新しいlist_of_strを返しません。

メソッドappendには戻り値がないため、Noneを返します。この方法が優れている...それは非常にPython的ではなく、import stringする必要はありませんが

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

が、それはあなたがこれを行うことができます動作させるために

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

はできません私はそれを忘れたと信じている。ここで言及しましたが、私はPythonのドキュメントから覚えています。戻り値のないすべての関数は、noneを返します。ありがとう@ジャミラク! (あなたの答えを受け入れることができるまで11分) –

+0

私はまた、Pythonのドキュメントを読んでいる間str.join()関数を見逃しました。あなたが答える気にしないなら、一方の方法がもう一方の方法よりも嫌なものになるのでしょうか? –

+1

''''のような文字列のインスタンスを作成し、クラスのメソッドを使用してクラスをインポートする方が簡単で一般的な方法です。あなたが見ることができるように、それは1つ少ない行を取る。それ以外は、わかりませんが、私はそれが単なるPythonのものだと思っています.D – jamylak

関連する問題