Python PR

プログラミング言語を学んだことがある方向けのPythonチュートリアル

記事内に商品プロモーションを含む場合があります

この記事は、他の言語を習得済みの方に向けたPythonチュートリアルです。

簡潔に解説しているのでプログラミング初心者の方にはわかりづらい内容となっているかもしれませんが、都度に関連記事を貼っておくので参照してください。

この記事では「Python 3」に焦点を当てて解説します。

Pythonの特徴

Pythonは、以下のような特徴を持つ言語です。

  • 代入した値によって動的かつ暗黙的に型付けされる(動的型付け)
  • 変数の宣言は必要ない
  • 大文字と小文字が区別される
  • オブジェクト指向言語なので全てがオブジェクト

出力

標準出力にオブジェクトを出力するにはprint()関数を使います。

print('Hello World')

実行結果

Hello World

print関数でオブジェクトを出力する方法

ヘルプを参照する

Pythonのヘルプはいつでも参照できます。関数やクラスの使い方に困った場合はヘルプを見てみましょう!

help(オブジェクト) オブジェクトの使い方を取得できる
dir(オブジェクト) オブジェクトの属性を全て表示できる
オブジェクト.__doc__ ドキュメンテーション文字列を参照できます

ヘルプ

int型のヘルプを確認してみます。

help(1)

実行結果

Help on int object:

class int(object)
 |  int([x]) -> integer
 |  int(x, base=10) -> integer
 |  
 |  Convert a number or string to an integer, or return 0 if no arguments
 |  are given.  If x is a number, return x.__int__().  For floating point
 |  numbers, this truncates towards zero.
 |  
:

属性一覧

int型の属性を確認してみます。

print(dir(1))

実行結果

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

ドキュメンテーション文字列

abs()関数のドキュメント文字列を確認してみます。

print(abs.__doc__)

実行結果

Return the absolute value of the argument.

使い方に困った場合はヘルプを参照してください。ヘルプは基本的に英語で書かれているのでわからない場合は Google先生に翻訳してもらいましょう!

変数

Pythonでは、変数(名前)にオブジェクトを束縛(バインド)して使用します。

# varに1、VARに2の整数をバインド
var = 1
VAR = 2  # 大文字の変数は定数としてみなす慣習がある

print(var)
print(VAR)

実行結果

1
2

変数とは?使い方と命名規則

type()関数で型を確認することができる。

print(type(var))
print(type(VAR))

実行結果

<class 'int'>
<class 'int'>

構文

Pythonの構文の特徴は以下の通りです。

  • 行末に「;」などの必須な終了文字がない
  • ブロックはインデント・逆インデントで表現する
  • ブロックを期待するステートメント(if や for など)は「:」で終わる

コメント

コメントは「#」を使って行コメント、「''' or """」で囲んで複数行コメントを表現します。

# 行コメント

'''複数行
コメント
です'''

"""ダブルクォート
でも表現できます"""

コメント・コメントアウトの使い方

演算子

バインド(代入)には=が使用され、2つの値が等しいか比べるには==が使用されます。+=-=の代入演算子を使うことで右辺の値だけ「インクリメント/デクリメント」できます。これは文字列を含む多くのデータ型で使えます。

# インクリメント
num = 1 
num += 2 
print(num)
3

# デクリメント
num -= 1 
print(num)
2

# 文字列の結合
s = "Hello" 
s += "world" 
print(s)
Helloworld

また、1行で複数の変数を使用することもできます。

num = 1
val = 2

num, val = val, num
print(num)
2

print(val)
1

数値型の演算と演算子一覧

配列

Pythonで利用できる配列は、「リスト、タプル、辞書、セット」です。リストは配列であり、辞書は連想配列であり、タプルは不変の配列であり、セットは集合です。Python の「配列」は異なる型を混在させることができます。

# リスト
mylist = [1, ["別の", "リスト"], (10, "タプル")]

# 辞書
mydict = {"Key 1": "Value 1", 2: 3, "pi": 3.14}

# タプル
mytuple = (1, 2, 3)

# セット
myset = {1, 2, 3, 1}  # 同等の要素は削除される
print(myset)
{1, 2, 3}

全ての「配列」タイプの最初の項目のインデックスは「0」です。負の数は最後から最初に向かってカウントされ「-1」が末尾の項目です。

mylist = [1, 2, 3.14]
# 最初の要素
print(mylist[0])
1

# 最後の要素を3に変更
mylist[-1] = 3
[1, 2, 3]  

mydict = {'名前': '太郎', '年齢': 24}
# 名前の取得
print(mydict['名前'])
太郎

# 年齢の変更
mydict['年齢'] = 30
{'名前': '太郎', '年齢': 30}

変数に関数の参照を渡すことができます。

# len関数をバインド
func = len

# len関数は配列の要素数を取得
print(func([1, 2, 3]))
3

「:(コロン)」を使って範囲で要素にアクセスできます。これをスライスと言います。

mylist = ["要素1", 2, 3.14]
print(mylist[:])
['要素1', 2, 3.14] 
 
print(mylist[0:2])
['要素1', 2]   

print(mylist[-3:-1])
['要素1', 2]  

print(mylist[1:])
[2, 3.14]  

# 3つ目のパラメーターを追加するとステップが指定できます
# stepはインデックスの増分を変更できます
print(mylist[::2])
['要素1', 3.14] 

文字列

文字列はシングルクォートまたはダブルクォートのいずれかで使用でき、一方のクォートを使った文字列内にもう一方のクォートを含めることができます(つまり、'これは"文字列"です'は有効)。複数行の文字列は、トリプルクォート('''または""")で囲んで表現します。

'文字列リテラル'

'文字列リテラル中にもう一方のクォート(")を含めることができる'

'''複数行
文字列
リテラル'''

Pythonの文字列は常にUnicodeですが、バイトである別の文字列型もあります。これはバイト文字列と呼ばれ、文字列前にbを付けて表現します(例えばb'Hello')。

bytestring = b'Hello' 

print(bytestring, type(bytestring))
b'Hello' <class 'bytes'>

文字列に値を挿入するには、%記法fomatメソッドを使います。Python 3.6以降のバージョンの場合はフォーマット済み文字列リテラルを使うとより簡単です。

name = '太郎'

# %記法
print("Name: %s, Number: %s, String: %s" % (name, 3, 3 * "-"))
Name: 太郎,Number: 3,String: ---

# %(key名)s を使って辞書の値を挿入できます
print('私の名前は%(name)sです。年は%(age)sです' % {'age': 25, 'name': '太郎'})
私の名前は太郎です。年は25です

# 文字列型(str型)のformatメソッドを使う
"Hello, {}!".format(name)
Hello, 太郎

# フォーマット済み文字列リテラル
print(f"Hello, {name}!")
Hello, 太郎

文字列の使い方【str型】

制御構文

制御構文にはifforwhileが用意されています。switchはないのでifで代用します。繰り返し可能な連番を生成するにはrange()関数を使います。

range()

# rangeオブジェクトの生成・出力
print(range(10))
range(0, 10)

# rangeオブジェクトからリストを生成
rangelist = list(range(10))
print(rangelist)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

range関数を使って数列を生成する方法を解説

if文

num = 1

if num in (1, 2, 3, 4):
    print('numは(1, 2, 3, 4)のいずれかです')
elif num == 5:
    print('numは5です')
else:
    print('numは(1, 2, 3, 4, 5)以外の値です')
numは(1, 2, 3, 4)のいずれかです

if文を使った条件分岐の方法を解説

for文

# range(3)で生成したオブジェクトの要素を
# numberに1つずつ渡して繰り返し処理します
for val in range(3):
    if val == 1:
        # 真であれば処理される
        # break が実行され、ループが終了
        break
    else:
        # 偽であれば処理される
        # continue が処理されると以降の処理はスキップされ次のループを開始します
        continue
else:
    # elseはfor文のオプション
    # ループが中断されなかった場合のみ実行される
    pass  # passは何も処理しません

for文を使ってループ処理をする方法

while文

# 無限ループ
while True:
    print("無限ループです")

while文を使ったループ処理

関数

関数はdefキーワードで宣言されます。オプション引数は、必須の引数の後にデフォルト値を指定して定義します。関数はタプルを返すことができます(アンパックを使用することで効率よく複数の値を返すことができます)。

def func(num, string='hoge'):
    return num, string

print(func(1))

実行結果

(1, 'hoge')

ラムダは、単一のステートメントで構成される関数です。

'''
def func(x):
    return x + 1
と同等なラムダ式
'''
func = lambda x: x + 1
print(func(1))

実行結果

2

引数は参照渡しですが、不変の型(tuple、int、文字列など)は、呼び出し先の値を呼び出し元で変更することはできません。

不変の型は参照先の値を変更することができないので別のオブジェクトを代入すると古いオブジェクトは破棄され、参照自体が変更されます。

そのため、引数で渡された不変の型のオブジェクトを変更しても参照先の値を変更しているわけではないので元のオブジェクトの値は書き換えられません。

n = 1
l = [1, 2, 3]
print(func(n, l))
(100, [1, 2, 3, '追加要素'])

# 不変(イミュータブル)の型は書き換えられない
print(n)
1

# 可変(ミュータブル)の型は書き換えることができる
print(l)
[1, 2, 3, '追加要素'] 

クラス

Pythonのクラスは継承や多重継承をサポートします。プライベートな属性は先頭にアンダースコアを付けることで宣言できます(慣例なので言語による強制力はありません)。任意の名前をクラスインスタンスにバインドすることができます。コンストラクタなどの特殊メソッドは__メソッド名__()で使用できます。

# objectクラスを継承したMyClassクラス
class MyClass(object):
    # クラス変数
    common = 10
    # コンストラクタ
    def __init__(self):
        # インスタンス変数
        self.myvariable = 3
    # メソッド
    def myfunction(self, arg1, arg2):
        return self.myvariable


# MyClassのインスタンス化
classinstance = MyClass()
classinstance.myfunction(1, 2)
3
# クラス変数は全てのインスタンスで共有される
classinstance2 = MyClass()
classinstance.common
10
classinstance2.common
10
# クラス変数は「クラス名.変数名」から更新します
MyClass.common = 30
classinstance.common
30
classinstance2.common
30
# 以下の方法ではクラス変数を更新しません
# 動的にcommonというインスタンス変数を生成します
classinstance.common = 10
classinstance.common
10
classinstance2.common
30
MyClass.common = 50
# クラス変数として更新されなくなります
classinstance.common
10
classinstance2.common
50

# このクラスはMyClassを継承しています
# 多重継承は以下のように宣言します:
# class OtherClass(MyClass1, MyClass2, MyClassN)
class OtherClass(MyClass):
    # 「self」引数は自動的に渡され、クラスインスタンスを参照できます
    def __init__(self, arg1):
        self.myvariable = 3
        print(arg1)

classinstance = OtherClass("hello")
hello
classinstance.myfunction(1, 2)
3
# 動的にインスタンス変数を追加することもできます
classinstance.test = 10
classinstance.test
10

クラスの定義方法と使い方を解説

例外処理

Pythonの例外処理はtry-except[例外名]ブロックで処理します。

def some_function():
    try:
        # 0で割るとエラーが発生します
        10 / 0
    except ZeroDivisionError:
        print("無効です")
    else:
        # 例外が発生しなかった場合
        pass
    finally:
        # ここは例外処理の最後に実行されます
        print("終わりです")

some_function()
無効です
終わりです

try文を使ったエラー処理(例外処理)の仕方を解説

インポート

外部ライブラリは、import [ライブラリ名]キーワードと共に使用されます。個別の機能はfrom [ライブラリ名] import [関数名]でインポートできます。

import random
from time import sleep

randomint = random.randint(1, 100)
print(randomint)
64

import文を使ってモジュールやライブラリを読み込む方法を解説

File I/O

Pythonにはさまざまなライブラリが組み込まれています。

例としてファイルI/Oを使用したシリアル化(pickleライブラリ を使用してデータ構造を文字列に変換する)の使用方法を見てみましょう!

import pickle

mylist = ["This", "is", 4, 13327]
# C:\\binary.datファイルを書き込み用で開きます
# ファイル名文字列前の「r」はバックスラッシュのエスケープを防ぐために使われます
myfile = open(r"C:\\binary.dat", "wb")
pickle.dump(mylist, myfile)
myfile.close()

myfile = open(r"C:\\text.txt", "w")
myfile.write("This is a sample string")
myfile.close()

myfile = open(r"C:\\text.txt")
print(myfile.read())
'This is a sample string'
myfile.close()

# ファイルを開いて読み取る
myfile = open(r"C:\\binary.dat", "rb")
loadedlist = pickle.load(myfile)
myfile.close()
print(loadedlist)
['This', 'is', 4, 13327] 

まとめ

この記事ではPythonを簡単に学んでもらいました!

このチュートリアルは完璧なものではありません。さらに詳しく学びたい方は公式ドキュメントを参照したり、参考書を使って学習しましょう!

Python – 入門

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

【2023年】Pythonをおすすめの本で学ぼう!この記事では、初めてプログラミングを勉強する方や効率よく学習したい方のために「おすすめの本」と「本を使った勉強法」を紹介します。まずは「progate」や「ドットインストール」などの学習サイトで基礎を学んでから「本」で知識の隙間を埋める という流れの方がスムーズに学習できます。...