Type in python#

C๋ฅผ ์ž˜ ์•„๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ C๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ๋งจ ์ฒ˜์Œ์— ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ํ•จ๊ป˜ ์ •์˜ํ•˜๊ณค ํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์–ธ์–ด๋ฅผ ์ •์ ์ธ ์–ธ์–ด๋ผ๊ณ  ํ•œ๋‹ค. ํŒŒ์ด์ฌ์€ C์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์  ์–ธ์–ด๋กœ ์•Œ๋ ค์ ธ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์–ธ์–ด์˜ ํŠน์ง•์€ C์™€๋Š” ๋ฐ˜๋Œ€๋กœ ํŠน์ • ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ์ค‘๊ฐ„์— ๋ฐ”๋€Œ์–ด๋„ ๋˜๊ณ , ์ฒ˜์Œ์— ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋ณ€์ˆ˜์˜ Type์„ ์ง€์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์—๋Ÿฌ ๊ด€๋ฆฌ์™€ ์ฝ”๋“œ ์œ ์ง€์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.

ํƒ€์ž… Type?#

../../_images/data_type_1.png

Fig. 16 ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๋ณ€์ˆ˜์™€ ๊ฐ’์˜ ์„ ์–ธ#

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ๋ฒˆ์— ์ •๋ฆฌํ•œ ์ข‹์€ ๋ฌธ์žฅ์ด ์žˆ๊ธธ๋ž˜ ๊ฐ€์ ธ์™€ ๋ณด์•˜๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์ฐธ์กฐํ•˜๋ฉฐ ์—ฐ์‚ฐ์ž๋กœ ๊ฐ’์„ ์—ฐ์‚ฐ, ํ‰๊ฐ€ํ•˜๊ณ  ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ์— ์˜ํ•œ ํ๋ฆ„์ œ์–ด๋กœ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•˜๊ณ  ํ•จ์ˆ˜๋กœ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ตฌ๋ฌธ์˜ ์ง‘ํ•ฉ์„ ๋งŒ๋“ค๋ฉฐ ๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ์œผ๋กœ ์ž๋ฃŒ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

โ€”modern javascript deep dive

๋ณ€์ˆ˜(variable)์€ ๊ฐ’(value) = ๋ฐ์ดํ„ฐ(data)์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์œ„์น˜,์ฃผ์†Œ(memory address)๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ์ €์žฅ์†Œ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊น ์šฐ๋ฆฌ๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์ปดํ“จํ„ฐ์ฒ˜๋Ÿผ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ตํ•  ์ˆ˜ ์—†์œผ๋‹ˆ, ์ธ๊ฐ„์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด identifier ์‹๋ณ„์ž = variable ๋ณ€์ˆ˜๋กœ ๋“ค๋ฝ๋‚ ๋ฝ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•  ๋•Œ ์ฒ˜์Œ ๋‚˜์˜ค๋Š” ๊ฒƒ์ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ผ๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณต๊ฐ„(๋‹ค๋ฅธ ์ฃผ์†Œ)์— ์ €์žฅ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ํ•˜๋ฉฐ โ€˜== โ€˜๋กœ ์†์„ฑ๊ฐ’์€ ๊ฐ™์„์ง€๋ผ๊ณ  โ€˜isโ€™๋กœ id๊ฐ’ ์ฃผ์†Œ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ•œ๋‹ค. ์ฆ‰ ๊ฐ’์€ ๊ฐ™์•„๋„ ์ฃผ์†Œ๋Š” ๋‹ค๋ฅด๋ฉด ๊ทธ๊ฒƒ์€ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์ด๊ณ , ๊ฐ์ฒด๋กœ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํŒŒ์ด์ฌ์—์„œ ์ฃผ์†Œ๊ฐ’์„ ํ™•์ธํ•˜๋ ค๋ฉด id(object) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

id(object)

Return the โ€œidentityโ€ of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value. CPython implementation detail: This is the address of the object in memory.

๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ๋ฌด์—‡์ธ๊ฐ€? ์ฝ”๋“œ ์ƒ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ์ฐธ์กฐ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์—๋Š” 2์ง„์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™์ด ์กด์žฌํ•˜๊ณ , ๊ทธ ๊ธฐ๋ณธ์ ์ธ ์•ฝ์†๋œ ํ˜•ํƒœ๊ฐ€ data type์ด๋‹ค. ๊ธฐ๋ณธ์ ์ธ sty, int, boolean, none ๊ณผ ๊ฐ™์€ ํƒ€์ž…์— ๋Œ€ํ•œ ์„ค๋ช…์€ pass.

../../_images/data_type_2.jpg

Fig. 17 ๊ธฐ๋ณธ์ ์ธ data type in python#

ํŒŒ์ด์ฌ์€ 3.5v ์ด์ƒ๋ถ€ํ„ฐ Typing์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. vscode๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ pylance๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ณ , pyrigth์˜ ๊ธฐ๋Šฅ์„ pylance๊ฐ€ ์ด๋ฏธ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๋ญ”๊ฐ€๋ฅผ ๊น” ํ•„์š”๋Š” ์—†์„ ๊ฒƒ์ด๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ variable: type = default_value ์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. arg_parser๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋‚˜, class ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์กฐํ™” ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. def์˜ return๊ฐ’์„ ์ง€์ •ํ•  ๋•Œ๋Š” -> type์„ ํ•˜๋ฉด ๋œ๋‹ค.

a: int = 3
def temp_func(temp: str) -> str:
    return temp.strip()

Tpye ์ข…๋ฅ˜#

  1. Union - Union[str,bytes,None] ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์˜ ์ธ์ž์— ์—ฌ๋Ÿฌ ํƒ€์ž…์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์„ ๋–„ ์‚ฌ์šฉํ•œ๋‹ค. 3.10v ์ด์ƒ ๋ถ€ํ„ฐ๋Š” str | bytes | None ์ด๋ ‡๊ฒŒ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

  2. Optional - Union์€ Optional๋กœ ๋Œ€์ฒด๊ฐ€๋Šฅํ•˜๋‹ค. Optional[str]๋กœ ํ•˜๋ฉด str or None์„ ๋ฐ›๋Š”๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

  3. List, Tuple, Dict - 3.9v ์ด์ƒ๋ถ€ํ„ฐ๋Š” typing์—์„œ List,Tuple,Dict๋ฅผ importํ•˜์ง€ ์•Š์•„๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

  4. Callable - Callable[[arg1type,arg2type],returntype] ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ. ๋งŒ์•ฝ return ์ธ์ž๋งŒ ์ง€์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Callable[...,returntype]๋กœ ํ•˜๋ฉด ๋œ๋‹ค.

  5. Type - class ๊ฐ์ฒด๋Š” ํ•ด๋‹น ํƒ€์ž…์„ ๊ทธ๋ƒฅ ๋ช…์‹œํ•˜๋ฉด ๋œ๋‹ค. ํ˜น์€ Type[class_name] ์ง์ ‘ class ์ด๋ฆ„์„ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

  6. TypedDict - ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฐธ๋ฅ˜์˜ ํƒ€์ž…์ด ํ•˜๋‚˜๋กœ ๊ณ ์ •๋˜์ง€๋Š” ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“  ๋‹ค์Œ key-value type matching์„ ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค. ํ˜น์€ dataclass๋กœ ๋Œ€์ฒดํ•ด์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

  7. Generator, Iterable, Iterator - Generator[YieldType, SendType, ReturnType] - sendtype์„ input์œผ๋กœ ๋ฐ›๊ณ  - yieldtype์„ outputํ•˜๋ฉฐ - returntype์„ ์˜ˆ์™ธ๊ฒฝ์šฐ์— ๋ฑ‰๋Š”๋‹ค.

  8. Any - ์“ฐ์ง€๋งˆ๋ผ,

  9. ParamSpec - ๊ฐ€๋ณ€ ์œ„์น˜ ์ธ์ž(*args)์™€ ๊ฐ€๋ณ€ ํ‚ค์›Œ๋“œ ์ธ์ž(**kwargs)๋ฅผ ๋ฐ›๊ณ , ์ด๋“ค์˜ ํƒ€์ž…์„ ParamSpec์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ Tuple[ParamSpec, ParamSpec]์„ ์‚ฌ์šฉํ•˜์—ฌ args์™€ kwargs์˜ ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. 3.10v์ด์ƒ๋ถ€ํ„ฐ ๊ฐ€๋Šฅํ•˜๋‹ค/

from typing import ParamSpec, Tuple

def my_function(*args: ParamSpec, **kwargs: ParamSpec) -> Tuple[ParamSpec, ParamSpec]:
    return args, kwargs

Reference#