python

【python】withとasの使い方【→プログラミング初心者向け】

how to use "as" and "with" in python
プログラム女子
プログラム女子

pythonのプログラムで、「as」と「with」ってネットでみたことあるんだけど、どうやって使うんですか?

if文やforループの時によく使われているね。asとwithは変数の使用範囲を明確にするために使うんだ。例えば、forループの処理の間だけ使いたい変数などは、asとwithを使うことが多いんだ。これらを例を挙げて説明するね。

Tommy
Tommy

pythonのwithとasの使い方の概要

summary of using with and as

この記事では、withとasの使い方をサンプルプログラムを使って説明します。

withとasを使うことで、限らてた範囲での変数の使用や、クローズ処理などの「後処理」が必要な変数を扱った場合に、ヘンスの使用範囲を明確にし、「後処理」自体を省略することができます。

例えば、ファイルを一旦オープンしてしまうと、使い終わった後には、必ずクローズ処理しなければならないですが、このwithを使うと、withで「ファイルを引いている間」という具体に、withのスコープで考えることができます。

もし、withのスコープを抜けると自動でクローズしてくれ、クローズ処理を省略することができます。

pythonのwithとasの使い方の前提の環境

environment of using with and as

pythonのwithとasの使い方の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

【python】バージョン確認の方法【→プログラミング初心者向け】

また、レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

レンタルサーバでプログラミングする方法【→レンタルサーバでできる!】

pythonのwithとasの使い方のサンプルプログラム

sample program of using with and as

ここでは、テキストファイルを1行ずつ読み出すサンプルプログラムで、withとasの使い方を説明します。

サンプルのテキストファイルを準備する

まず、サンプルプログラムで使う為のテキストファイルを準備します。

下のように、このテキストファイルの中身は、test1からtest10までの文字列が10行に渡って書かれているテキストファイルとしました。

このテキストファイルの名前は test.txt とします。

test1
test2
test3
test4
test5
test6
test7
test8
test9
test10

withとasを使わない場合のプログラム

次に、先ほど作成したテキストファイル test.txt を1行ずつ読み込んで、表示させるプログラムを書きます。

今回は、open関数によってファイルオブジェクトを生成し、ファイルオブジェクトの readlines() 関数を呼び出すことによって、1行毎の文字列を1要素として、ファイル行数要素分の長さのリストが返却されます。

そのリストの要素分だけfor文を回し、1行の文字列を繰り返し表示しています。

if __name__ == '__main__':

	file = open('./test.txt','r')

	lines = file.readlines()
	for line in lines:
		print(line)

	file.close()

withとasを使わない場合のプログラムの実行結果

先程のプログラムの実行結果は、次のようになりました。

テキストファイル test.txt の「test1」から「test10」までの10行を正しく表示できていることが分かります。

$ python test.py
test1

test2

test3

test4

test5

test6

test7

test8

test9

test10

withとasを使う場合のプログラム

次に、with構文を用いて、テキストファイル test.txt の中身を表示するプログラムを考えます。

下のプログラムのように、前のプログラムでは個別にオープンした行がなくなり、with構文の中で、ファイルをオープンしています。

次のwith構文では、 test.txt openしたファイルオブジェクトを渡し、そのファイルオブジェクトの名前をfileとする という意味になります。

さらに前のプログラムでは、ファイルをクローズする処理が必要でしたが、今回のwith構文を使った場合には省略することができました。

if __name__ == '__main__':

	with open('./test.txt','r') as file:

		lines = file.readlines()
		for line in lines:
			print(line)

withとasを使う場合のプログラムの実行結果

処理結果は次のようになりました。先ほどと同様にテキストファイル test.txt の「test1」から「test10」までの10行を正しく表示できていることが分かります。

1行毎に表示行が1行飛びになっているのが気になりますね。

test.txt から取得した1行の文字列の末尾に改行コードがあり、print文で更に改行されるので、このような1行飛びの表示担っていると考えられます。

これを改良したプログラムを次に説明します。

$ python test.py
test1

test2

test3

test4

test5

test6

test7

test8

test9

test10

withとasを使う場合のプログラム(改良版)

ここでは、先ほどの結果の1行飛びになっている表示を修正するプログラムを考えます。

for文の中で__test.txt__ から取得した1行の文字列の末尾にある改行コードを strip() 関数によって削除してみました。

if __name__ == '__main__':

	with open('./test.txt','r') as file:

		lines = file.readlines()
		for line in lines:
			print(line.strip())

withとasを使う場合のプログラムの実行結果(改良版)

次の結果のように、1行飛びになっていた表示が連続した行の表示に修正されています。

$ python test.py
test1
test2
test3
test4
test5
test6
test7
test8
test9
test10

pythonのその他「初心者向け」技術

other technique for python beginner

その他のpythonプログラムの「基礎知識」を下記の記事にまとめています。

どれもpythonの文法というべき、基本的なものばかりで、これから「pythonでプログラムを学びたい」という人は、「知っておいて方がよいもの」ばかりです。

私は、「プログラム」は「動いて」こそ価値ががあると考えています。 もともと、「プログラムを学ぶ」というのは、「自分が意図した動作をプログラムにさせるようになる」ということだと思います。 つまり、プログラムを自分の意図通りに動かして、初めて「学べた」と言えるということです。

しかし、実際に手で書いて動かしてみないと「学べない」ことがあります。 頭で理解したと思っても、いざプログラムを書こうとおもっても思い通りにいかない場合があるからです。 それには、プログラムを書く環境の問題だったり、pythonのバージョンが違ったり、ライブラリのバージョンが違ったり、いろいろな事情があります。

「頭で理解する」ことと「実際に動かす」ということは違うのです。 だから、プログラムを学ぶ時には実際にプログラムを書いて「動かしてみる」ことを強くおすすめします。

それぞれの記事には、実行可能なサンプルプログラムを掲載しています。 記事を読んで、実際に自分で書いてみてプログラムの動作をご自身で確認することができます。 是非、下記の記事を読んで、「知識」としてだけではなく、「手」でpythonを覚えていってください。

【python】初心者向けおすすめ記事まとめ【pythonの文法をマスターする!】

-python
-, ,

Copyright© Tommy's blog , 2020 All Rights Reserved Powered by AFFINGER5.