#はじめに
未来電子テクノロジーでインターンをしているsaijoです!
プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください!!
今回は自分がPythonを勉強してきた上でインプットした知識を執筆していきます!
#仮想環境の構築
Pythonを扱うに当たって必要不可欠なのがこの「仮想環境」です。仮想環境を整えることのメリットとしては、多種多様なソフトウェアを最適な環境下で開発していけることが挙げられます。
では今回はVirtualenvを使用して実際に仮想環境を作成してみましょう。
# Pythonのversion関係なく仮想環境を構築
$ virtualenv <作成する環境名>
# Pythonのversionを指定して仮想環境を構築
$ virtualenv -p python3.7 <作成する環境名>
# 使用したい仮想環境を指定する
$ source <環境名>/bin/active
# もしくは、、、
$ .<環境名>/bin/activate
# 仮想環境から抜け出す
$ deactivate
流れとしては「仮想環境を作成」→「仮想環境を指定」→「仮想環境から抜け出す」の3つのみです!
仮想環境を整えるのは思ってたより簡単ですね。
#クラス・クラスの継承
続いてはPythonではおなじみのクラスについてまとめていきます!
まずはサンプルコードを以下に示します。
# MenuItemクラスの作成
class MenuItem:
def __init__(self, name, price):
self.name = name
self.price = price
def info(self):
print('商品名: '+self.name)
print('価格: '+self.price+'円')
# MenuItemクラスから継承したFoodクラスの作成
class Food(MenuItem):
def __init__(self, name, price, calorie):
super().__init__(name, price)
self.calorie = calorie
def info(self):
print('商品名: '+self.name)
print('価格: '+self.price+'円')
print('カロリー: '+self.calorie+'kcal')
まずはMenuItemクラスの方から見ていきましょう!
中身を観察していくと、initメソッドが目に付きます。initメソッドとは、インスタンスが生成された直後に自動的に呼び出される関数のことです。これによりインスタンス生成と同じタイミングで、インスタンス変数を代入することができます!
またクラスのメソッドを定義する際は、第一引数をselfにしないといけないです。
次にMenuItemクラスから継承したFoodクラスの方を見ていきましょう!
まずはclass定義の書き方なのですが、上のコードのようにサブクラスを定義する際は継承先のクラスをFood(MenuItem)のように指定してあげる必要があります。
またサブクラスにもinitメソッドはあるのですが、その中身に注目してください。super()関数がありますね。super()関数では、親となるクラスから継承したいインスタンス変数の取捨選択ができます!これって超便利ですよね!!
またMenuItemクラスとFoodクラスの両方にinfoメソッドが定義されているのですが、Foodクラスのインスタンスがinfoメソッドを呼び出した際は、予測通りFoodクラスで定義したinfoメソッドが呼び出されます。
つまり親クラスと同名のメソッドを定義すると、そのメソッドは上書きされるってことです。
#実践編
最後に今まで勉強してきた中で、「これは実践でもよく使えるぞ!」と思ったテクニック?を記していきます。
##for文のカウンタ変数は省略できる
# カウンタ変数アリ
t = int(input())
string = []
for i in range(t):
string.append(input())
print(string)
# カウンタ変数ナシ
t = int(input())
string = []
for _ in range(t):
string.append(input())
print(string)
少し冗長になってしまいましたが、これは任意の要素数を持つ文字列リストを作成するプログラムです。
このプログラムのようにカウンタ変数をfor文処理で用いない際は、_のように省略することができます!for文のネストをする時など、カウンタ変数を何にしようか迷う時があると思いますが、この知識を知っておくとそこで悩む回数が激減しますね!!
##イテラブルオブジェクトをまとめて処理する高階関数map
arr = list(map(int, input().split()))
map関数はリストなどのイテラブルオブジェクトに対し、int関数などをまとめて作用させることができます。
ここでどこにもリストなんて書かれていないじゃないか!と言う人に対して一応説明を入れておくと、splitメソッドがセパレータで区切ってリスト化する機能を持っているので、input().split()は空白区切りのリストを表しています。
また注意点が一つあり、map関数の返り値はmap型となっているので、最後にlist()を作用させてリスト化させていきましょう!
##二次元リストの内包表記
vector = [[i,j,k] for i in range(3) for j in range(3) for k in range(3) if not i+j+k==3]
これは三次元デカルト座標に0から3までの格子点のうち、各座標を足して3にならない格子点の座標を求めるプログラムです。
このように内包表記でforを複数記述しても問題はないです!
応用するといろんなことができそうですよね。笑
#まとめ
以上が僕がここ1ヶ月近く勉強してきたコンテンツとなります。
最後までご覧いただきありがとうございました!!