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'
はできません私はそれを忘れたと信じている。ここで言及しましたが、私はPythonのドキュメントから覚えています。戻り値のないすべての関数は、noneを返します。ありがとう@ジャミラク! (あなたの答えを受け入れることができるまで11分) –
私はまた、Pythonのドキュメントを読んでいる間str.join()関数を見逃しました。あなたが答える気にしないなら、一方の方法がもう一方の方法よりも嫌なものになるのでしょうか? –
''''のような文字列のインスタンスを作成し、クラスのメソッドを使用してクラスをインポートする方が簡単で一般的な方法です。あなたが見ることができるように、それは1つ少ない行を取る。それ以外は、わかりませんが、私はそれが単なるPythonのものだと思っています.D – jamylak