2016-05-22 10 views
-3

非常に多くの例は私のようなコードで使用文でに出くわしたのPythonを始めて、非自明とマニュアルではない、あまりにも役立ちます。私が見つけたインターネット上でいくつかの時間を過ごした後'with'ステートメントのコードは何をしますか?

def r_f(fn, n, vl): 
    cn, rd = 0, 0 
    with open(fn, 'r') as f: 
     for value in f.readlines(): 
      rd += 1 
      if rd > n: 
       break 
      if int(value) == vl: 
       cn += 1 

    return cn 

with文が複数の文を使うことを意図していたということを私にはっきりと説明するものがあったが、それが何を意味するのか、私はそれほど確信していなかった。再び時間を過ごしたところ、open(fn, 'r')コードは指定されたファイル名(with other operations of 'w', etc.)でファイルを読み取ることを意味していたが、次の行はf.readlines()として見つからないことがわかった。したがって、私は上記のコードが何をしているか分かりません。したがって、私の質問は次のように表明されます:

  1. コードは正確に何をしていますか?

    withステートメントとは何ですか?また、複数の ステートメントをどのように使用していますか?

    コードのasは何ですか?

    f.readline()はコード内に何を実装していますか?

    がなぜ比較される:

INT場合(値)== VL: CN + = 1

もなさ?

+2

"文のpythonを使って" googleにしようとしましたか? – PascalVKooten

+0

@ PascalvKooten、はい、私はそれが半分の答え(私が含まれていた)、私はプログラマーではないと私の最初の言語はPythonです、それは私が自己であるときに簡単ではない教えた。 – bzal

+1

私も独学です。それはあなたにGoogleのチャンピオンにする必要があります。私は、 "with statement python"の最初の結果(http://effbot.org/zone/python-with-statement.htm)の説明が非常に分かりやすいことを知っています。結果が分からない場合は、次の説明を探してください。 – PascalVKooten

答えて

2

私は説明しようとコメントしました。

#this is your standard method definition 
def r_f(fn, n, vl): 
     #these are local variables 
     cn, rd = 0, 0 
     #we are saying; 
     #in the scope of this with statement, the variable f 
     #is equal to the file object returned by open 
     with open(fn, 'r') as f: 
      #for every line in the file 
      #(because readlines returns a list of all the lines) 
      for value in f.readlines(): 
       #increment this variable by 1 
       rd += 1 
       #if rd is greater than n 
       if rd > n: 
        #break out of this loop 
        break 
       #if the integer representation of the line we read 
       #is equal to v1 
       if int(value) == vl: 
        #then increase this variable by 1 
        cn += 1 
     #we return this value to the function that called us 
     return cn 

コードは正確に何をしますか?

ファイル内にいくつかの数字が現れる回数を数えていますが、その正確な動作は実行時に指定された引数に依存するため非常に難しいです!

EDIT:フォローアップとして、私はコメントで掲示リンク@PascalvKooten、with文はあなたがで書かれたソースコードを読み始める前に、ドキュメンテーションを読む必要があり

+0

これは本当にそれを打つ!ありがとう。 – bzal

1

ですまさに、非常に明確な説明を読むことをお勧めしますその他。

のを確認してください。

あなたがコピーした機能は以下のことを行います: 3つの引数を取得します。 cnrd変数を0に設定します。with open(fn, 'r') as fは、読み取りモードでfnという名前のファイルを開いて、今からfと呼んでいます。次に、現在開かれているファイルの各行、fを読んで、各行に対して何かを行うループがforにあります。最初に、rdをインクリメントします。より大きい場合は、ループが中断します。そうでない場合は、値がからint()関数によって整数に変換されたもの)がcnをインクリメントして返します。

関連する問題