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・機械学習・深層学習アプリのつくり方