Python

Python入門


Pythonとは

  軽量なスクリプト型プログラミング言語


特徴

  軽量、対話型


Download

  公式:http://www.python.org


インストール

  •   windows環境変数の設定(自動設定選択可能)
  •   確認:cmdでpython
C:\Users\rakuf\Desktop\wk>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

hellow world(対話モード)

>>> print("hellow world!!!")
hellow world!!!

対話モードの終了

>>> quit()
C:\Users\rakuf\Desktop\wk>

インデント

※注意:ブロックごとにインデントしないと認識ができない。


日本語対応

code指定が必要

test.py
# -*- coding: utf-8 -*-
# 日本語使用が可能

コマンドラインの引数

$ python test.py paramA paramB
test.py
import sys
args = sys.argv
print(args) # ['test.py', 'paramA', 'paramB']
print(args[0]) # ファイル名 ⇒ test.py
print(args[1]) # paramA
print(args[2])  # paramB

変数

test.py
# -*- coding: utf-8 -*-
# 定義
a = 1 # 数値
b = 'ABC' # 文字列
c = [1, 2, 3, 4, 5] # リスト
d = {'apple': 10, 'orange': 20, 'banana': 30}  # 辞書
# 出力
print(a) 
print(b)
print(c) 
print(d)

結果

1
ABC
[1, 2, 3, 4, 5]
{'apple': 10, 'orange': 20, 'banana': 30}

数値

test.py
# -*- coding: utf-8 -*-

# 定義
a = 1 # int
b = 2.0 # float
c = 3 + 4j # complex
d = complex(5,6) # complex

# 出力
print(a) 
print(b)
print(c.real) 
print(d.imag)

結果

1
2.0
3.0
6.0

bool

test.py
# -*- coding: utf-8 -*-

# 定義
a = True # 先頭に大文字が必須
b = False # 先頭に大文字が必須

# 出力
print(a) 
print(b)

結果

True
False

文字列

test.py
# -*- coding: utf-8 -*-

# 定義
# ''
str_1 = 'this is a string.'
# ""
str_2 = "this is a string."
# ' in string
str_3 = 'we can use \' in a string.'
# " in string
str_4 = "we can use \" in a string."
# /で編集改行
str_5 = "word1\
word2"
# rの使い方
str_6 = "aaa\nbbb"
str_7 = r"aaa\nbbb"

# 出力
print(str_1) 
print(str_2) 
print(str_3) 
print(str_4) 
print(str_5) 
print(str_6) 
print(str_7) 

結果

this is a string.
this is a string.
we can use ' in a string.
we can use " in a string.
word1word2
aaa
bbb
aaa\nbbb

文字列のフォーマット(%)

test.py
# -*- coding: utf-8 -*-

errmsg = "Can't open file"
errcode = 12345
msg = "ERROR: %s (%d)" % (errmsg, errcode)
print(msg)

結果

ERROR: Can't open file (12345)

定数

pythonは定数がサポートされていない。


集合型

リスト

test.py
# -*- coding: utf-8 -*-

a = ['A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9']

print(a[0])
print(a[3])
print(a[3:5])
print(a[3:])
print(a[:5])

for n in a:
    print(n)

結果

A0
A3
['A3', 'A4']
['A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9']
['A0', 'A1', 'A2', 'A3', 'A4']
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9

tuple

test.py
# -*- coding: utf-8 -*-

a = ('A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9')

a[0] = 'A00' # 変更できない

結果

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    a[0] = 'A00'
TypeError: 'tuple' object does not support item assignment

辞書

test.py
# -*- coding: utf-8 -*-

# 定義
d = {'key1':'value1', 'key2':'value2', 'key3':'value3'}

# 出力
print(d['key1'])

for k, v in d.items():
    print(k, v)

for k in d.keys():
    print(k, d[k])

for v in d.values():
    print(v)

結果

value1
key1 value1
key2 value2
key3 value3
key1 value1
key2 value2
key3 value3
value1
value2
value3

Set

test.py
# -*- coding: utf-8 -*-

# 定義
a = set(['red', 'yellow', 'blue'])
b = set(['green', 'white'])

# 出力、計算可能
print(a)
print(b)
print(a - b)
print(a | b)
print(a & b)
print(a ^ b)
print('red' in a)
a.add('black')
print(a)

結果

{'blue', 'yellow', 'red'}
{'white', 'green'}
{'blue', 'yellow', 'red'}
{'blue', 'green', 'yellow', 'red', 'white'}
set()
{'blue', 'red', 'green', 'yellow', 'white'}
True
{'blue', 'yellow', 'black', 'red'}

制御文

if else

test.py
# -*- coding: utf-8 -*-

a = 10
# if文 注意:インデントの一致
if a > 10:
    print('big')
elif a == 10:
    print('10')
else:
    print('small')

結果

10

while

test.py
# -*- coding: utf-8 -*-

n = 0

# while
while n < 5:
    print(n)
    n += 1
else:
    print('end')

結果

0
1
2
3
4
end

for,range

test.py
# -*- coding: utf-8 -*-

for a in [1, 2, 3]:
    print(a)

print('---')
for b in {'one': 1, 'two': 2, 'three': 3}:
    print(b)

print('---')
for c in "123":
    print(c)

print('---')
# range
for d in range(3): #0から
    print(d)

結果

1
2
3
---
one
two
three
---
1
2
3
---
0
1
2

break

test.py
# -*- coding: utf-8 -*-

# break
for n in range(5):
    if n == 3:
        break
    print(n) 

結果

0
1
2

continue

test.py
# -*- coding: utf-8 -*-

# continue
for n in range(5):
    if n == 3:
        continue
    print(n) 

結果

0
1
2
4

例外処理

test.py
# -*- coding: utf-8 -*-

# 例外
str = '123'
try:
    c = str[10] #10なのでIndexErrorが発生
except IOError:
    print('IOError')
except IndexError:
    print('IndexError')
except:  #その他例外
    print('UnknownError')
else:  #例外が発生しない場合
    print('Other')
finally: #常に実行
    print('Finally')

結果

IndexError
Finally

関数

no return

test.py
# -*- coding: utf-8 -*-

# methodの定義
def printAdd(x, y):
    print(x + y)

# methodの実行
printAdd(1, 2)

結果

3

return

test.py
# -*- coding: utf-8 -*-

# methodの定義
def add(x, y):
    return x + y

# methodの実行
print(add(1, 2))

結果

3

default parameter

test.py
# -*- coding: utf-8 -*-

# methodの定義
def repeat_output(msg, n = 3):
    for i in range(n):
        print(msg)

# methodの実行
repeat_output('test1',)
print('-----')
repeat_output('test2', 5)

結果

test1
test1
test1
-----
test2
test2
test2
test2
test2

[*]引数

test.py
# -*- coding: utf-8 -*-

# methodの定義
def methodA(x, y, *args):
    print(x)
    print(y)
    print(args)
    print(args[0])
    print(args[1])

# methodの実行
methodA('x1', 'y1', 'Z1', 'Z2')

結果

x1
y1
('Z1', 'Z2')
Z1
Z2

[**]引数

test.py
# -*- coding: utf-8 -*-

# methodの定義
def methodA(x, y, **args): #辞書型も受ける
    print(x)
    print(y)
    print(args)
    print(args['k1'])
    print(args['k2'])

# methodの実行
args = {'k1':'v1', 'k2':'v2'}
methodA('x1', 'y1', **args) #辞書型も受ける

結果

x1
y1
{'k1': 'v1', 'k2': 'v2'}
v1
v2

複数の戻り値

test.py
# -*- coding: utf-8 -*-

# methodの定義
def plusOne(x, y):
    return x + 1, y + 1

# methodの実行
x, y = plusOne(2, 4)

print(x, y)

結果

3 5

global変数の参照

test.py
# -*- coding: utf-8 -*-

g = 100

def method_global():
    print(g)

method_global()
print(g)

結果

100
100

global変数の変更失敗

test.py
# -*- coding: utf-8 -*-

g = 100

def method_global():
    g = 200 #メソッド内上書き
    print(g)

method_global()
print(g)

結果

200
100

global変数の変更成功

test.py
# -*- coding: utf-8 -*-

g = 100

def method_global():
    global g #globalを宣言したら、認識される。
    g = 200 #global変数の変更
    print(g)

method_global()
print(g)

結果

200
200

Class

classの定義

test.py
# -*- coding: utf-8 -*-

# classの定義
class SampleClass:
    """this is doc""" #for doc

    def getName(self):
        return self.name

    def setName(self, name):
        self.name = name

# instanceの生成
a = SampleClass()
a.setName('luohao')
print(a.getName())

結果

luohao

class変数、instance変数

test.py
# -*- coding: utf-8 -*-

# classの定義
class SampleClass:
    """this is doc""" #for doc

    count = 0 #class変数

    def __init__(self):# constructor
        SampleClass.count += 1

    def getName(self):
        return self.name #instance変数

    def setName(self, name):
        self.name = name #instance変数

# instanceの生成
a = SampleClass()
a.setName('luohao1')
print(a.getName(), SampleClass.count)

b = SampleClass()
b.setName('luohao2')
print(b.getName(), SampleClass.count)

結果

luohao1 1
luohao2 2

アクセス制限(__)

test.py
# -*- coding: utf-8 -*-

# classの定義
class SampleClass:
    """this is doc""" #for doc

    def __init__(self):# constructor
        self.__name = 'privateName'

    def __getName(self):
        return self.__name

# instanceの生成
a = SampleClass()
print(a.__name) # error
print(a.__getName()) # error

結果

AttributeError: 'SampleClass' object has no attribute '__name'

initdel

test.py
# -*- coding: utf-8 -*-

# classの定義
class SampleClass:
    def __init__(self):
        print('INIT!')
    def __del__(self):
        print('DELETE!')

x = SampleClass()
del x

結果

INIT!
DELETE!

classの継承

test.py
# -*- coding: utf-8 -*-

# classの定義
class FatherClass:
    def sayFather(self):
        print('im father')

# classの定義
class SonClass(FatherClass): #fatherクラスを継承する
    def saySon(self):
        print('im son')

# instanceの生成
son = SonClass()
son.sayFather()
son.saySon()

結果

im father
im son

classの継承のoverride

test.py
# -*- coding: utf-8 -*-

# classの定義
class FatherClass:
    def sayFather(self):
        print('im father')

# classの定義
class SonClass(FatherClass): #fatherクラスを継承する
    def sayFather(self): #override
        print('im son')

# instanceの生成
son = SonClass()
son.sayFather()

結果

im son

classの多重継承

test.py
# -*- coding: utf-8 -*-

# classの定義
class FatherClass:
    def sayFather(self):
        print('im father')

class MotherClass:
    def sayMother(self):
        print('im mother')

# classの定義
class SonClass(FatherClass, MotherClass): #fatherクラスを継承する
    pass # 何もしない。

# instanceの生成
son = SonClass()
son.sayFather()
son.sayMother()


結果

im father
im mother

Model

modelTest.py
# -*- coding: utf-8 -*-

# model
# classの定義
class ModelClass:
    def printModel(self):
        print('im from model')

test.py
# -*- coding: utf-8 -*-


import modelTest #import

# modelからinstanceの生成
a = modelTest.ModelClass()
a.printModel()   

結果

im from model

Package

modelTest.py
# -*- coding: utf-8 -*-

# model
# classの定義
class ModelClass:
    def printModel(self):
        print('im from model')

test.py
# -*- coding: utf-8 -*-


import modelTest #import

print(__package__) #パッケージ名
print(__file__) #ファイル名
print(__name__) #モジュール名  

結果

None
test.py
__main__