pythonの関数をみてみよう
pythonとかで、まとまった処理を繰り返し実行したいときに、関数というものが使われることが多いです。
例えば、
print('pythonで') print('関数を書きたい') print('どう書けばいい?') print('pythonで') ←前3行と同じ print('関数を書きたい') print('どう書けばいい?') print('pythonで') ←最初3行と同じ print('関数を書きたい') print('どう書けばいい?')
と書きたい場合、コード全体は、最初の3行の繰り返しになっています。なので、この最初の3行を実行してくれる関数を3回実行させればいいことになります。
上の3行を関数を用いて実行する場合、次のように書くことができます。
#関数の定義 def Pri(): print('pythonで') print('関数を書きたい') print('どう書けばいい?') #関数ここまで #関数を実行 Pri()
まず関数は ‘def 関数の名前():’ と関数の名前を決めて、それから関数の中に実行したい命令をかきます。関数の中に書く場合、字下げ(Tabを入れる)をしておきます。ここでは関数の名前をPriとしてあります。
関数は定義しただけでは動きません。動け、と言わなければならない。それが、
Pri()
になります。これで、関数の中が実行されます。
次に、戻り値がある関数の例を見てみましょう。
#関数の定義 def tasu(): a=5 b=7 return a+b #関数ここまで c=tasu() print(str(c))
【コードを見てみよう】
関数の中を見てみると、a=5,b=7を代入しています。次に見慣れない return a+b ですが、これはどういうことかといいますと、この関数を実行したときに、a+bの値、この場合5+7=12ですが、この値を返しなさい、という意味になります。
どこに返すかといいますと、関数を実行した、
c=tasu()
の c に12という値が入ります。
次に、関数の中に書いた5と7を、関数の実行時に渡すようにコードを書き換えてみましょう。
#関数の定義 def tasu(a,b): return a+b #関数ここまで c=tasu(5,7) print(str(c))
【コードを見てみよう】
まず関数の定義が変わっています。
def tasu(a,b):
と、a,bがカッコの中に入っています。このa,bは、関数の実行時に与えられます。それが、
c=tasu(5,7)
の部分です。これは、tasu(5,7)→(def) tasu(aに5を入れる、bに7を入れる)
と解釈します。ここで、def tasu(a,b)の中身は、return a+b ですので、5+7=12 をこの関数が返してきて、cに入れます。
プログラムを実行すると、12が表示されると思います。
コサイン波の重ね合わせ波形から、特定の周波数があるかどうかを調べてみよう
では以前やりました、コサイン波の重ね合わせた波形から、固有の周波数の波があるかないか、を判断する関数を作ってみましょう。
注意)プログラムに慣れていない方を対象に書いていますので、エレガントではないです。
import math #関数の定義 def hantei(a,na): tt=0 n=0 ka=0 while tt<2: sitaa=2*pi*tt n=n+math.cos(a*sitaa)*na[ka] ka=ka+1 tt=tt+0.002 n=n/kaisu if n>0.01: return 'ari' else: return 'nashi' #定義ここまで pi=math.pi t=0 kaisu=0 nami=[] while t<2: sita=2*pi*t nami.append( math.cos(sita)+math.cos(3*sita)+math.cos(5*sita) ) kaisu=kaisu+1 t=t+0.002 print( hantei(3,nami) )
【コードを見てみよう】
まず関数より下を見てみましょう。while文の中で、周波数1,3,5Hzのコサイン波を作成し、namiに取り込んでいます。
次にprint()の中を見てみましょう。hantei(3,nami)とあります。ここで関数に渡す値(引数といいます)はnamiのように、配列を渡すこともできます。
次に関数の中を見てみましょう。この関数(hantei(3,nami))は1番目の引数(ここでは3ですね)の波があるかどうか、を判定するプログラムです。
関数の定義の中を見ると、sitaaとかttとか妙な変数があります。初心者の方にわかりやすく、sitaとsitaa、tとttを分けて書いてあります。(本当は、わけなくていいです。)
関数の中では、周波数3Hzの波形と、コサインの合成波形を掛けて足し合わせています。以前確認した方法です。以前の方法を思い出すと、波形があれば、関数中のnは0.5ぐらいの値、なければ0に近い値になりました。
次にifの部分です。
if(条件1) 内容1 else: 内容2
とあると、条件1が成立したら、内容1を実行しなさい。条件1が成立しなければ、内容2を実行しなさい、という意味になります。このif文はよく使います。
関数内では、nの値が0.01より大きければ、この周波数のコサイン波がある、ということで、’ari’を返す、nが0.01以下であれば、’nashi’を返す、となっています。
この帰ってきた文字を、print( hantei(3,nami) ) と書くことで、結果として見ることができます。これで実行すると、ari が返ってくることが確認できると思います。
pythonプログラム ワンポイントチェック
関数からなにがしら結果を返す場合は、return を使うのですが、例えばaaaを返すとして、aaaが数値であれば、
return aaa
ですが、文字として返すならば、
return ‘aaa’
とします。
コメント