0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonで個人的によくわすれるやつ

Posted at

関数引数について

pythonにおいて関数引き数は参照型であるため引数で渡した値が対象の関数内で書き換わること期待したが、
pythonの基本型はimmutableであり、関数の呼び出し前後でオブジェクトが変わっており、期待する振る舞いではなかった。
下記例において、add関数内で変数cntが再度生成されたというように考えるべきであり、引数のcntは単純な読み取り専用となっている。
品質的にはそれが好ましいと感じている。

def add(cnt:int) -> int:
    print('--------------------------------')
    print('cntのid 加算前 = {0}'.format(id(cnt)))
    cnt = cnt  + 1
    print('cntのid 加算後 = {0}'.format(id(cnt)))
    return cnt

counter : int = 0
print('--------------------------------')
print('関数呼び出し前')
print('counter = {0}'.format(counter))
# add関数の呼び出し
ret = add(counter) 
print('--------------------------------')
print('関数呼び出し後')
print('counter = {0}'.format(counter))
print('ret = {0}'.format(ret))




--------------------------------
関数呼び出し前
counter = 0
--------------------------------
cntのid 加算前 = 2572282626256
cntのid 加算後 = 2572282626288
--------------------------------
関数呼び出し後
counter = 0
ret = 1

リスト、タプル、辞書、セット

忘れるので...

# リスト
data = ['a','b','c','d']
print('-----------------------------------------------')
print('List')
print("dataのtype = {0}".format(type(data)))
# 追加可能(最もシンプルな1例)
data.append('e')

# タプル
data = ('a','b','c','d')
print('-----------------------------------------------')
print('Tuple')
print("dataのtype = {0}".format(type(data)))
# 追加不可
# data.append('e')

# 辞書
data = {'a': 0,'b': 1,'c': 2,'d': 3}
print('-----------------------------------------------')
print('Dictionary')
print("dataのtype = {0}".format(type(data)))
# 追加可能(最もシンプルな1例)
data['e'] = 4

# セット
data = {'a','b','c','d'}
print('-----------------------------------------------')
print('Set')
print("dataのtype = {0}".format(type(data)))
# 追加可能(最もシンプルな1例)
data.add('e')


-----------------------------------------------
List
dataのtype = <class 'list'>
-----------------------------------------------
Tuple
dataのtype = <class 'tuple'>
-----------------------------------------------
Dictionary
dataのtype = <class 'dict'>
-----------------------------------------------
Set
dataのtype = <class 'set'>

セイウチ演算子

Python 3.8からの新機能
変数に値を割り当てる新しい構文
詳細はこちら

data = [i for i in range(10)]
if (n:=len(data)) <11:
    print(n)
10

ジェネレータ関数

def generator(offset :int) -> int:
    yield offset + 1
    yield offset + 2

gen = generator(0)

for n in gen:
    print(n)

#error    
#gen.__next__()
1
2

リスト内包表記

リスト作成の簡単な手段として提供
詳細はこちら

data = list(map(lambda x: x**2, range(10)))
print(data)

data = [x**2 for x in range(10)]
print(data)

## 条件を付けることも可能
data = [x**2 for x in range(10) if x%3==0 ]
print(data)

## 複数のfor句をつけることも可能
data = [( x, y, x*y) for x in range(3) for y in range(3, 0, -1) ]
print(data)

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 9, 36, 81]
[(0, 3, 0), (0, 2, 0), (0, 1, 0), (1, 3, 3), (1, 2, 2), (1, 1, 1), (2, 3, 6), (2, 2, 4), (2, 1, 2)]

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?