1

次の内容のファイルがあります。

a  
b  
c  
d

私は次のコードを使用してPythonでこれを読んでいます:

f = open('foo.txt')
w = f.readline()

while w is not '' :
  print w
  w = f.readline()

ドキュメントによると

f.readline()が空の文字列を返す場合、ファイルの終わりに達しています

では、なぜ無限ループに入るのですか?

4

4 に答える 4

5

オペレーターは、2つのis参照がまったく同じオブジェクトを参照しているかどうかをテストします。この場合、あなたが指摘したように、同等性チェックが必要です。

無限ループが発生したのは、が返されたものの''、の別のインスタンスであったためですstr。インスタンスは異なりますが、値は同じです。

Pythonは、既存のstrオブジェクトを再利用するための最適化として選択する場合と選択しない場合があります(結局のところ、それらは不変です)。ただし、ドキュメントで特に明記されていない限り、このタイプの動作に一般的に依存するべきではありません(Noneたとえば、の唯一のインスタンスであるためNoneType)。

于 2013-02-28T04:11:31.410 に答える
1

これは面白い。

交換する場合

wが''である間

w!=''

コードは正常に実行されます。

これは、readline()が、実行時に取得するグローバルインスタンスを返すのではなく、空の文字列の新しいインスタンスを返すことを意味します。

s = ''
t = ''
assert s is t
于 2013-02-28T04:14:48.050 に答える
1

これを試して

f = open('foo.txt')

while 1:
    line = f.readline()
    if not line:
        break
    print line
于 2013-02-28T04:16:19.923 に答える
1
with open('workfile', 'r') as f:
  read_data = f.read()
f.closed

It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way. It is also much shorter than writing equivalent try-finally blocks.

Refer to this link: http://docs.python.org/2/tutorial/inputoutput.html

于 2013-02-28T09:07:27.843 に答える