コンテンツにスキップ

スター演算子

スター 1 つで JavaScript のスプレッド演算子

例 1

1
2
3
4
5
6
7
8
9
a = [0, 1, 2]
b = [*a, 3, 4] # JavaScriptでいう[...[0, 1, 2], 3, 4]

print(b) # [0, 1, 2, 3, 4]

a = {"key1": "value1"}
b = {**a, "key2": "value2"} # 辞書のマージ(シャロー)

print(a, b) # {'key1': 'value1'} {'key1': 'value1', 'key2': 'value2'}

例 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ints = [0, 1, 2]


def func(*args: int) -> None:
    # args == (0, 1, 2)
    print(args)  # print((0, 1, 2))
    print(*args)  # print(0, 1, 2)


func(*ints)  # func(0, 1, 2)

例 3(応用)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import time
from typing import Callable


def intercept[T](func: Callable[[any], T], *args: any) -> T:
    print("Sleep before calling a function")
    time.sleep(1)
    print("Result:", func(*args))


def func(*args: any) -> bool:
    return len(args) >= 3


args = (0, 1, 2)

result_to_be_bool = intercept(func, *args)
1
2
Sleep before calling a function
Result: True

スター 2 つで dict として受け取れる

例 1

1
2
3
4
5
def func(**args) -> None:
    print(args)


func(a=0, b=1, c=2) # {'a': 0, 'b': 1, 'c': 2}