Python

Pythonを勉強してみたVol.3

Python

はじめに

今回は関数の呼び出しや変数と引数の引き渡し、動的参照・強い型付けについて勉強しました。

関数の呼び出し

関数を呼び出す際は下記のように書きます。

#例1
def HelloWorld(x): #最後は必ず:コロンを付けます
    print(x)

x = 'HelloWorld'
HelloWorld(x)

x = 'こんにちは'
HelloWorld(x)

#例2
def HelloWorld():
    print('HelloWorld')

x = 'HelloWorld'
HelloWorld()

x = 'こんにちは'
HelloWorld()
#実行結果
#例1
HelloWorld
こんにちは

#例2
HelloWorld
HelloWorld

まず関数をdefで定義します。次に関数名こちらは任意の名前で問題ありませんが他の人が見ても分かるようにした方がいいです。今回は最初のなので「HelloWorld」としました。そして()の中には引数を与えます。(引数に関しては中の処理で使いたい場合に設定するものです。※例1参考)。また例2では引数を使用していないので、関数を呼び出しても毎回同じものが返ってきます。

上記は簡単な例なのでピンときにくいかもしれませんが、関数を使うと同じ処理を何回も書かなくてよくなるというメリットがあります。また今回はすべて同じファイルに記載していますが、別のファイルに書いてある関数も呼び出して使うことが出来ます。なのでなるべく見たら何の処理が書いてある関数なのか分かる名前を付けてあげてください!

変数と引数の引き渡し

オブジェクトを代入すると、等式の右辺にあるオブジェクトへの参照が作成されます。ここで参照と言っているのは、コピーではない為です。下記を見て頂くと分かり易いと思いますが、aに配列を代入した後、bにaを代入しましたが、この操作はコピーではなく参照となります。そのためaに4を追加しても同じようにbにも4が追加されます。

#例
a = [1, 2, 3]

b = a

print('1:',a)
print('2:',b)

a.append(4) #listの中に4を追加

print('3:',a)
print('4:',b)
#実行結果
1: [1, 2, 3]
2: [1, 2, 3]
3: [1, 2, 3, 4]
4: [1, 2, 3, 4]

これは今回の勉強で一番驚いた箇所になります。てっきりコピーされているものと思ってました。。ほかの言語であればコピーしている言語もあるのですが、Pythonでは参照となっております。ちなみに関数の引数にオブジェクトを渡すと同じく参照されます。下記で試してみました!

#例
def append_data(list, x):
    list.append(x)

data = [1, 2, 3]
append_data(data, 4)
print(data)
#実行結果
[1, 2, 3, 4]

関数内でappendした結果、dataの中身もappendされてますね!このことからもデータをコピーではなく参照していると分かりますね!これは知っとかないと予期しないエラーにつながるかもなので覚えといて損はないと思います。

動的参照・強い型付け

PythonではC言語やJAVAのようにオブジェクトに型を指定する必要がないため、かなり自由に代入を行うことが出来ます。下記はtypeを使って型を調べてます。

#例
a = 5
type(a)

b = 'hoge'
type(b)
#実行結果
int
str

上記からPythonは型を自由に使える万能な言語のように思いますが、下記の場合ですとエラーが出ますので注意下さい。

#例
a = '5' + 5
print(a)
#実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_12232\2871274866.py in <module>
----> 1 a = '5' + 5
      2 print(a)

TypeError: can only concatenate str (not "int") to str

このようにPythonはすべてのオブジェクトが何らかの型を持つ強い型付けの言語と言えます。なのでコードを書く際はオブジェクトがどの型のインスタンスをとるのか把握しましょう!ちなみにisinstance関数を使うと、そのオブジェクトがどの型のインスタンスなのか調べることが出来ます。

#例1
a = 5
isinstance(a, int)

a = 5
isinstance(a,(int, float, str))

#isinstance(調べるオブジェクト, 調べたいインスタンスの型)で使用します。第2引数では配列にする事で複数調べることが出来ます。
#実行結果
#例1
True

#例2
True

おわりに

ここまで読んで頂き、ありがとうございます!私自身分かったつもりになっていたものも多いのでこれからも勉強して正しい知識を付けていきたいと思います。

また私が普段勉強に使っている本は「Pythonによるデータ分析入門」という本です。下記に本のURLを貼っときます。

コメント

タイトルとURLをコピーしました