【Python3入門】*(アスタリスク)1個の機能まとめ

Pythonの*(アスタリスク)は他のプログラミング言語と意味合いが違います

Pythonにポインタはありません。

Pythonの*(アスタリスク)にはどんな機能があるのかまとめてみました。

*(アスタリスク)1個の機能は大きく分けると5つ

1. 数値の計算

2. 文字列の繰り返し

3. リストやタプルの拡張

4. 位置引数のタプル化

5. リストやタプルのunpacking(アンパッキング)

1. 数値の計算

これはPythonを勉強し始めたら最初に勉強する基本的な計算ですね。

>>> 4*3
12
>>> 2**3  # 2の3乗
8

2. 文字列の繰り返し

*を使って文字列を繰り返すことができます。

>>> 'Python3' * 3
'Python3Python3Python3'

3. リストやタプルの拡張

文字列と同じようなイメージで繰り返すことができます。

>>> list = [1, 2, 3] * 3                                                                    
>>> list                                                                                    
[1, 2, 3, 1, 2, 3, 1, 2, 3]

>>> list = [1, 2, 3]
>>> for i, L in enumerate(list * 3):
...     print(i,'→', L)
... 
0 → 1
1 → 2
2 → 3
3 → 1
4 → 2
5 → 3
6 → 1
7 → 2
8 → 3

>>> list = [[1, 2, 3]]
>>> for i, L in enumerate(list * 3):
...     print(i,'→', L)
... 
0 → [1, 2, 3]
1 → [1, 2, 3]
2 → [1, 2, 3]

>>> atuple = (1,)  # タプルでも同様
>>> atuple * 5
(1, 1, 1, 1, 1)

4. 位置引数のタプル化

関数の定義の中で仮引数に*を使うと、タプルにまとめられます。

慣習的に、*(アスタリスク)を使った仮引数を*argsと書きます。

>>> def f(*args):
...     print(args)
... 
>>> f(1, 2, 3)
(1, 2, 3)

>>> f([2, 4, 6])
([2, 4, 6],)

>>> f('python', 'carnival', 'python3')
('python', 'carnival', 'python3')

5. リストやタプルのunpacking(アンパッキング)

unpack機能としての*(アスタリスク)。
分解してくれるようなイメージ。
こちらも参考に→リストのunpacking、Python3からの拡張機能
reduce()関数についてはこちら→reduce()を使いシーケンスの個々の要素に同じ関数を適用する

>>> from functools import reduce
>>> list = [1, 2, 3, 4, 5]
>>> def func(*numList):
...     s = reduce(lambda x, y: x + y, numList)
...     return s
... 
>>> func(*list) 
15

# 参考:reduce()の処理(このサンプルではlambdaを順に実行)
# 1 + 2 = 3
# 3 + 3 = 6
# 6 + 4 = 10
# 10 + 5 = 15 
>>> numbers = [1, 2, 3, 4, 5]
>>> *a, = numbers  #カンマ(,)を忘れてはいけない
>>> a
[1, 2, 3, 4, 5]
>>> *a  # *(アスタリスク)を使ったアクセスはできない                                                                                      
  File "<stdin>", line 1                                                                    
SyntaxError: can't use starred expression here

>>> *a, b = numbers
>>> a
[1, 2, 3, 4]
>>> b
5

>>> a, *b = numbers
>>> a
1
>>> b
[2, 3, 4, 5]

>>> a, *b, c = numbers
>>> a
1
>>> b
[2, 3, 4]
>>> c
5


>>> ttt = (1, 2, 3, 4, 5)
>>> *a, = ttt
>>> a  # リストであることに注意
[1, 2, 3, 4, 5]
>>> a.append(6)
>>> a
[1, 2, 3, 4, 5, 6]



【こちらも合わせてどうぞ】
Pythonプロフェッショナルプログラミング
すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方