本記事について
とある事業会社で事業企画をやっています。
元々は、新規営業1年→エンプラ営業3年やっていました。
事業企画への異動に伴って、ルーチンワークの自動化やスクレイピングに興味を持ちpython学習をスタートしました。
目的達成までは記事を執筆予定です。どうぞよろしくお願いいたします。
開発環境
jupyterlab
使っている本
すっきりわかるpython入門
https://sukkiri.jp/books/sukkiri_python
勉強計画
週5日間ミニマム1h勉強する。
最初の1weekは1冊終わらせることをgoalに。
start@ 2022/2/21
学習時間
1.0h
学び
今日は繰り返しを学びたいと思います〜
pythonで部品を組み上げる
関数
今までの繰り返しなどを用いれば色々とプログラムを作れますが、見通しの悪いプログラム/修正難易度がかなり高いコードになっていきます。
そこで重要なのは、関数を自作することです。
関数の定義と関数の呼び出し
定義
def 関数名():
処理
※pythonで定義されている関数(例えば、print)と重複することは許されているため、間違えて定義されている関数を定義するのは避けよう。
呼び出し
関数名()
def hello(): #関数を作成
print('hello my name is kamon')
hello() #自作したhello関数を呼び出し
#hello my name is kamon
ローカル変数と独立性
関数の中で定義された変数は、その関数の中でしか使えない。
ローカル変数の独立性という。
##引数と戻り値
引数
関数は独立した一つの世界だが、ローカル変数を関数の外から参照したい時もある。
その際に使うのが引数。
def hello(name): #呼び出した時に渡されるデータを受け取る変数
print('hello my name is{}'.format(name))
hello('kamon') #呼び出しと同時にkamonを渡す
hello('asakura')
#hello my name is kamon
#hello my name is asakura
複数の引数を渡す
関数の定義
def 関数名(引数1,引数2,・・・):
処理
引数を利用する関数の呼び出し
関数名(引数1,引数2,・・・)
コレクションを引き渡すこともできる。
def profile(name,age,hobby): #関数を定義、複数の引数を受け取る関数。
print('my name is{}'.format(name))
print('my age is{}'.format(age))
print('my hobby is{}'.format(hobby))
profile('kamon','27','coffee') #profileを入力
#my name iskamon
#my age is27
#my hobby iscoffee
引数と戻り値を利用する関数の定義
def 関数名(引数1,引数2,・・・):
処理
return 戻り値
引数は複数の利用が可能だが、戻り値は1つのみ
def plus(x,y):
answer = x+y
return answer
)
answer = plus(100,50)
print('足算の答えは{}'.format(answer))
#足算の答えは150
関数の連携
めっちゃ使うよ!
def input_scores(name):
print('{}さんのスコアを入力してください'.format(name))
network = int(input('networkの点数は? >>'))
database = int(input('databaseの点数は? >>'))
security = int(input('securityの点数は? >>'))
scores = [network,database,security]
return scores
def calc_average(scores):
avg = sum(scores) / len(scores)
return avg
def output_result(name,avg):
print('{}さんの平均点は{}です。'.format(name,avg))
kamon_scores = input_scores('kamon')
asakura_scores = input_scores('asakura')
kamon_avg = calc_average(kamon_scores)
asakura_avg = calc_average(asakura_scores)
output_result('kamon',kamon_avg)
output_result('asakura',asakura_avg)
#kamonさんのスコアを入力してください
#networkの点数は? >> 60
#databaseの点数は? >> 70
#securityの点数は? >> 70
#asakuraさんのスコアを入力してください
#networkの点数は? >> 40
#databaseの点数は? >> 50
#securityの点数は? >> 60
#kamonさんの平均点は66.66666666666667です。
#asakuraさんの平均点は50.0です。
関数の応用テクニック
###暗黙のタプルによる複数の戻り値
タプルは、()を省略できる暗黙のルールがある。
そのため、()内を1つの戻り値として返しているが複数のように見える。
def plus_and_minus(a,b):
return (a+b, a-b)
(next,prev) = plus_and_minus(1978,1)
デフォルト引数
def 関数名(仮引数名 = デフォルト値,・・・):
処理
return 戻り値
def eat(breakfast,lunch,dinner='curry'): #第一引数はだめ、最後から設定していくルール。
print('breakfast is {}'.format(breakfast))
print('lunch is {}'.format(lunch))
print('dinner is {}'.format(dinner))
eat('panda','egg') #最後の引数はcurryと定義されているため省略可能
#breakfast is panda
#lunch is egg
#dinner is curry
eat('panda','egg','curry and rice') #なお、引数設定すれば下記の通りくる
#breakfast is panda
#lunch is egg
#dinner is curry and rice
引数にキーワードを指定した関数呼び出し
関数名(仮引数名 1=実引数1,仮引数名2 =実引数 2,・・・)
可変長変数
def 関数名 (仮引数名1,仮引数名2,・・・,*仮引数名 n):
※呼び出し時にn個以上の実引数を指定できる
※第n引数意向に指定した実引数は、1つのタプルとして受け取る
※第n実引数の指定が省略された場合は、関数は空のタプルを受け取る
※可変長引数は、末尾の仮引数にしか指定することができない。
def eat (breakfast,lunch,dinner = 'curry',*desserts):
print('朝は{}を食べました'.format(breakfast))
print('昼は{}を食べました'.format(lunch))
print('夜は{}を食べました'.format(dinner))
for d in desserts:
print('おやつに{}を食べました'.format(d))
)
eat('トースト','パスタ','カレー','アイス','チョコ','カレー')
#朝はトーストを食べました
#昼はパスタを食べました
#夜はカレーを食べました
#おやつにアイスを食べました
#おやつにチョコを食べました
#おやつにカレーを食べました
ということでした。
グローバル変数
name = 'kamon'
def hello():
print('hello' + name ) #関数内にnameは定義されていないが、外に参照しに行っている。
hello()
#hellokamon
name = 'kamon'
def change_name():
global name #この変数は、グローバルの変数であることを宣言している。
name = 'asakura'
def hello():
print('hello ' + name)
グローバル変数を濫用することは、可読性や混乱を招く観点でリスクが非常に高い。
今日ミスったところ
本日は特にありませんでした。
練習問題の難易度が上がって行っています。
定期的に振り返りたいと思います。
感想
金曜日ですね。
土日は休みなので、練習問題の振り返りと6・7章の学習を進めたいと思います。運が良ければ8章までやって一周本を終わらせるかもしれません。
ところで初級編を終えた後に、実践編としておすすめの本はあるのでしょうか?
どなたかお勧めがあればご教示いただけると嬉しいです。
それでは今週もお疲れ様でした。