はじめに
Python基礎を理解した人が、ここに記載のPython独特な書き方を把握すれば大体のプログラムを読めるようにすることを目的として、Pythonの独特な書き方をまとめました。
なお記載している内容は私の主観で、以下の条件を満たすものだけとしています。
- 初学者向けの教材に記載がない
- Pythonプログラムの中でよく使われることがある独特な書き方
とりあえず思いついたもののみ記載しておりますので、随時更新していきます。
対象読者
Pythonの基礎を理解している人を対象としております。
そのため細かな説明は一切記載しておりません。
記載内容の説明
以下のように、「通常の書き方」→「Pyhotn独特の書き方」の順番で記載しています。
初学者向けの教材に記載している内容で記載できる方法を、「通常の書き方」と表現しています。
通常の書き方
プログラム
# 実行結果 -> XXX
Python独特の書き方
プログラム
# 実行結果 -> XXX
内包表記
リスト内包表記(その1)
通常の書き方
numbers = []
for i in range(5):
numbers.append(i)
print(numbers)
# 実行結果 -> [0, 1, 2, 3, 4]
Python独特の書き方
numbers = [i for i in range(5)]
print(numbers)
# 実行結果 -> [0, 1, 2, 3, 4]
リスト内包表記(その2)
通常の書き方
numbers = []
for i in range(5):
numbers.append("Hello")
print(numbers)
# 実行結果 -> ['Hello', 'Hello', 'Hello', 'Hello', 'Hello']
Python独特の書き方
numbers = ['Hello' for i in range(5)]
print(numbers)
# 実行結果 -> ['Hello', 'Hello', 'Hello', 'Hello', 'Hello']
リスト内包表記(その3)
通常の書き方
numbers = []
for i in range(5):
if i % 2 == 0:
numbers.append(i)
print(numbers)
# 実行結果 -> [0, 2, 4]
Python独特の書き方
numbers = [i for i in range(5) if i % 2 ==0]
print(numbers)
# 実行結果 -> [0, 2, 4]
ディクショナリ内包表記
通常の書き方
square = {}
for i in range(5):
square[i] = i * i
print(square)
# 実行結果 -> {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Python独特の書き方
square = {i : i * i for i in range(5)}
print(square)
# 実行結果 -> {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
関数の引数
アスタリスクが1つの引数
通常の書き方
def test(args1, args2, args3):
print(args1)
print(args2)
print(args3)
test('1st', '2nd', '3rd')
# 実行結果 ->
1st
2nd
3rd
Python独特の書き方
# *をつけると可変長引数となる
# *argsで引数を全て受け取る(アスタリスクから始まれば、名前は*args以外でも良い)
def test(*args):
for arg in args:
print(arg)
test('1st', '2nd', '3rd')
# 実行結果 ->
1st
2nd
3rd
Python独特の書き方
# *argsで引数の残りを全て受け取る
def test(args1, *args):
for arg in args:
print(arg)
test('1st', '2nd', '3rd')
# 実行結果 ->
2nd
3rd
アスタリスクが2つの引数
通常の書き方
def test(k1, k2, k3):
print(k1)
print(k2)
print(k3)
test(k1='Key1', k2='Key2', k3='Key3')
# 実行結果 ->
Key1
Key2
Key3
Python独特の書き方
# **をつけると可変長引数となる
# **kwargsでキーワード付き引数を辞書型で全て受け取る(アスタリスクから始まれば、名前は**kwargs以外でも良い)
def test(**kwargs):
for key in kwargs.values():
print(key)
test(k1='Key1', k2='Key2', k3='Key3')
# 実行結果 ->
Key1
Key2
Key3
Python独特の書き方
# **kwargsでキーワード付き引数の残りを全て受け取る
def test(k1, **kwargs):
for key in kwargs.values():
print(key)
test(k1='Key1', k2='Key2', k3='Key3')
# 実行結果 ->
Key2
Key3
アスタリスクが1つの引数と2つの引数の混在
通常の書き方
def test(args1, args2, args3, k1, k2, k3):
print(args1)
print(args2)
print(args3)
print(k1)
print(k2)
print(k3)
test('1st', '2nd', '3rd', k1='Key1', k2='Key2', k3='Key3')
# 実行結果 ->
1st
2nd
3rd
Key1
Key2
Key3
Python独特の書き方
def test(*args, **kwargs):
for arg in args:
print(arg)
for key in kwargs.values():
print(key)
test('1st', '2nd', '3rd', k1='Key1', k2='Key2', k3='Key3')
# 実行結果 ->
1st
2nd
3rd
Key1
Key2
Key3
Python独特の書き方
def test(args1, *args, k1, **kwargs):
for arg in args:
print(arg)
for key in kwargs.values():
print(key)
test('1st', '2nd', '3rd', k1='Key1', k2='Key2', k3='Key3')
# 実行結果 ->
2nd
3rd
Key2
Key3
lambda(ラムダ式、無名関数)
通常の書き方
def goukei(a, b):
print(a + b)
goukei(5, 10)
# 実行結果 -> 15
Python独特の書き方
# 書き方は「lambda 引数 : 処理内容」
goukei = lambda a, b : print(a + b)
goukei(5, 10)
# 実行結果 -> 15
プロパティ(getter、setter)
通常の書き方
class Test:
def __init__(self):
self.name = "yamada"
def getName(self):
return self.name
def setName(self, name):
self.name = name
def delName(self):
del self.name
obj = Test()
print(obj.getName())
obj.setName('tanaka')
print(obj.getName())
obj.delName()
# 実行結果 ->
yamada
tanaka
通常の書き方
class Test:
def __init__(self):
self.name = "yamada"
def getName(self):
return self.name
def setName(self, name):
self.name = name
def delName(self):
del self.name
name = property(getName, setName, delName) # 追記
obj = Test()
print(obj.name)
obj.x = 'tanaka'
print(obj.name)
obj.delName()
# 実行結果 ->
yamada
tanaka
Python独特の書き方
class Test:
def __init__(self):
self._name = "yamada"
@property
def name(self):
return self._name
@name.setter
def name(self, name):
self._name = name
@name.deleter
def name(self):
del self._name
obj = Test()
print(obj.name)
obj.name = 'tanaka'
print(obj.name)
del obj.name
# 実行結果 ->
yamada
tanaka
計算
通常の書き方
n = 1
if n < 0:
print(5 + 5)
else:
print(5 - 5)
# 実行結果 -> 0
Python独特の書き方
n = 1
5 + (5, -5)[n < 0]
# 実行結果 -> 10
Python独特の書き方
n = -1
5 + (5, -5)[n < 0]
# 実行結果 -> 0