Python 3.8 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ถœ์‹œ

XNUMX๋…„ ๋ฐ˜์˜ ๊ฐœ๋ฐœ ๋์— ์ œ์‹œ๋œ ์ฃผ์š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฆด๋ฆฌ์Šค ํŒŒ์ด์ฌ 3.8. Python 3.8 ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ์ˆ˜์ • ์—…๋ฐ์ดํŠธ ๊ณ„ํš๋œ 18๊ฐœ์›” ์ด๋‚ด์— ์ถœ์‹œ. ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์€ 5๋…„ 2024์›”๊นŒ์ง€ 3.8๋…„๊ฐ„ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค. 3.8.1 ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ์ˆ˜์ • ์—…๋ฐ์ดํŠธ๋Š” XNUMX๊ฐœ์›”๋งˆ๋‹ค ์ถœ์‹œ๋  ์˜ˆ์ •์ด๋ฉฐ Python XNUMX์˜ ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ • ๋ฆด๋ฆฌ์Šค๋Š” XNUMX์›”๋กœ ์˜ˆ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋œ ๊ฒƒ ์ค‘์—์„œ ํ˜์‹ :

  • ์ง€์› ๋ณต์žกํ•œ ํ‘œํ˜„์‹ ๋‚ด์˜ ํ• ๋‹น ์ž‘์—…. ์ƒˆ๋กœ์šด ":=" ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ํ‘œํ˜„์‹ ๋‚ด์—์„œ ๊ฐ’ ํ• ๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์กฐ๊ฑด๋ฌธ์—์„œ๋‚˜ ๋ฃจํ”„๋ฅผ ์ •์˜ํ•  ๋•Œ ์ด์ค‘ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    if (n := len(a)) > 10:
    ...

    while (block := f.read(256)) != ":
    ...

  • ์ง€์› ํ•จ์ˆ˜ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ. ํ•จ์ˆ˜ ์ •์˜ ์ค‘ ์ธ์ˆ˜๋ฅผ ์—ด๊ฑฐํ•  ๋•Œ ์ด์ œ "/"๋ฅผ ์ง€์ •ํ•˜์—ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ค‘ ๊ฐ’์ด ์—ด๊ฑฐ๋˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฐ’๋งŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ˆ˜์™€ ํ• ๋‹น ๊ฐ€๋Šฅํ•œ ์ธ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ˆœ์„œ๋กœ๋“ (๋ณ€์ˆ˜=๊ฐ’ ๊ตฌ๋ฌธ)). ์‹ค์šฉ์ ์ธ ์ธก๋ฉด์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด Python์˜ ํ•จ์ˆ˜๊ฐ€ C์˜ ๊ธฐ์กด ํ•จ์ˆ˜ ๋™์ž‘์„ ์™„์ „ํžˆ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ํ–ฅํ›„ ๋ณ€๊ฒฝ๋  ์˜ˆ์ •์ธ ๊ฒฝ์šฐ ํŠน์ • ์ด๋ฆ„์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ์„ ํ”ผํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    "/" ํ”Œ๋ž˜๊ทธ๋Š” ์ด์ „์— ์ถ”๊ฐ€๋œ "*" ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณด์™„ํ•˜์—ฌ "๋ณ€์ˆ˜=๊ฐ’" ํ˜•์‹์˜ ํ• ๋‹น๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "def f(a, b, /, c, d, *, e, f):" ํ•จ์ˆ˜์—์„œ ๋ณ€์ˆ˜ "a"์™€ "b"๋Š” ๊ฐ’์ด ๋‚˜์—ด๋œ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ํ• ๋‹น๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ,
    ๋ณ€์ˆ˜ "e" ๋ฐ "f"๋Š” "variable=value" ํ• ๋‹น์„ ํ†ตํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ณ€์ˆ˜ "c" ๋ฐ "d"๋Š” ๋‹ค์Œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • ์ถ”๊ฐ€๋จ ์ƒˆ๋กœ์šด C API
    Python ์ดˆ๊ธฐํ™” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ๊ณ ๊ธ‰ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๊ธฐ๋Šฅ์„ ๋‹ค๋ฅธ C ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‰ฝ๊ฒŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตฌํ˜„ C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๊ฐ์ฒด์— ๋” ๋น ๋ฅด๊ฒŒ ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ฒกํ„ฐ์ฝœ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. CPython 3.8์—์„œ Vectorcall์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” ์—ฌ์ „ํžˆ ๋‚ด๋ถ€ ์‚ฌ์šฉ์œผ๋กœ ์ œํ•œ๋˜๋ฉฐ, CPython 3.9์—์„œ๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ์•ก์„ธ์Šค ๊ฐ€๋Šฅํ•œ API ๋ฒ”์ฃผ๋กœ์˜ ์ „ํ™˜์ด ๊ณ„ํš๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€๋จ ์ˆ˜ํ–‰๋œ ์ž‘์—…์„ ๊ฐ์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ ์ง„ํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•œ ํ•˜์œ„ ์ˆ˜์ค€ ์ •๋ณด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” Python์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ๊ฐ์‚ฌ ํ›„ํฌ ํ˜ธ์ถœ(์˜ˆ: ์ถ”์ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ, ํŒŒ์ผ ์—ด๊ธฐ ์ถ”์ , ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์— ์•ก์„ธ์Šคํ•˜๊ณ  exec, eval ๋ฐ run_mod๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ์—์„œ๋Š” ํ”ผํด ์ œ๊ณต๋œ ๊ฐ์ฒด ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™”์— ์‚ฌ์šฉ๋˜๋Š” Pickle 5 ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Pickle์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ์ž‘์—… ์ˆ˜๋ฅผ ์ค„์ด๊ณ  ๋ฐ์ดํ„ฐ๋ณ„ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ์ ์šฉํ•˜์—ฌ ๋‹ค์ค‘ ์ฝ”์–ด ๋ฐ ๋‹ค์ค‘ ๋…ธ๋“œ ๊ตฌ์„ฑ์—์„œ Python ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์˜ ๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฒ„์ „์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ณธ ํ”ผํด ์ŠคํŠธ๋ฆผ๊ณผ ๋ณ„๋„๋กœ ์ „์†ก๋  ์ˆ˜ ์žˆ๋Š” ๋Œ€์—ญ ์™ธ ์ „์†ก ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ์ ์—์„œ ์ฃผ๋ชฉํ•  ๋งŒํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ Pickle ํ”„๋กœํ† ์ฝœ์˜ ๋„ค ๋ฒˆ์งธ ๋ฒ„์ „์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์€ ์ด์ „์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์„ธ ๋ฒˆ์งธ ๋ฒ„์ „๊ณผ ๋น„๊ตํ•˜์—ฌ ๋” ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์ „์†ก๋œ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ์—์„œ๋Š” ์ž…๋ ฅ ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค:
    • ํด๋ž˜์Šค TypedDict ํ‚ค์™€ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์œ ํ˜• ์ •๋ณด๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋œ ์—ฐ๊ด€ ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ(โ€œTypedDict('Point2D', x=int, y=int, label=str)โ€).
    • ์œ ํ˜• ์ •ํ™•ํ•œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ช‡ ๊ฐ€์ง€ ๊ฐ’(โ€œLiteral['connected', 'disconnected']โ€)์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฑด์„ค "๋"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์žฌํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ ๋ฐ ํด๋ž˜์Šค์˜ ๊ฐ’์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค("pi: Final[float] = 3.1415926536").
  • ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ์— ์บ์‹œ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๋ณ„๋„์˜ FS ํŠธ๋ฆฌ์— ์ €์žฅํ•˜๋ฉฐ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ๋ถ„๋ฆฌ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒฝ๋กœ๋Š” ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. PYTHONPYCachePrefix ๋˜๋Š” "-X pycache_prefix" ์˜ต์…˜;
  • ๊ตฌํ˜„ ๋ฆด๋ฆฌ์Šค์™€ ๋™์ผํ•œ ABI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Python์˜ ๋””๋ฒ„๊ทธ ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ, ์ด๋ฅผ ํ†ตํ•ด ๋””๋ฒ„๊ทธ ๋นŒ๋“œ์—์„œ SI ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜๊ณ  ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค์šฉ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ํ™•์žฅ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • f-๋ฌธ์ž์—ด('f' ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์€ ํ˜•์‹ํ™”๋œ ๋ฆฌํ„ฐ๋Ÿด)์€ = ์—ฐ์‚ฐ์ž(์˜ˆ: "f'{expr=}'")์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋” ์‰ฌ์šด ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ํ‘œํ˜„์‹์„ ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

    >>>> ์‚ฌ์šฉ์ž = 'eric_idle'
    >>>> member_since = ๋‚ ์งœ(1975, 7, 31)
    >>> f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • ํ‘œํ˜„ "๊ณ„์†ยป ๋ธ”๋ก ๋‚ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ตœ์ข…์ ์œผ๋กœ;
  • ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๋‹ค์ค‘ ์ฒ˜๋ฆฌ.shared_memory, ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค ๊ตฌ์„ฑ์—์„œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Windows ํ”Œ๋žซํผ์—์„œ asyncio ๊ตฌํ˜„์€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ProactorEventLoop;
  • ์ƒˆ๋กœ์šด ๊ฐœ์ฒด ์ฝ”๋“œ ์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ LOAD_GLOBAL ๋ช…๋ น์˜ ์„ฑ๋Šฅ์ด ์•ฝ 40% ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€