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

3.10๋…„๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— Python XNUMX ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ค‘์š”ํ•œ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ธŒ๋žœ์น˜๋Š” XNUMX๋…„ ๋ฐ˜ ๋™์•ˆ ์ง€์›๋˜๋ฉฐ, ์ดํ›„ XNUMX๋…„ ๋ฐ˜ ๋™์•ˆ ์ทจ์•ฝ์ ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋™์‹œ์— Python 3.11 ๋ธŒ๋žœ์น˜์˜ ์•ŒํŒŒ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ์ผ์ •์— ๋”ฐ๋ผ ์ƒˆ ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ์ž‘์—…์€ ์ด์ „ ๋ธŒ๋žœ์น˜๊ฐ€ ์ถœ์‹œ๋˜๊ธฐ 3.11๊ฐœ์›” ์ „์— ์‹œ์ž‘๋˜์–ด ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค ๋•Œ๊นŒ์ง€ ์•ŒํŒŒ ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„์— ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ). Python XNUMX ๋ธŒ๋žœ์น˜๋Š” XNUMX๊ฐœ์›” ๋™์•ˆ ์•ŒํŒŒ ๋ฆด๋ฆฌ์Šค๋กœ ์ œ๊ณต๋  ์˜ˆ์ •์ด๋ฉฐ, ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ณ  ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋ฒ ํƒ€ ๋ฒ„์ „์€ XNUMX๊ฐœ์›” ๋™์•ˆ ํ…Œ์ŠคํŠธ๋˜๋ฉฐ, ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€๊ฐ€ ๊ธˆ์ง€๋˜๊ณ  ๋ฒ„๊ทธ ์ˆ˜์ •์— ๋ชจ๋“  ์ฃผ์˜๊ฐ€ ์ง‘์ค‘๋ฉ๋‹ˆ๋‹ค. ์ถœ์‹œ ์ „ ๋งˆ์ง€๋ง‰ XNUMX๊ฐœ์›” ๋™์•ˆ ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋Š” ์ตœ์ข… ์•ˆ์ •ํ™” ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ์ถœ์‹œ ํ›„๋ณด ๋‹จ๊ณ„์— ์ง„์ž…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Python 3.10์˜ ์ƒˆ๋กœ์šด ์ถ”๊ฐ€ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์ž„์˜ Python ๊ฐ์ฒด์˜ ์ผ์น˜๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋ฉฐ, ๊ณ ๊ธ‰ ์ •์  ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ํŒจํ„ด ์ผ์น˜๋ฅผ ์œ„ํ•œ "์ผ์น˜" ๋ฐ "๋Œ€์†Œ๋ฌธ์ž" ์—ฐ์‚ฐ์ž๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์€ ์ง€์ •๋œ ํ‘œํ˜„์‹์˜ ๊ฒฐ๊ณผ๋ฅผ "case" ์—ฐ์‚ฐ์ž๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ธ”๋ก์— ๋‚˜์—ด๋œ ํŒจํ„ด ๋ชฉ๋ก๊ณผ ๋น„๊ตํ•˜๋Š” Scala, Rust ๋ฐ F#์—์„œ ์ œ๊ณต๋˜๋Š” "์ผ์น˜" ์—ฐ์‚ฐ์ž์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    def http_error(status): ์ผ์น˜ ์ƒํƒœ: ์ผ€์ด์Šค 400: โ€œ์ž˜๋ชป๋œ ์š”์ฒญโ€ ๋ฐ˜ํ™˜ ์ผ€์ด์Šค 401|403|404: โ€œํ—ˆ์šฉ๋˜์ง€ ์•Š์Œโ€ ๋ฐ˜ํ™˜ ์ผ€์ด์Šค 418: โ€œ๋‚˜๋Š” ์ฃผ์ „์ž์ž…๋‹ˆ๋‹คโ€ ๋ฐ˜ํ™˜ ์ผ€์ด์Šค _: โ€œ๋‹ค๋ฅธ ๊ฒƒโ€ ๋ฐ˜ํ™˜

    ๊ธฐ์กด ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด, ํŠœํ”Œ, ๋ชฉ๋ก ๋ฐ ์ž„์˜ ์‹œํ€€์Šค์˜ ์••์ถ•์„ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์ฒฉ๋œ ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•˜๊ณ , ํ…œํ”Œ๋ฆฟ์— ์ถ”๊ฐ€ "if" ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜๊ณ , ๋งˆ์Šคํฌ("[x, y, *rest]"), ํ‚ค/๊ฐ’ ๋งคํ•‘(์˜ˆ: {"bandwidth": b, "latency")์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€: l} ์‚ฌ์ „์—์„œ "๋Œ€์—ญํญ" ๋ฐ "๋Œ€๊ธฐ ์‹œ๊ฐ„" ๊ฐ’์„ ์ถ”์ถœํ•˜๊ณ , ํ•˜์œ„ ํ…œํ”Œ๋ฆฟ(":=" ์—ฐ์‚ฐ์ž)์„ ์ถ”์ถœํ•˜๊ณ , ํ…œํ”Œ๋ฆฟ์—์„œ ๋ช…๋ช…๋œ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค์—์„œ๋Š” "__match__()" ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์น˜ ๋™์ž‘์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("๋‹ค๋ฅธ ๊ณณ") case _: print("์ ์ด ์•„๋‹˜") match point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"๋Œ€๊ฐ์„ ์— ์—†์Œ") RED, GREEN, BLUE = 0, 1, 2 ์ƒ‰์ƒ ์ผ์น˜: case RED: print(โ€œ๋นจ๊ฐ„์ƒ‰์ด ๋ณด์—ฌ์š”!โ€) Case GREEN: print(โ€œ์ž”๋””๋Š” ๋…น์ƒ‰์ž…๋‹ˆ๋‹คโ€) Case BLUE: print(โ€œํŒŒ๋ž€์ƒ‰์ด ๋Š๊ปด์ ธ์š” :(โ€œ)

  • ์ด์ œ with ๋ฌธ์—์„œ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž ์ปฌ๋ ‰์…˜์˜ ์ •์˜๋ฅผ ์—ฌ๋Ÿฌ ์ค„๋กœ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ทธ๋ฃน์˜ ์ตœ์ข… ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž ๋’ค์— ์‰ผํ‘œ๋ฅผ ๋‚จ๊ธธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): ...
  • ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์˜ ๋‹ซํžˆ์ง€ ์•Š์€ ์ค‘๊ด„ํ˜ธ ๋ฐ ๋”ฐ์˜ดํ‘œ์™€ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜์˜ ์ฝ”๋“œ ์œ„์น˜ ๋ณด๊ณ ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ซํžˆ์ง€ ์•Š์€ ์ค‘๊ด„ํ˜ธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๊ตฌ๋ฌธ์—์„œ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•˜๋Š” ๋Œ€์‹  ์ด์ œ ํฌ์ธํ„ฐ๊ฐ€ ์—ฌ๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ๊ฐ•์กฐ ํ‘œ์‹œํ•˜๊ณ  ๋‹ซ๋Š” ๋ธ”๋ก์ด ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํŒŒ์ผ "example.py", ์ฒซ ๋ฒˆ์งธ ์ค„ ์˜ˆ์ƒ = {1:9, 1:18, 2:19, 2:27, 3:28, 3:29, 3:36, 4:37, ^SyntaxError: '{' ํ•œ๋ฒˆ๋„ ๋‹ซํžˆ์ง€ ์•Š์•˜์–ด

    ์ถ”๊ฐ€ ํŠน์ˆ˜ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€: ๋ธ”๋ก ์•ž๊ณผ ์‚ฌ์ „์— ":" ๊ธฐํ˜ธ ๋ˆ„๋ฝ, ๊ด„ํ˜ธ๋กœ ํŠœํ”Œ์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Œ, ๋ชฉ๋ก์—์„œ ์‰ผํ‘œ ๋ˆ„๋ฝ, "์ œ์™ธ" ๋ฐ "์ตœ์ข…" ์—†์ด "try" ๋ธ”๋ก ์ง€์ •, "= ์‚ฌ์šฉ ๋น„๊ต์—์„œ "= =" ๋Œ€์‹  f-๋ฌธ์ž์—ด์— *-ํ‘œํ˜„์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹œ์ž‘ ๋ถ€๋ถ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ „์ฒด ํ‘œํ˜„์ด ๊ฐ•์กฐ ํ‘œ์‹œ๋˜๋„๋ก ํ•˜๊ณ  ์ž˜๋ชป๋œ ๋“ค์—ฌ์“ฐ๊ธฐ์™€ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. >>> def foo(): ... if lel: ... x = 2 ํŒŒ์ผ " ", 3ํ–‰ x = 2 ^ IndentationError: 2ํ–‰์˜ 'if' ๋ฌธ ๋’ค์— ๋“ค์—ฌ์“ฐ๊ธฐ๋œ ๋ธ”๋ก์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ํ•จ์ˆ˜ ๋‚ด ์†์„ฑ๋ช…, ๋ณ€์ˆ˜๋ช… ์˜คํƒ€๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์˜ ๊ฒฝ์šฐ, ์˜ฌ๋ฐ”๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ถ”์ฒœ์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. >>>collections.namedtoplo ์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰): ํŒŒ์ผ ยซ ", ๋ผ์ธ 1, in AttributeError: 'collections' ๋ชจ๋“ˆ์— 'namedtoplo' ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ช…๋ช…๋œ ํŠœํ”Œ์„ ์˜๋ฏธํ•˜์‹œ๋‚˜์š”?

  • ๋””๋ฒ„๊น… ๋„๊ตฌ ๋ฐ ํ”„๋กœํŒŒ์ผ๋Ÿฌ์˜ ๊ฒฝ์šฐ ์‹คํ–‰๋œ ์ฝ”๋“œ์˜ ์ •ํ™•ํ•œ ์ค„ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ์ถ”์  ์ด๋ฒคํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • 'encoding=ยปutf-8โ€ณ' ์˜ต์…˜์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  TextIOWrapper ๋ฐ open() ์ฒ˜๋ฆฌ UTF-8 ์ธ์ฝ”๋”ฉ ํŒŒ์ผ๊ณผ ๊ด€๋ จ๋œ ์ž ์žฌ์  ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด sys.flags.warn_default_encoding ์„ค์ •์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ASCII ์ธ์ฝ”๋”ฉ์ด ์‚ฌ์šฉ๋จ). . ์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” 'encoding="locale"' ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ํ˜„์žฌ ๋กœ์ผ€์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ์ฝ”๋”ฉ์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ํ˜• ์ฃผ์„์„ ์ง€์ •ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํƒ€์ดํ•‘ ๋ชจ๋“ˆ์— ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์ž๊ฐ€ ์ถ”๊ฐ€๋˜์–ด "X | Y"๋ฅผ ์„ ํƒํ•˜์—ฌ ์œ ํ˜•(X ์œ ํ˜• ๋˜๋Š” Y ์œ ํ˜•) ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. def square(์ˆซ์ž: int | float) -> int | float: return number ** 2๋Š” ์ด์ „์— ์ง€์›๋œ ๊ตฌ์„ฑ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • Concatenate ์—ฐ์‚ฐ์ž์™€ ParamSpec ๋ณ€์ˆ˜๊ฐ€ ํƒ€์ดํ•‘ ๋ชจ๋“ˆ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Callable์„ ์‚ฌ์šฉํ•  ๋•Œ ์ •์  ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ดํ•‘ ๋ชจ๋“ˆ์€ ๋˜ํ•œ ์œ ํ˜• ๋ณดํ˜ธ ํ•จ์ˆ˜์— ์ฃผ์„์„ ๋‹ฌ๊ธฐ ์œ„ํ•ด ํŠน์ˆ˜ ๊ฐ’ TypeGuard๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์œ ํ˜• ๋ณ„์นญ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด TypeAlias๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. StrCache: TypeAlias โ€‹โ€‹โ€‹โ€‹= 'Cache[str]' # ์œ ํ˜• ๋ณ„์นญ
  • zip() ํ•จ์ˆ˜๋Š” ์„ ํƒ์  "strict" ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ์ง€์ •๋œ ๊ฒฝ์šฐ ๋ฐ˜๋ณต๋˜๋Š” ์ธ์ˆ˜์˜ ๊ธธ์ด๊ฐ€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) ์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰ ): โ€ฆ ValueError: zip() ์ธ์ˆ˜ 2๊ฐ€ ์ธ์ˆ˜ 1๋ณด๋‹ค ๊น๋‹ˆ๋‹ค.
  • iter() ๋ฐ next() ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋น„๋™๊ธฐ ์•„๋‚ ๋กœ๊ทธ ๊ตฌํ˜„์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋‚ด์žฅ ํ•จ์ˆ˜ aiter() ๋ฐ anext()๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ž‘์€ ๊ฐ์ฒด๋กœ ์ž‘์—…ํ•  ๋•Œ str(), bytes() ๋ฐ bytearray() ์ƒ์„ฑ์ž์˜ ์ž‘์—…์ด 30-40% ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Runpy ๋ชจ๋“ˆ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ์ž‘์—… ์ˆ˜๋ฅผ ์ค„์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ์ด 3๊ฐœ์—์„œ 1.4๊ฐœ๋กœ ์ค„์–ด๋“ค์–ด ์ด์ œ "python69 -m module_name" ๋ช…๋ น์ด ํ‰๊ท  51๋ฐฐ ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • LOAD_ATTR ๋ช…๋ น์€ ๊ฐœ๋ณ„ opcode์— ๋Œ€ํ•œ ์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜ ์†์„ฑ ์ž‘์—… ์†๋„๋ฅผ ์ตœ๋Œ€ 36%, ์Šฌ๋กฏ ์ž‘์—… ์†๋„๋ฅผ ์ตœ๋Œ€ 44% ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • "--enable-optimizations" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Python์„ ๋นŒ๋“œํ•  ๋•Œ ์ด์ œ "-fno-semantic-interposition" ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด "--enable-shared" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์†๋„๋ฅผ ์ตœ๋Œ€ 30%๊นŒ์ง€ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. " ์˜ต์…˜.
  • hashlib ๋ฐ ssl ๋ชจ๋“ˆ์€ OpenSSL 3.0.0์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ 1.1.1๋ณด๋‹ค ์ด์ „ ๋ฒ„์ „์˜ OpenSSL ์ง€์›์„ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ „ ๋ถ„๊ธฐ์—์„œ PEG(Parsing Expression Grammar) ํŒŒ์„œ๋กœ ๋Œ€์ฒด๋œ ์ด์ „ ํŒŒ์„œ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํฌ๋งทํ„ฐ ๋ชจ๋“ˆ์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํ”„ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ asyncio API์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฉฐ, ์ด์ „์— ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜๋˜ ๋ฉ”์†Œ๋“œ๋„ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Py_UNICODE* ๋ฌธ์ž์—ด์„ ์กฐ์ž‘ํ•˜๋Š” Py_UNICODE_str* ํ•จ์ˆ˜๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • distutils ๋ชจ๋“ˆ์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ Python 3.12์—์„œ ์ œ๊ฑฐ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. distutils ๋Œ€์‹  setuptools, Packaging, platform, Shutil, subprocess ๋ฐ sysconfig ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. PyUnicodeObject์˜ wstr ๊ตฌ์กฐ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ œ๊ฑฐ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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