シリーズ3回目は、関数とファイルについてです。関数は、プログラミングで非常に重要な役割であり、あなたは、入力パラメータを受け入れることができる関数を形成するためにステートメントの数を組み合わせることができ、出力に関連する内部計算は、関数にカプセル化されたステートメントは、コードがより簡潔で、より強く表示されるように、コードの冗長性の結果、いくつかの文の繰り返しの使用を避けるためです。
ファイル操作では、主にファイルの読み書きのいくつかの方法と、それぞれの方法の違いや注意点について説明し、最後に複雑なデータを保存するためのpickleモジュールの使い方を紹介します。
関数
この機能は主に2つの側面から構成されています:
- 組み込み関数
- カスタム関数
組み込み関数は、pythonの関数の数が付属しています、あなただけの関数に関連するパラメータを渡す必要が呼び出すことができる、印刷、組み込み関数の最も基本的な、最も典型的なものです。カスタム関数は、新しい関数を形成するステートメントの数のカプセル化のニーズに応じて独自の必要性です。
カスタム関数
1.関数の作成
ここでは、長方形の体積を計算する関数をカスタマイズすることで、いくつかのプロパティ・ワードを紹介します:
In [1]: def vol(length,width,height):
...: volume = length*width*height
...: return volume
上記の3行のコードで知る必要があります:
def:関数を定義するキーワード
length,width,height:関数の形式パラメータ
return:関数の戻り値
2.コール機能
カスタム関数をビルドしたら、関数名を使ってその関数を呼び出すことができます:
In [2]: vol(2,2,3)
Out[2]: 12
パラメータを渡す際には、実パラメータと形式パラメータが、位置や数など、正確に対応していなければならないことに注意する必要があります。
In [4]: vol(2,2)
TypeError: vol() missing 1 required positional argument: 'height'
パラメータを渡す順番を変えたい場合は、どの正式パラメータに値を渡すかを指定する必要があります:
In [8]: vol(width=3,length=4,height=5)
Out[8]: 60
3.機能のデフォルト
関数の正式パラメータは、デフォルト値を指定することもできます。例えば、上記のvol関数ではheightパラメータのデフォルト値を2に設定しています:
In [6]: def vol(length,width,height=2):
...: volume = length*width*height
...: return volume
...:
In [7]: vol(2,2)
Out[7]: 8
vol関数に2つの実パラメータだけを渡した場合、エラーは発生せず、戻り値は8であることがわかります。 つまり、形式パラメータにデフォルト値があり、関数を呼び出す際に形式パラメータに値を渡さなかった場合、パラメータはデフォルト値をとります。
4.コレクション機能
関数の形式パラメータを変更可能に設定することもできます:
In [9]: def test(*params):
...: print('引数の長さは%d'%len(params))
...: print('3番目のパラメータは%s'%params[2])
...:
In [10]: test(1,2,'mao',3.14,'pp')
引数の長さは5
3番目のパラメータはmaoである
ここでは、形式パラメータを * で識別する必要があり、パラメータを呼び出すときに複数の実パラメータを渡すことができます。
5.グローバルとローカル
関数内で定義された定数はローカル変数と呼ばれ、その関数内でのみ呼び出し可能で、関数外では使用できません:
In [12]: def test(a,b):
...: c = 2
...: return a*b*c
In [13]: test(2,2)
Out[13]: 8
In [14]: print(c)
NameError: name 'c' is not defined
6.匿名関数ラムダ
関数内のステートメントがそれほど複雑でなく、コード量も少なければ、体積を計算する上記の関数のように、無名関数を利用することができます:
In [20]: vol = lambda a,b,c:a*b*c
In [21]: vol(2,2,3)
Out[21]: 12
ラムダ式はしばしば文の中にネストされ、関連する関数と組み合わせて使うのが簡単です。
7.インライン関数
また、関数を定義する際に、いくつかの関数の入れ子をサポートしますが、関数を使用する際には論理的な関係に注意する必要があります:
In [24]: def fun1(a):
...: b = 2
...: def fun2():
...: return a*b
...: return fun2()
...:
In [25]: fun1(4)
Out[25]: 8
よく使われる組み込み関数
組み込み関数については、最初の2つの記事で、よく使われるlen、sorted、reversed、sumなどに加えて、さらにいくつかの基本的な組み込み関数を紹介してきました。
1. 最大値と最小値
数列の最大値と最小値を求めます:
In [28]: min(1,2,3)
Out[28]: 1
In [29]: max(1,2,3)
Out[29]: 3
2.abs
数の絶対値を求めます:
In [31]: abs(-1)
Out[31]: 1
3.ラウンド
小数点以下を四捨五入してください:
In [32]: round(3.555,2)
Out[32]: 3.56
4.pow
数のべき乗を計算し、余りを取ります:
In [33]: pow(2,3)#2*2*2
Out[33]: 8
In [34]: pow(2,3,3)#(2*2*2)%3
Out[34]: 2
5.ディブモッド
数の商と余りを計算します:
In [36]: divmod(10,3)
Out[36]: (3, 1)
6.ヘルプ
関数のヘルプ・ドキュメントを照会するために使用します:
In [37]: help(abs)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
7.フィルター
filter()関数は2つの引数を取り、第1引数は関数またはNone、第2引数はシーケンスです。filter()の役割は、各要素を判定し、TrueかFalseを返すことです。判定結果に応じてfilter()は自動的にTrueの要素を残し、Falseの要素のシーケンスをフィルタリングします:
In [3```python8]: list(filter(lambda x:x%2,range(10)))
Out[38]: [1, 3, 5, 7, 9]
8.地図
map()関数は、関数とシーケンスの2つの引数を取ります。その結果、シーケンスの各要素に関数が適用されます:
In [42]: list(map(lambda x: x*2,range(10)))
Out[42]: [0, 2, 4, 6, 8, , 16, 18]
ファイル
open(ファイル名、モード):ファイルの読み取りと書き込み操作では、open()関数が発生することが確実である、ファイルがすでに存在する場合は、ファイルを開きますが、そうでない場合は、2つのパラメータの必要性の通常の使用:ファイルを作成します。
最初のパラメータはファイル名で、2番目のパラメータはファイルの使用方法を指定します。 以下のオプション・モードが一般的に使用されます:
- r': 読み取り専用モードでファイルを開きます。
- w': ファイルを書き込みモードで開き、既存のファイルを上書きします。
- 'a': ファイルを書き込みモードで開き、ファイルが存在すれば最後に書き込みを追加します。
- 'b':バイナリ・モードでファイルを開き、rb、wbなどのモードの組み合わせになります。
1. read() メソッドで
size はオプションのパラメータで、これを渡さないか 負の数値を渡すと、ファイルの内容全体が読み込まれます:
In [52]: fb = open('E:/Python基本/テスト.txt','r')
In [53]: fb.read(10)
Out[53]: 'nai
niatan'
In [54]: fb.read()
Out[54]: 'g
naitangmao'
In [55]: fb.read()
Out[55]: ''
留意点は3つ:
- 1、読み込んだファイルの改行位置が元のファイルの改行位置'˶'になり、また、長さの単位を占めます。
- 2、一度読んだ内容を繰り返し読むことはできません。
- 3、空の文字列に戻るの内容を読んだ場合、それはファイルの最後に達しています
2. readline() メソッド
readline()メソッドは、ファイルから1行を読み込み、その行の最後に改行文字'˶n'を返すメソッドで、1行にデータがない場合は'˶n'を返すだけです。
In [59]: fb1 = open('E:/Python基本/テスト.txt','r')
In [60]: fb1.readline()
Out[60]: 'nai
'
3. readlines() メソッド
readlines()メソッドもすべてのファイルを読み込むために使用され、read()は、前者とは異なり、行ごとに読み込むことであり、最終的なリターンはリストであり、データの各行をリスト要素として返します:
In [72]: fb3 = open('E:/Python基本/テスト.txt','r')
In [73]: fb3.readlines()
Out[73]: ['nai
', 'niatang
', 'naitangmao']
4.ファイルオブジェクトを繰り返し読み込みます。
この方法で内容を読み上げると、少し標準的に見えます:
In [81]: for i in fb4:
...: print(i,end = '')
...:
nai
niatang
naitangmao
5.ファイルの書き込み
書き込み操作を行う際に注意すべき点が2つあります:
- 文字列でないデータを書き込む場合は、文字列に変換する必要があります。
- 上書きなのか追記なのかに注意しながら書きましょう
In [85]: fb5 = open('E:/Python財団/テスト1.txt','w')
In [89]: list1 = [1,2]
In [91]: fb5.write(str(list1))
Out[91]: 6
write で書き込むと、書き込んだ文字列の長さが返されます。
6.ファイル閉鎖
覚えておいてください!open() メソッドでファイルを開いた場合は、操作の完了後に必ず close() メソッドでファイルを閉じてください。
In [92]: fb5.close()
7.メソッド付き
もしあなたが記憶力が悪く、いつもclose()メソッドでファイルを閉じるのを忘れてしまうようであれば、WITH処理ファイル・オブジェクトの使用に慣れてください。
In [93]: with open('E:/Python基本/テスト.txt','r') as fb:
...: data = fb.read()
In [95]: fb.closed
Out[95]: True
8.ピクルス
辞書やpickleモジュールの形式でデータのリストを保存する方法がない場合は、上記のようにファイルに書き込まれた非文字列は許可されません、ストレージと読み込みのこのシリアライズを達成することができます:
In [96]: import pickle
In [97]: list1 = ['nai','tang','mao',1,2,3]
In [98]: pic_f = open('E:/Python基本/リスト.pkl','wb')
In [99]: pickle.dump(list1,pic_f)
In : pic_f.close()
dump()メソッドは、2つのパラメータを受信し、最初のコンテンツが格納され、2番目のファイルオブジェクトが格納されている、操作もclose()を使用してファイルオブジェクトを閉じる必要がある後、ファイルのストレージは、ファイルの内容をロードするload()メソッドを使用してロードすることができます。
In : pic_f = open('E:/Python基本/リスト.pkl','rb')
In : list2 = pickle.load(pic_f)
In : list2
Out: ['nai', 'tang', 'mao', 1, 2, 3]
In : pic_f.close()
ストレージまたはバイナリファイルオブジェクトの形式で動作するように注意して読み取るのpickleの使用は、つまり'wb'と'rb'は、pickleは非常にデータ型を格納するために適しているより複雑で、データの量と大量のデータです。




