-
Notifications
You must be signed in to change notification settings - Fork 0
Python Code Convention
Original Source : PEP-0008 ํ์ด์ฌ ์ฝ๋ ์คํ์ผ ๊ฐ์ด๋(Style Guide for Python Code) ํ๊ธ ๋ฒ์ญ
13๋ 8์ 1์ผ์ ๋ด์ฉ์ด ์ ๋ฐ์ดํธ ๋ ๊ฒ์ด ์์ด์ ์ถ๊ฐ๋ก ๋ฒ์ญํ ์์ ์ ๋๋ค. ์๋ฌธ๋ณด๊ธฐ
#PEP 8 -- Style Guide for Python Code
PEP: 8
Title: Style Guide for Python Code
Author: Guido van Rossum ,
Barry Warsaw
Status: Active
Type: Process
Content-Type: text/x-rst
Created: 05-Jul-2001
Post-History: 05-Jul-2001, 01-Aug-2013
๋ฒ์ญ์ผ: 13-May-2013
๋ฒ์ญ์: [email protected] (์ด์๊ฒธ), [email protected] (์ด๋์ค) ์ถ๊ฐ๋ฒ์ญ
- Introduction
- A Foolish Consistency is the Hobgoblin of Little Minds
-
Code lay-out
- Indentation
- Tabs or Spaces?
- Maximum Line Length
- Should a line break before or after a binary operator?
- Blank Lines
- Source File Encoding
- Imports
- String Quotes
- Whitespace in Expressions and Statements
- Pet Peeves
- Other Recommendations
- Comments
- Block Comments
- Inline Comments
- Documentation Strings
- Version Bookkeeping
- Naming Conventions
- Overriding Principle
- Descriptive: Naming Styles
- Prescriptive: Naming Conventions
- Names to Avoid
- Package and Module Names
- Class Names
- Exception Names
- Global Variable Names
- Function Names
- Function and method arguments
- Method Names and Instance Variables
- Constants
- Designing for inheritance
- Public and internal interfaces
- Programming Recommendations
- Function Annotations
- References
- Copyright
์ด ๋ฌธ์๋ ๊ธฐ๋ณธ ํ์ด์ฌ ๋ฐฐํฌํ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ํ์ด์ฌ ์ฝ๋ ์ ์ฝ๋ฉ ๊ท์น(coding convention)์ ์ค๋ช ํ๋ค. ํ์ด์ฌ์ C ๊ตฌํ์ ๋ํ ์คํ์ผ ๊ฐ์ด๋๋ผ์ธ์ ์ค๋ช ํ๋ PEP[1]๋ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
์ด ๋ฌธ์์ PEP 257(Docstring ๊ท์น)์ ๊ท๋๊ฐ ์์ฑํ ํ์ด์ฌ ์คํ์ผ ๊ฐ์ด ๋์ ๊ดํ ์งง์ ๊ธ์ ๋ฐํ์ ๋๊ณ ์์ผ๋ฉฐ, ํ์ ๋ฐฐ๋ฆฌ์ ์คํ์ผ ๊ฐ์ด๋[2] ์์ ์ผ๋ถ ๋ด์ฉ์ ์ถ๊ฐํ์๋ค.
์ด ์คํ์ผ ๊ฐ์ด๋๋ ์ด์ ์ ๊ท์น๋ค(Conventions) ์ด ์ธ์ด ์์ฒด์ ๋ณํ๋ก ์ธํด ๊ตฌ์์ ๊ฒ์ผ๋ก ๋๊ณ , ์ถ๊ฐ์ ์ธ ๊ท์น๋ค(Conventions) ์ด ํ์ธ๋๋ฉด์ ์ค๋ ์๊ฐ์ ๊ฑธ์ณ ๋ฐ์ ํ๋ค.
๋ง์ ํ๋ก์ ํธ๋ ๊ทธ๋ค๋ง์ ์ฝ๋ฉ ์คํ์ผ ๊ฐ์ด๋๋ผ์ธ์ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ ํ ์ถฉ๋์ด ์๋๋ผ๋ ํ๋ก์ ํธ๋ฅผ ์ํ ๊ฐ์ด๋๊ฐ ์ฐ์ ์ด ๋์ด์ผ ํ๋ค.
##A Foolish Consistency is the Hobgoblin of Little Minds
๋ฉ์ฒญํ๊ฒ ์ผ๊ด์ฑ์ ๊ณ ์งํ๋ ๊ฒ์ ์์ธ๋ฐฐ์ ๋ฐ์์ด๋ค
๊ท๋์ ์ค์ํ ํต์ฐฐ ์ค ํ๋๋ ํ๋ก๊ทธ๋จ ์ฝ๋๊ฐ ์์ฑ๋๋ ํ์๋ณด๋ค๋ ์ฌ๋ ์๊ฒ ์ฝํ๋ ํ์๊ฐ ๋ ๋ง๋ค๋ ์ฌ์ค์ด๋ค. ์ด ๋ฌธ์์์ ์ ๊ณตํ๋ ๊ฐ์ด๋๋ผ ์ธ์ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ณ ๋ค์ํ ํ์ด์ฌ ์ฝ๋์ ์ผ๊ด์ฑ์ ๋ถ์ฌํ ๊ณ ์ํ๋ ์๋๋ฅผ ๊ฐ๊ณ ์๋ค. PEP 20์์ ์ธ๊ธํ๋ฏ, "๊ฐ๋ ์ฑ์ ์ค์ํ๋ค."
์คํ์ผ ๊ฐ์ด๋๋ ์ผ๊ด์ฑ์ ๋ค๋ฃฌ๋ค. ์ด ์คํ์ผ ๊ฐ์ด๋์์ ๋ค๋ฃจ๋ ์ผ๊ด์ฑ ์ ์ค์ํ ๋ด์ฉ์ด๋ค. ํ๋ก์ ํธ์์์ ์ผ๊ด์ฑ์ ์ค์ํ์ง๋ง, ํน์ ํ ๋ชจ๋ ํน์ ํจ์ ๋ด์์์ ์ผ๊ด์ฑ์ ์ ๋ง ์ค์ํ๋ค.
ํ์ง๋ง ๋ฌด์๋ณด๋ค ์ค์ํ ๊ฒ์, ์ด๋ ์๊ฐ์ ์ผ๊ด์ฑ์ ๋ฒ๋ ค์ผ ํ ์ง ์์์ผ ํ๋ค๋ ๊ฒ์ด๋ค - ์ด๋ค ์๊ฐ์๋ ์คํ์ผ ๊ฐ์ด๋๋ฅผ ์ ์ฉํ์ง ์์ ์ ์๋ค. ์์ฌ์ด ๋ ๋ค๋ฉด ์ต์ ์ ๋คํด ํ๋จํด๋ผ. ๋ค๋ฅธ ์์ ๋ค์ ์ดํด๋ณด๊ณ ์ด๋ค ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ณด์ด๋์ง ๊ฒฐ์ ํ๋ผ. ๊ทธ๋ฆฌ๊ณ ์ฃผ์ ํ์ง ๋ง๊ณ ์ง๋ฌธํ๋ผ!
ํน์ ์ํฉ: ์ด PEP์ ์ดํํ๊ธฐ ์ํด์ ํธํ์ฑ์ ์์ง ๋ง๋ผ.
ํน์ ํ ๊ท์น์ ๋ฌด์ํด๋ ๊ด์ฐฎ์ ๋ค์์ ๊ฒฝ์ฐ๋ค์ ์ดํด๋ณด์:
-
๊ธฐ์กด์ ๊ท์น์ ๋ฐ๋ฅด๋ ์ฝ๋๋ฅผ ์ฝ๋๋ฐ ์ต์ํ ์ฌ๋์กฐ์ฐจ ํด๋น ๊ท์น์ ์ ์ฉํ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋๋น ์ง๋ค๊ณ ํ๋จํ ๊ฒฝ์ฐ.
-
(์๋ง ๊ธฐ์กด ๊ด์ต ๋๋ฌธ์) ์ผ๊ด์ฑ์ ์์ ๊ธฐ์กด ์ฝ๋๋ฅผ ๊ฐ์์์ด์ ์ฝ๋ ์ ์ผ๊ด์ฑ์ ํ๋ฆฝํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ. ์ด๋ ๊ธฐ์กด ์ฝ๋์ ์ง์ ๋ถํ ๋ถ๋ถ ๋ค์ (์ง์ ํ XP ์คํ์ผ๋ก) ์ ๋ฆฌํ ์ ์๋ ๊ธฐํ์ด๊ธฐ๋ ํ๋ค.
-
๋ฌธ์ ์ ์ฝ๋๊ฐ ๊ฐ์ด๋๋ผ์ธ์ ๋์ ์ ์ ํํ ํ๋ ๊ฒฝ์ฐ, ์ฌ๊ธฐ์๋ ๊ทธ ์ฝ๋๋ฅผ ์์ ํ ์ด์ ๊ฐ ์๋ค.
-
์ฝ๋๊ฐ ์ค๋๋ ๋ฒ์ ์ Python๊ณผ ํธํ์ฑ์ ์ ์งํ ํ์๊ฐ ์์ ๋, ์ด ์คํ์ผ ๊ฐ์ด๋๊ฐ ์ถ์ฒํ๋ ํน์ง๋ค์ ์ง์ํ์ง ์๋๋ค.
4๊ฐ์ ๊ณต๋ฐฑ์ ๋ค์ฌ์ฐ๊ธฐ์ ๋จ์๋ก ์ฌ์ฉํ๋ผ.
์ ๋ง ์ค๋๋ ์ฝ๋๋ฅผ ์๋ง์ผ๋ก ๋ง๋ค๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ๋ผ๋ฉด, 8๊ฐ์ ๊ณต๋ฐฑ์ ๊ณ์ ์ฌ์ฉํด๋ ๋๋ค.
์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ํ์ด์ฌ์ ๊ดํธ, ์ค๊ดํธ('{'), ๋๊ดํธ ('[')์ฒ๋ผ ์์์ ์ผ๋ก ์ฌ๋ฌ ์ค์ ๊ฒฐํฉํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฑฐ๋, ๋ค์ฌ์ฐ๊ธฐ (hanging indent)*๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋์ ์์๋ค์ ์์ง์ผ๋ก ์ ๋ ฌํด์ผ ํ๋ค. ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฌํญ์ ๊ณ ๋ คํด์ผ ํ๋ค; ์ฒซ ๋ฒ์งธ ์ค์ ์ธ์๊ฐ ์ค๋ฉด ์ ๋๋ฉฐ, ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ๊ณ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ํ์ด ๊ณ์๋๋ค๋ ์ฌ์ค ์ ๋ถ๋ช ํ ํ์ ํ ์ ์๋๋ก ์ฌ์ฉํด์ผ ํ๋ค.
์ข์ ์::
# ๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌํ๊ธฐ
foo = long_function_name(var_one, var_two,
var_three, var_four)
# ๋๋จธ์ง ์ฝ๋์์ ๊ตฌ๋ณ์ ์ํด ์ถ๊ฐ์ ์ธ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ค.
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
# Hanging indents ๊ฐ ํ ๋จ๊ณ ์ถ๊ฐ๋์ด์ผ ํ๋ค.
foo = long_function_name(
var_one, var_two,
var_three, var_four)๋์ ์::
# ์์ง ์ ๋ ฌ์ ํ์ง ์๋๋ค๋ฉด, ์ธ์๋ฅผ ์ฒซ ๋ฒ์งธ ์ค์ ์ฌ์ฉํ์ง ๋ง๋ผ.
foo = long_function_name(var_one, var_two,
var_three, var_four)
# ๋ค์ ํ๊ณผ ๊ตฌ๋ณ์ด ์ ๋๋ฏ๋ก ์ถ๊ฐ์ ์ธ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ํ์ํ๋ค.
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)์ ํ์ฌํญ::
# ๋ถ๊ฐ์ ์ธ ๋ค์ฌ์ฐ๊ธฐ๋ ๋ฑํ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
foo = long_function_name(
var_one, var_two,
var_three, var_four)if ์กฐ๊ฑด๋ฌธ์ด ์์ค์ด ๋ ์ ๋๋ก ๊ธธ๋, ํค์๋(if)๋ฅผ ์กฐํฉํ๋ ๊ฒ์ ๊ฐ์น๊ฐ ์๋ค. ๋ช์ค๋ก ์์ฑํด์ผํ๋ ๋ผ์ธ์ ์ํด์ ํ๊ฐ์ ๋น์นธ์ ๋ํ๊ณ , ๊ฐํ๋ฌธ์ ๋ํด์ ์์ฐ์ค๋ฌ์ด 4์๋ฆฌ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ๋ง๋ค์ด๋ผ. ์ด๊ฒ์ if๋ฌธ์์ ์ค์ฒฉ๋ ์ฝ๋๋ค์ ์๊ฐ์ ์ผ๋ก ์ถฉ๋๋๋ ๊ฒ์ ๋ณด์ธ๋ค. ์ด PEP๋ ์ค์ฒฉ๋์ด ์๋ ์กฐ๊ฑด๋ถ๋ผ์ธ์ ๋ํด์ ๋ถ๋ช ํ ์ ์ฅ์ ๊ฐ์ง๊ณ ์์ง ์๋ค. ๊ฐ ์ํฉ์ ๋ฐ๋ผ์ ์๊ฒฌ์ ๋ฐ์๋ค์ด๋, ์ ํ์ฌํญ์ด ์๋์ ์์:
# ์ถ๊ฐ์ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ์์ ๋.
if (this_is_one_thing and
that_is_another_thing):
do_something()# ์ด ์๋ํฐ์์ ๊ตฌ๋ณํ๋ ๊ฒ์ ๋ฐ๋ผ ์ฝ๋ฉํธ๋ฅผ ๋ฌ์์ค๋ค.
# ๊ตฌ๋ฌธ ๊ฐ์กฐ๋ฅผ ์ง์
if (this_is_one_thing and
that_is_another_thing):
# Since both conditions are true, we can frobnicate.
do_something()# ์กฐ๊ฑด๋ถ ๋ผ์ธ ์๋์ ์ถ๊ฐ๋ก ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ๋ ํ๋ค.
if (this_is_one_thing
and that_is_another_thing):
do_something()(๋ํ ์ด๊ณ ๋ซ๋ binary operatoer ๋ค์ ๋ํ ํ ์๋ฅผ ๋ฐ์์ ๋ณด์.)
์ฌ๋ฌ ์ค์ ๊ฑธ์น ๊ดํธ/์ค๊ดํธ/๋๊ดํธ๋ฅผ ๋ซ์ ๊ฒฝ์ฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ํญ๋ชฉ์ ๋ง์ถ์ด ๋ค์ ์ค์ ๋ซ๋ ํ์๋ฅผ ํ ์ ์๋ค. ๋ค์ ์ฝ๋๋ฅผ ๋ณด์:
my_list = [
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)ํน์ ์ด๋ ๊ฒ ์ฌ๋ฌ ์ค์ ๊ฑธ์น ์ฝ๋์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ์์น์ ๋ซ๋ ํ์๋ฅผ ๋ฃ ์ ์๋ ์๋ค. ๋ค์ ์ฝ๋๋ฅผ ๋ณด์:
my_list = [
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)์ ๋ ํญ ๋ฌธ์์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์์ด ์ฐ์ง ๋ง๋ผ.
ํ์ด์ฌ์์ ๋ค์ฌ์ฐ๊ธฐ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ์์ ๊ณต๋ฐฑ ๋ฌธ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด
๋ค. ๋ ๋ฒ์งธ๋ก ๋ง์ด ์ฐ์ด๋ ๋ฐฉ์์ ํญ ๋ฌธ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ํญ ๋ฌธ
์์ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์์ธ ์ฝ๋๋ ๋ฐ๋์ ๊ณต๋ฐฑ ๋ฌธ์๋ง ์ฌ์ฉํ ์ฝ๋๋ก ๋ณํํด
์ผ ํ๋ค. -t ์ต์
์ ์ฌ์ฉํ์ฌ ํ์ด์ฌ ๋ช
๋ น์ค ์ธํฐํ๋ฆฌํฐ๋ฅผ ํธ์ถํ๋ฉด
ํญ ๋ฌธ์์ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์์ธ ์ฝ๋๊ฐ ์์ ๊ฒฝ์ฐ ์ธํฐํ๋ฆฌํฐ๊ฐ ๊ฒฝ๊ณ ๋ฉ์์ง
๋ฅผ ํ์ํ๋ค. -tt ์ต์
์ ์ฌ์ฉํ๋ฉด ์ด ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ์๋ฌ ๋ฉ์์ง๋ก
ํ์๋๋ค. ์ ์ต์
๋ค์ ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถํ๋ค.
์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๊ฒฝ์ฐ ํญ ๋ฌธ์ ๋์ ๊ณต๋ฐฑ ๋ฌธ์๋ง์ ์ฌ์ฉํ๋๋ก ํ ์. ๋๋ถ๋ถ์ ํธ์ง๊ธฐ์์๋ ์ด๋ฌํ ์์ ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
ํ ํ์๋ ์ต๋ 79๊ธ์๊น์ง๋ง ๋ฃ๋๋ก ํ๋ค.
์ธ์์๋ ํ ํ์ 80๊ธ์๊น์ง๋ง ํ์ํ ์ ์๋ ์ฅ๋น๋ค์ด ์์ง ๋ง์ด ๋จ์ ์๋ค. ๊ฒ๋ค๊ฐ, ์ฐฝ ํ๋์ 80๊ธ์๋ง ํ์ํ๋๋ก ๊ฐ์ ํ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ฐฝ์ ์ด์ด์ ๋์ด๋๊ณ ์์ ํ ์ ์๋ค. 80๊ธ์ ์ ํ์ด ์๋ ์ฅ์น์์ ์๋ ์ค ๋ฐ๊ฟ(wrapping)์ด ์ผ์ด๋ ๊ฒฝ์ฐ ์ฝ๋์ ์๊ฐ์ ์ธ ๊ตฌ์กฐ๊ฐ ๋ง๊ฐ์ง๋ฉฐ, ์ด๋ ๊ฒ ๋๋ฉด ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ค์์ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฝ๋ ํ ํ์ ์ต๋ 79๊ธ์ ๋ก ์ ํํ๋๋ก ํ์. ํ ์คํธ๊ฐ ๊ธธ๊ฒ ์ด์ด์ง๋ ๊ฒฝ์ฐ(docstring ํน์ ์ฃผ์ ๋ฌธ)์๋ 72๊ธ์๋ก ์ ํํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
๊ธ์๊ฐ ๋ง์ ํ์ ์ค๋ฐ๊ฟ์ ์ ์ฉํ ๊ฒฝ์ฐ ์ข์ ๋ฐฉ๋ฒ์ ๊ดํธ, ์ค๊ดํธ, ๋๊ด ํธ ๋ฑ์ ๋ด๋ถ์ ์ฌ๋ฌ ํ์ ์ฝ๋๋ฅผ ์ ๋ ๊ฒ์ด๋ค. ํ์ด์ฌ์์ ์ด๋ค ์ฝ๋๋ ์์์ ์ผ๋ก ๊ณ์ ์ด์ด์ง๋ ๊ฒ์ผ๋ก ์ฒ๋ฆฌ๋๋ค. ๊ดํธ๋ฅผ ์ฌ์ฉํ ์ค๋ฐ๊ฟ์ ์ ์ฉํ์ฌ ๊ธด ์ฝ๋๋ฅผ ์ฌ๋ฌ ํ์ ์ฝ๋๋ก ๋ฐ๊ฟ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ์ค์ด ๊ณ์ ๋จ์ ๋ํ๋ด๋ ๋ฐฑ์ฌ๋์('') ๋ฌธ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ฌ์ฉํด์ผ ํ๋ค. ์ด ์ง ์ฐ์ฐ์์์ ์ค๋ฐ๊ฟ์ ํ ๊ฒฝ์ฐ ์ค๋ฐ๊ฟํ๊ธฐ ์ข์ ๊ณณ์ ์ฐ์ฐ์์ ๋ค์ ์์น์ด๋ค(์ด์ ์์น๊ฐ ์๋๋ค). ๋ช ๊ฐ์ง ์๋ฅผ ์ดํด๋ณด์::
class Rectangle(Blob):
def __init__(self, width, height,
color='black', emphasis=None, highlight=0):
if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong' or
highlight > 100):
raise ValueError("sorry, you lose")
if width == 0 and height == 0 and (color == 'red' or
emphasis is None):
raise ValueError("I don't think so -- values are %s, %s" %
(width, height))
Blob.__init__(self, width, height,
color, emphasis, highlight)
์ต์์ ์์ค ํจ์์ ํด๋์ค ์ ์๋ ๋ ์ค์ ๋์์ ๊ตฌ๋ถํ๋ค.
ํด๋์ค์ ๋ฉ์๋ ์ ์๋ ํ ์ค์ ๋์์ ๊ตฌ๋ถํ๋ค.
์๋ก ์ฐ๊ด์ด ์๋ ํจ์๋ค์ ๋ฌถ์์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋น ์ค์ ์ถ๊ฐ๋ก ์ฌ์ฉํ ์ ์๋ค. ๋ฐ๋๋ก ํ ์ค์ง๋ฆฌ ๊ตฌํ ์ฝ๋๊ฐ ๋ญ์ณ ์์ ๊ฒฝ์ฐ ์ด๋ฌํ ๋น ์ค์ ์๋ตํ ์๋ ์๋ค. (์: ์ผ๋ จ์ ๋ฏธ๊ตฌํ, ์์ ์ฝ๋)
ํจ์ ๋ด์์ ๋ ผ๋ฆฌ์ ์ธ ๋จ์๋ฅผ ๋๋ฌ๋ด๊ธฐ ์ํด ๋น ์ค์ ์ฌ์ฉํ๋ผ. (ํ์ง๋ง ์๊ปด์ ์ฌ์ฉํ์)
ํ์ด์ฌ์ ์ปจํธ๋กค-L(^L) ํผ ํผ๋ ๋ฌธ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ์ทจ๊ธํ๋ค; ๋ง์ ํ๋ก๊ทธ ๋จ์ด ์ด ๋ฌธ์๋ฅผ ํ์ด์ง ๊ตฌ๋ถ์๋ก ์ทจ๊ธํ๋ฉฐ, ํ์ผ ๋ด์์ ์๋ก ์ฐ๊ด์ฑ์ด ์๋ ๋จ๋ฝ์ ํ์ด์ง๋ณ๋ก ๊ตฌ๋ถํ๋๋ฐ ์ด ๋ฌธ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ํน์ ํธ์ง๊ธฐ๋ ์น ๊ธฐ๋ฐ์ ์ฝ๋ ๋ทฐ์ด๋ ์ปจํธ๋กค-L์ ํผ ํผ๋ ๋ฌธ์๋ก ์ธ์ํ์ง ์์ ์๋ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ํผ ํผ๋๋ฅผ ๋์ ํ๋ ๋ค๋ฅธ ๋ฌธ์๊ฐ ์ปจํธ๋กค-L ๋ฌธ์์ ์์น์ ํ์๋ ๊ฒ์ด๋ค.
ํ์ด์ฌ ๋ฐฐํฌ๋ณธ ๋ด์ ์ฝ๋๋ ํญ์ ASCII ํน์ Latin-1 ์ธ์ฝ๋ฉ(ISO-8859-1 ์ด๋ผ๊ณ ๋ ํ๋ค)์ ์ฌ์ฉํด์ผ ํ๋ค. ํ์ด์ฌ 3.0 ์ด์ ๋ฒ์ ์์๋ Latin-1 ๋์ UTF-8์ ๊ถ์ฅํ๋ค(PEP 3120์ ์ฐธ๊ณ ํ๋ผ).
ASCII ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ ํ์ผ์ ์ฝ๋ฉ ์ฟ ํค๋ฅผ ํฌํจํ๋ฉด ์ ๋๋ค. ์ฃผ์ ํน
์ docstring์์ Latin-1 ๋ฌธ์๋ก ๊ธฐ๋ก๋ ๋ฌธ์ ์์ฑ์์ ์ด๋ฆ์ ์ธ๊ธํ
ํ์๊ฐ ์์ ๋์๋ง Latin-1(ํน์ UTF-8)์ ์ฌ์ฉํ๋ค. ํน์, ๋น ASCII
๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ ์์์ ๋ฃ์ผ๋ ค๋ฉด \x, \u, \U ๋ฑ์ ์ด์ค์ผ์ดํ
๋ฌธ์๋ฅผ ์ฌ์ฉํ๊ธธ ๊ถํ๋ค.
ํ์ด์ฌ 3.0 ์ด์ ๋ฒ์ ์์๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ์ ์ฑ ์ ์ทจํ๊ณ ์๋ค(PEP 3131์ ์ฐธ๊ณ ): ํ์ด์ฌ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ASCII ๋ฌธ ์๋ง์ผ๋ก ๊ตฌ์ฑ๋ ์๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์ ํ ์์ด ๋จ์ด ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค(๋ง์ ๊ฒฝ์ฐ, ์ด์ด๋ผ๊ณ ํ ์ ์๋ ์ฝ์ด์ ๊ธฐ์ ์ฉ ์ด๊ฐ ์ฐ์ด๊ณค ํ๋ค). ๋ํ, ๋ฌธ์ ์์์ ์ฃผ์ ๋ํ ASCII๋ก ์์ฑ๋์ด์ผ ํ๋ค. ์ ์ผํ ์์ธ๋ (a) ๋น ASCII ๋ฌธ์๊ฐ ํฌํจ๋ ๊ธฐ๋ฅ์ ํ ์คํธํ๋ ํ ์คํธ ์ผ์ด์ค (b) ์์ฑ์์ ์ด๋ฆ. ๋ผํด ์ํ๋ฒณ ์ด์ธ์ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ์ด๋ฆ์ ๊ฐ์ง ์ ์ฑ์๋ ์์ ์ ์ด๋ฆ์ ๋ํ ๋ผํด์ด ์์ญ์ ๊ฐ์ด ์ ๊ณตํด์ผ ํ๋ค.
์ ์ธ๊ณ์ธ์ด ์ฐธ์ฌ ์ค์ธ ์คํ ์์ค ํ๋ก์ ํธ๋ค์ ์ด์ ๋น์ทํ ์ ์ฑ ์ ๋ฐ๋ฅด ๋๋ก ํ๊ณ ์๋ค.
-
์ํฌํธ๋ ๋ณดํต ํ์ผ๋ก ๊ตฌ๋ถ๋์ด์ผ ํ๋ค. ์๋ฅผ ๋ค๋ฉด::
์ข์: import os import sys
๋์จ: import sys, os
ํ์ง๋ง ์ด๋ ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ ๊ด์ฐฎ๋ค::
from subprocess import Popen, PIPE -
์ํฌํธ ๊ตฌ๋ฌธ์ ํญ์ ํ์ผ์ ์ต์๋จ์ ์์นํด์ผ ํ๋ฉฐ, ๋ชจ๋์ ์ฃผ์๋ฌธ๊ณผ docstring์ ๋ฐ๋ก ๋ค์, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋์ ์ ์ญ ๋ณ์์ ์์ ๋ฐ๋ก ์ด์ ์ ์์นํ๋ค.
์ํฌํธ ๊ตฌ๋ฌธ์ ๋ค์ ์์์ ๋ฐ๋ผ ๊ทธ๋ฃน๋ณ๋ก ๊ธฐ์ ํ๋ค::
- ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๊ด๋ จ์ด ์๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ก์ปฌ ์ดํ๋ฆฌ์ผ์ด์ /์์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ฐ ๊ทธ๋ฃน ์ฌ์ด์๋ ๋น ์ค ํ๋๋ฅผ ๋ฃ์ด์ผ ํ๋ค.
์ํฌํธ ๊ตฌ๋ฌธ ๋ค์์๋
__all__๋ช ์ธ๋ฅผ ๋ฃ๋๋ค. -
์ธ์ (relative) ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๋ถ ํจํค์ง๋ฅผ ์ํฌํธํ์ง ์๋๋ก ํ ๋ค. ํญ์ ์ ๋ ํจํค์ง ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ์ํฌํธ๋ฅผ ํ๋๋ก ํ์. ํ์ฌ ํ์ด์ฌ 2.5์ PEP 328์ด ์์ ํ ๊ตฌํ๋์ด ์์ผ๋, ๋ช ์์ ์ธ์ ์ํฌํธ (explicit relative import)๋ ์ฌ์ ํ ๊ถ์ฅ๋์ง ์๋๋ค; ์ ๋ ์ํฌํธ (์ญ์ฃผ: ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ์ํฌํธ)๋ ์ด์์ฑ์ด ๋์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ฝ๊ธฐ ๋ ์ฝ๋ค.
-
ํด๋์ค๋ฅผ ํฌํจํ๊ณ ์๋ ๋ชจ๋์์ ํด๋์ค๋ฅผ ์ํฌํธํ ๋, ๋ณดํต์ ๋ค์ ๊ณผ ๊ฐ์ด ๊ธฐ์ ํ๋ค::
from myclass import MyClass from foo.bar.yourclass import YourClass๋ง์ฝ ์ด๋ฆ์ด ์ด๋ฏธ ์ ์ธ๋ ๋ก์ปฌ ์ด๋ฆ๊ณผ ์ถฉ๋ํ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ์ ํ๋ค::
import myclass import foo.bar.yourclass๊ทธ๋ฐ ๋ค์ "myclass.MyClass", "foo.bar.yourclass.YourClass" ๊ฐ์ ์์ผ๋ก ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ํฉ์์๋ ์ฌ๋ถ์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค:
-
๊ดํธ, ์ค๊ดํธ, ๋๊ดํธ ๋ด๋ถ์ ์ฐ๊ฒฐ๋๋ ๋ถ๋ถ::
์ข์: spam(ham[1], {eggs: 2}) ๋์จ: spam( ham[ 1 ], { eggs: 2 } ) -
์ฝค๋ง, ์ธ๋ฏธ์ฝ๋ก , ์ฝ๋ก ์ ์ด์ ์์น::
์ข์: if x == 4: print x, y; x, y = y, x ๋์จ: if x == 4 : print x , y ; x , y = y , x -
ํจ์ ํธ์ถ์ ์ธ์ ๋ชฉ๋ก์ด ์์๋๋ ๊ดํธ์ ๋ฐ๋ก ์ด์ ์์น::
์ข์: spam(1) ๋์จ: spam (1) -
์ธ๋ฑ์ฑ ํน์ ์ฌ๋ผ์ด์ฑ์ด ์์๋๋ ๊ดํธ์ ๋ฐ๋ก ์ด์ ์์น::
์ข์: dict['key'] = list[index] ๋์จ: dict ['key'] = list [index] -
ํ ๋น(ํน์ ๊ธฐํ ๋ค๋ฅธ) ์ฐ์ฐ์ ์ฃผ๋ณ์ ํ ๊ฐ๋ฅผ ์ด๊ณผํ๋ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ::
์ข์::
x = 1 y = 2 long_variable = 3๋์จ::
x = 1 y = 2 long_variable = 3
- Pet Peeves. '์๊พธ ๋์ ๊ฑฐ์ฌ๋ฆฌ๋ ๊ฒ'์ ์ด๋ฅด๋ ๊ด์ฉ์ด.
-
ํญ์ ์ด์ง ์ฐ์ฐ์์ ์ฃผ์์๋ ํ ๊ฐ์ ๊ณต๋ฐฑ์ ๋ฃ๋๋ค: ํ ๋น (
=), ์ฆ๊ฐ ํ ๋น (+=,-=๋ฑ.), ๋น๊ต (==,<,>,!=,<>,<=,>=,in,not in,is,is not), ๋ถ์ธ ์ฐ์ฐ (and,or,not). -
์ฐ์ ์์๊ฐ ์๋ก ๋ค๋ฅธ ์ฐ์ฐ์๋ฅผ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ฐ์ ์์๊ฐ ๋ฎ์ ์ฐ์ฐ์ ์ฃผ์์ ๊ณต๋ฐฑ์ ๋ฃ์์ง ๊ณ ๋ คํด๋ณด์. ํ์ง๋ง ์ด ๊ฒฝ์ฐ์๋ ํ ๊ฐ ๋ฅผ ์ด๊ณผํ๋ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋๋ฉฐ, ์ด์ง ์ฐ์ฐ์์ ์์ชฝ์ ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ธฐ์ ํ๋๋ก ํ๋ค.
์ข์::
i = i + 1 submitted += 1 x = x*2 - 1 hypot2 = x*x + y*y c = (a+b) * (a-b)๋์จ::
i=i+1 submitted +=1 x = x * 2 - 1 hypot2 = x * x + y * y c = (a + b) * (a - b) -
ํค์๋ ์ธ์ ํน์ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ๊ฐ์ ๋ํ๋ด๋ ๊ฒฝ์ฐ์๋
=๊ธฐํธ ์ฃผ์์ ๊ณต๋ฐฑ์ ๋ฃ์ง ์๋๋ค.์ข์::
def complex(real, imag=0.0): return magic(r=real, i=imag)๋์จ::
def complex(real, imag = 0.0): return magic(r = real, i = imag) -
๋ณตํฉ ๊ตฌ๋ฌธ(Compound statements, ์ฌ๋ฌ ๊ตฌ๋ฌธ์ด ํ ์ค์ ์๋ ๊ฒ)์ ์ผ๋ฐ ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์๋๋ค.
์ข์::
if foo == 'blah': do_blah_thing() do_one() do_two() do_three()Rather not::
if foo == 'blah': do_blah_thing() do_one(); do_two(); do_three() -
์งง์ if/for/while ๊ตฌ๋ฌธ์ ํ ์ค์ ๋ฃ๋ ๊ฒ์ ๊ด์ฐฎ์ง๋ง, ์ฌ๋ฌ ์ ์ ๊ฐ ์ง ๊ตฌ๋ฌธ์ ์ ๋ ํ ์ค์ ๊ธฐ์ ํ์ง ์๋๋ค. ๋ํ ํ ์ค์ ์ฌ๋ฌ ๊ตฌ๋ฌธ์ ๊ธฐ์ ํ๋ฉด์ ์ค๋ฐ๊ฟ์ ํ๋ ๊ฒ๋ ํผํด์ผ ํ๋ค.
๊ทธ๋ฐ๋๋ก ๊ด์ฐฎ์::
if foo == 'blah': do_blah_thing() for x in lst: total += x while t < 10: t = delay()์ ๋ ์๋จ::
if foo == 'blah': do_blah_thing() else: do_non_blah_thing() try: something() finally: cleanup() do_one(); do_two(); do_three(long, argument, list, like, this) if foo == 'blah': one(); two(); three()
์ฝ๋์ ๋ด์ฉ๊ณผ ๋๋จ์ด์ง ์ฃผ์์ด ์๋ ๊ฒ๋ณด๋ค๋ ์์ ์ฃผ์์ด ์๋ ํธ์ด ๋ซ ๋ค. ์ฃผ์์ ํญ์ ์ฝ๋์ ๋ณ๊ฒฝ์ ๋ง์ถ์ด ์ต์ ์ ์ํ๋ฅผ ์ ์งํ๋๋ก ํ๋ค.
์ฃผ์์ ์๊ฒฐ๋ ๋ฌธ์ฅ ํํ๋ก ์์ฑํ๋ค. ํ ๊ตฌ์ ํน์ ๋ฌธ์ฅ์ผ๋ก ์ด๋ฃจ์ด์ง ์ฃผ์์ ์์ฑํ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ๋จ์ด๋ฅผ ๋๋ฌธ์๋ก ๊ธฐ์ ํ๋ค. ์์ธ์ ์ผ๋ก, ์ด ์ฒซ ๋ฒ์งธ ๋จ์ด๊ฐ ์๋ฌธ์๋ก ๋ ์๋ณ์์ผ ๊ฒฝ์ฐ์๋ ๊ทธ๋๋ก ์๋ฌธ์๋ก ๊ธฐ์ ํ๋ค(์ด๋ ๊ฒ ์๋ณ์๋ฅผ ์ฃผ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์ ๋ ์๋ฌธ์/๋๋ฌธ์๋ฅผ ๋ฐ ๊พธ์ง ๋ง์์ผ ํ๋ค).
์ฃผ์๋ฌธ์ด ์งง์ ๊ฒฝ์ฐ ๋ง์ง๋ง์ ์ค๋ ๋ง์นจํ๋ ์๋ตํ ์ ์๋ค. ๋ธ๋ก ํํ ์ ์ฃผ์๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์๊ฒฐ๋ ๋ฌธ์ฅ๋ค๋ก ๊ตฌ์ฑ๋ ๋ฌธ๋จ๋ค์ด๋ฉฐ, ๊ฐ๊ฐ์ ๋ฌธ ๋จ์ ๋ง์นจํ๋ก ๋๋์ผ ํ๋ค.
๋ฌธ์ฅ์ ๋ง์นจํ ๋ค์์๋ ๋ ๊ฐ์ ๊ณต๋ฐฑ์ ๋ฃ๋๋ค.
์๋ฌธ์ผ๋ก ์์ฑํ ๊ฒฝ์ฐ Strunk์ White*์ ์คํ์ผ์ ์ ์ฉํ๋ค.
๋น์์ด๊ถ ๊ตญ๊ฐ์ ํ์ด์ฌ ์ฝ๋์ ๊ฒฝ์ฐ, ๋ค๋ฅธ ๋๋ผ์ ๊ฐ๋ฐ์๊ฐ ํ์ฌ ๋น์ ์ด ์์ฑํ๋ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๋ ์ผ์ด ์ ํ ์์ผ๋ฆฌ๋ ํ์ ์ด ๋ค์ง ์๋๋ค๋ฉด, ๋ถ ๋ ์๋ฌธ์ผ๋ก ์ฃผ์์ ์์ฑํด์ฃผ๊ธธ ๋ฐ๋๋ค.
- ์์ด ์๋ฌธ์ ๊ดํ ์ฑ ์ธ 'The Elements of Style'์ ์ ์.
๋ธ๋ก ์ฃผ์๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ก ์ฃผ์๋ฌธ ์ดํ์ ๊ธฐ์ ๋๋ ์ผ๋ถ(ํน์ ์ ์ฒด)
์ฝ๋์ ๊ด๋ จ๋ ๋ด์ฉ์ด๋ฉฐ, ํด๋น ์ฝ๋์ ๊ฐ์ ์์ค๋งํผ ๋ค์ฌ์ฐ๊ฒ ๋๋ค. ๋ธ
๋ก ์ฃผ์๋ฌธ์ ๊ฐ ํ์ #๋ฌธ์์ ํ ๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ์์๋๋ค(์ฝ๋ฉํธ ๋ด
๋ถ์ ๋ค์ฌ์ฐ๊ธฐ๋ ํ
์คํธ๊ฐ ์์ ๊ฒฝ์ฐ๋ ์ ์ธ)
๋ธ๋ก ์ฃผ์๋ฌธ ๋ด๋ถ์ ๋ฌธ๋จ๋ค์ ํ ๊ฐ์ # ๋ฌธ์๋ฅผ ํฌํจํ ๋น ์ค์ ๋ฃ์ด
๊ตฌ๋ถํ๋ค.
์ธ๋ผ์ธ ์ฃผ์๋ฌธ์ ์๊ปด์ ์ฌ์ฉํ๋ค.
์ธ๋ผ์ธ ์ฃผ์๋ฌธ์ ์ฝ๋์ ๋์ผํ ํ์ ๊ธฐ์ ๋๋ ์ฃผ์๋ฌธ์ด๋ค. ์ธ๋ผ์ธ ์ฃผ์ ๋ฌธ์ ์ฝ๋์์ ์ต์ํ ๋ ๊ฐ ์ด์์ ๊ณต๋ฐฑ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์์ด์ผ ํ๋ค. ์ฃผ ์๋ฌธ์ # ๋ฌธ์์ ํ ๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ์์ํด์ผ ํ๋ค.
๋ปํ ๋ด์ฉ์ ์ธ๋ผ์ธ ์ฃผ์๋ฌธ์ ๋ถํ์ํ๋ฉฐ, ์ฌ์ค ๋ฐฉํด๋ฌผ์ด๋ผ ํ ์ ์๋ค. ์ด๋ฐ ์ฃผ์๋ฌธ์ ํผํ์::
x = x + 1 # x์ ์ฆ๊ฐ
ํ์ง๋ง ์ด๋ฐ ์ฃผ์๋ฌธ์ ์ ์ฉํ ๋๊ฐ ์๋ค::
x = x + 1 # ๊ฒฝ๊ณ๊ฐ์ ๋ํ ๋ณด์
์ข์ ๋ฌธ์ํ ๋ฌธ์์ด(Documentation String, docstring์ด๋ผ๊ณ ๋ ํ๋ค)์ ์์ฑํ๊ธฐ ์ํ ๊ท์น์ผ๋ก PEP 257๊ฐ ๋๋ฆฌ ์๋ ค์ ธ ์๋ค.
-
public์ผ๋ก ์ ์๋ ๋ชจ๋ ๋ชจ๋, ํจ์, ํด๋์ค, ๋ฉ์๋์ ๋ํด docstring ์ ์์ฑํ๋ค. public์ผ๋ก ์ ์๋์ง ์์ ๋ฉ์๋์๋ docstring์ ์์ฑ ํ ํ์๊ฐ ์๋ค. ํ์ง๋ง ํด๋น ๋ฉ์๋๊ฐ ๋ฌด์จ ์ผ์ ํ๋์ง ์ค๋ช ํ๋ ์ฃผ ์์ ๋ฌ์์ผ ํ๋ค. ์ด๋ฌํ ์ฃผ์์
def๊ฐ ์๋ ํ ๋ฐ๋ก ๋ค์ ํ์ ์์ฑํ๋ค. -
PEP 257์ ์ข์ docstring ์์ฑ ๊ท์น์ ๋ํด ๊ธฐ์ ํ๊ณ ์๋ค.
"""์์ญ์ด ๋๋๋ ๋ถ๋ถ์์๋ ํ ์ค ์ ์ฒด์"""๋ฌธ์๋ฅผ ๋ฃ๊ณ , ๋ฐ๋ก ์ ์ ํ ์ค์ ๋น ์ค๋ก ๋์ด์ผ ํ๋ค. ๋ค์ ์๋ฅผ ๋ณด์::"""Return a foobang Optional plotz says to frobnicate the bizbaz first. """ -
ํ ์ค ์ง๋ฆฌ docstring์ ๊ฒฝ์ฐ์๋ ๊ฐ์ ์ค์์
"""๋ฅผ ๋ซ์๋ ๋๋ค.
์์ค ํ์ผ์ Subversion, CVS, RCS ๋ฑ์ด ํฌํจ๋์ด ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฒ ์ ์ ๊ธฐ๋กํ๋ค::
__version__ = "$Revision$"
# $Source$
์ ๋ด์ฉ์ ๋ชจ๋์ docstring ๋ฐ๋ก ๋ค์์ ์์ผ ํ๋ฉฐ, ๊ทธ ์ดํ์๋ ํ๋ก๊ทธ ๋จ ์ฝ๋๊ฐ ์จ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํ์ ์์ ์๋์๋ ๋น ์ค ํ ๊ฐ์ฉ์ด ๋ค์ด๊ฐ ์ผ ํ๋ค.
ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ช ๋ช ๊ท์น์ ๋์กํ๊ธฐ ๋๋ฌธ์, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ๋ฒฝํ๊ฒ ์ผ๊ด์ฑ์ ์ ์ฉํ๋ ์ผ์ ์์ ๊ฒ์ด๋ค. ์ด์จ๋ , ํ์ฌ ๊ถ์ฅ๋๋ ๋ช ๋ช ๊ท์น์ ๋ํ ํ์ค์ ์ฌ๊ธฐ ๊ธฐ์ ํ๋ค. ์๋ก์ด ๋ชจ๋๊ณผ ํจํค์ง(์๋ ํํฐ ํ๋ ์์ํฌ๋ฅผ ํฌํจํ)๋ ์ด๋ค ํ์ค์ ๋ง์ถ์ด ์์ฑ๋์ด์ผ ํ์ง๋ง, ์ด๋ฏธ ๋ค ๋ฅธ ์คํ์ผ๋ก ์์ฑ๋์ด ์๋ ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ทธ ์์ฒด์ ์ผ๊ด์ฑ์ ์ ์ง ํ๋๋ก ํ๋ค.
์ธ์์๋ ๋ค์ํ ๋ช ๋ช ์คํ์ผ์ด ์กด์ฌํ๋ค. ๋ช ๋ช ์คํ์ผ์ ์ด ์คํ์ผ์ด ์ด๋ค ๋ชฉ์ ์ผ๋ก ์ฐ์ด๋์ง์๋ ๋ณ๊ฐ๋ก, ์ด๋ค ๋ช ๋ช ์คํ์ผ์ด ์ฐ์ด๊ณ ์๋์ง ์์๋ณด๋๋ฐ ๋์์ด ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ช ์คํ์ผ์ ํํ ๋ณผ ์ ์๋ค:
-
b(ํ ๊ฐ์ ์๋ฌธ์) -
B(ํ ๊ฐ์ ๋๋ฌธ์) -
lowercase -
lower_case_with_underscores -
UPPERCASE -
UPPER_CASE_WITH_UNDERSCORES -
CapitalizedWords(CapWords ํน์ CamelCase -- CamelCase๋ผ๋ ์ด ๋ฆ์ ๊ธ์๊ฐ ํญ ํ์ด๋์จ ๋ชจ์ ๋๋ฌธ์ ๋ถ์ ์ด๋ฆ์ด๋ค [3]_). ๊ฐํน StudlyCaps์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.์ฃผ์: CapWords์์ ์ฝ์ด๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ฝ์ด์ ๋ชจ๋ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ๊ธฐ์ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก HTTPServerError๊ฐ HttpServerError๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค ๋ซ๋ค.
-
mixedCase(CapWords์ ๋ค๋ฅธ ์ ์ ์ฒซ ๊ธ์๊ฐ ์๋ฌธ์๋ผ๋ ๊ฒ์ด๋ค) -
Capitalized_Words_With_Underscores(์ด๊ฑด ๋ณ๋ก๋ค!)
์๋ก ์ฐ๊ด์ด ์๋ ๋ช
์นญ๋ค์ ํตํฉํ๊ธฐ ์ํด ์งง์ ๊ณ ์ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ๋
์คํ์ผ ๋ํ ์กด์ฌํ๋ค. ํ์ด์ฌ์์๋ ์ด๋ฌํ ์คํ์ผ์ด ๋ง์ด ์ฐ์ด์ง ์๊ณ
์์ผ๋, ์ด ๋ฌธ์์ ์๊ฒฐ์ฑ์ ์ํด ์ธ๊ธํด๋๋ค. ์๋ฅผ ๋ค์ด os.stat()
ํจ์๋ ์ ํต์ ์ผ๋ก st_mode, st_size, st_mtime ๋ฑ์ ์ด๋ฆ์
๊ฐ์ง ํญ๋ชฉ์ด ๋ด๊ธด ํํ์ ๋ฐํํ๋ค. (์ด๋ค์ POSIX ์์คํ
ํธ์ถ ๊ตฌ์กฐ์ฒด
์ ํ๋์ ๊ด๋ จ์ด ์์์ ๊ฐ์กฐํ๊ธฐ ์ํด ์ฐ์ธ ๊ฒ์ด๋ค. POSIX์ ์ต์ํ ํ
๋ก๊ทธ๋๋จธ์๊ฒ๋ ๋์์ด ๋๋ค.)
X11 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ public ํจ์์ ๋ชจ๋ X๋ผ๋ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ํ์ด์ฌ์์ ์ด๋ฌํ ์คํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก ์ธ๋ฐ์๋ ์ง์ผ๋ก ๊ฐ์ฃผ๋๋ค. ์ด ํธ๋ฆฌ๋ทฐํธ์ ๋ฉ์๋์ ์ ๊ทผํ ๋์๋ ๊ฐ์ฒด๋ฅผ ์ ๋์ฌ๋ก ์ฌ์ฉํ๋ฉฐ, ํจ์์ ์ ๊ทผํ ๋์๋ ๋ชจ๋ ์ด๋ฆ์ ์ ๋์ฌ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ, ๋ค์๊ณผ ๊ฐ์ด ์ฒ์์ด๋ ๋์ ์ธ๋์ค์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ ํน๋ณํ ํ์์ด ์๋ค (์ด๋ค์ ๋ณดํต ๋์๋ฌธ์ ๊ด๋ จ ๊ท์น๊ณผ ํจ๊ป ์ฐ์ผ ์ ์๋ค):
-
_single_leading_underscore: "๋ด๋ถ์์ ์ฌ์ฉํ๋ค"๋ ๊ฒ์ ์๋ฏธ. ์๋ฅผ ๋ค๋ฉด,from M import *์ ์ธ๋์ค์ฝ์ด๋ก ์์ํ๋ ๊ฐ์ฒด๋ฅผ ์ํฌ ํธํ์ง ์๋๋ค. -
single_trailing_underscore_: ํ์ด์ฌ ํค์๋์์ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฐ์ธ๋ค. ์::Tkinter.Toplevel(master, class_='ClassName') -
__double_leading_underscore: ํด๋์ค ์ดํธ๋ฆฌ๋ทฐํธ์ ์ด๋ฆ์ ์ง์ผ ๋ฉด ๋ค์ ๋งน๊ธ๋ง(name mangling)์ด ๋ฐ์ํ๋ค (FooBar ํด๋์ค ๋ด๋ถ์__boo๋ฅผ ์ ์ธํ๋ฉด ์ด๋_FooBar__boo๊ฐ ๋๋ค; ์๋ ๋ด์ฉ์ ์ฐธ ๊ณ ํ๋ผ). -
__double_leading_and_trailing_underscore__: ์ฌ์ฉ์๊ฐ ๊ด๋ฆฌํ๋ ๋ค์์คํ์ด์ค ๋ด์ ์๋ "๋ง๋ฒ(magic)" ๊ฐ์ฒด.__init__,__import__,__file__๋ฑ์ด ๊ทธ ์์ด๋ค. ์ด๋ฌํ ์ด๋ฆ์ ์ ์ํด ์ ์ฌ์ฉํ๋ฉด ์ ๋๋ฉฐ, ์ด๋ฏธ ๋ฌธ์ํ๋์ด ์๋ ํญ๋ชฉ๋ค๋ง ์ฌ์ฉํด์ผ ํ๋ค.
ํผํด์ผ ํ ์ด๋ฆ
'l' (์๋ฌธ์ L), 'O' (๋๋ฌธ์ O), 'I' (๋๋ฌธ์ I) ํ ๊ธ์๋ฅผ ๋ณ์ ์ด๋ฆ์ผ
๋ก ์ฌ์ฉํ์ง ์๋๋ค.
ํน์ ํฐํธ์์๋ ์ด๋ค ๊ธ์๋ฅผ ์ซ์ ์ผ, ์๊ณผ ๊ตฌ๋ณํ ์ ์๋ค. 'l'์ ๊ตณ
์ด ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ์๋ ์ฐจ๋ผ๋ฆฌ 'L'์ ์ฌ์ฉํ๋๋ก ํ์.
ํจํค์ง์ ๋ชจ๋ ์ด๋ฆ
๋ชจ๋์ ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ์งง์ ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํ๋ค. ๋ชจ๋ ์ด๋ฆ์ ๊ฐ ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ์ธ๋์ค์ฝ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ํ์ด์ฌ ํจํค์ง ๋ํ ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ์งง์ ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํ๋ค. ํ์ง๋ง ํจํค์ง์ ๊ฒฝ์ฐ์ ๋ ์ธ๋์ค์ฝ์ด๋ฅผ ๊ฐ๊ธ์ ์ฌ์ฉํ์ง ์๋๋ค.
์์ ๊ฐ์ด ํ๋ ์ด์ ๋ ๋ชจ๋ ์ด๋ฆ์ด ํ์ผ ์ด๋ฆ์ ์ง์ ์ ์ผ๋ก ๋์๋๋ฉฐ, ํน์ ํ ํ์ผ ์์คํ ์์๋ ๋์๋ฌธ์๊ฐ ๋ฌด์๋๊ณ ๊ธด ์ด๋ฆ์ด ์๋ ค๋๊ฐ๊ธฐ ๋ ๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ชจ๋ ์ด๋ฆ์ ๊ฐ๊ธ์ ์งง๊ฒ ์ง๋ ๊ฒ์ ์ค์ํ ์ผ์ด๋ค -- ์ ๋์ค ์์คํ ์์๋ ๋ณ ๋ฌธ์ ๊ฐ ์๊ฒ ์ง๋ง ๊ตฌํ ๋งฅ, ์๋์ฐ, ๋์ค ๋ฑ์ผ๋ก ์ด ์ฝ๋๋ฅผ ์ฎ๊ฒผ์ ๋ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค.
C/C++๋ก ์์ฑ๋ ํ์ฅ ๋ชจ๋์ด ๊ณ ์์ค ์ธํฐํ์ด์ค(์๋ฅผ ๋ค์ด ์ข ๋ ๊ฐ์ฒด ์ง
ํฅ์ ์ธ)๋ฅผ ์ ๊ณตํ๋ ํ์ด์ฌ ๋ชจ๋์ ๊ฐ์ถ๊ณ ์์ ๊ฒฝ์ฐ, ํด๋น C/C++ ๋ชจ๋์
์์ ์ธ๋์ค์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ค (์๋ฅผ ๋ค๋ฉด _socket).
ํด๋์ค ์ด๋ฆ
ํด๋์ค ์ด๋ฆ์ ์์ธ ์์ด CapWords ๊ท์น์ ๋ฐ๋ฅธ๋ค. ๋ํ ๋ด๋ถ์์ ์ฌ์ฉ
ํ๋ ํด๋์ค๋ ์์ ์ธ๋์ค์ฝ์ด ๋ฌธ์ ํ๋๋ฅผ ๋ถ์ธ๋ค.
์์ธ ์ด๋ฆ
~~~~~~~~~
์์ธ๋ ํด๋์ค์ด๋ฏ๋ก ํด๋์ค ๋ช
๋ช
๊ท์น์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค. ํ์ง๋ง, ์
์ธ ์ด๋ฆ์ ๋์ "Error"๋ผ๋ ์ ๋ฏธ์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค (์์ธ๊ฐ ์ค์ ๋ก ์
๋ฌ์ผ ๊ฒฝ์ฐ์).
์ ์ญ ๋ณ์ ์ด๋ฆ
(ํด๋น ๋ณ์๋ ํ๋์ ๋ชจ๋ ๋ด๋ถ์์๋ง ์ฐ์ธ๋ค๊ณ ์๊ฐํ๋๋ก ํ์) ์ด ๊ท ์น์ ํจ์์๋ ๋์ผํ๊ฒ ์ ์ฉ๋๋ค.
from M import * ๊ตฌ๋ฌธ์ ํตํด ์ฌ์ฉํ ์ ์๋๋ก ์ค๊ณ๋ ๋ชจ๋๋ค์
__all__ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์ ์ญ์ ์ผ๋ก ๋
ธ์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ฑฐ๋,
์ ์ญ ๊ฐ์ฒด์ ์ธ๋์ค์ฝ์ด๋ฅผ ๋ถ์ด๋ ์์ ์ ๊ท์น์ ์ฌ์ฉํด์ผ ํ๋ค (์ด๋ค ์
์ญ ๊ฐ์ฒด๋ฅผ "๋น public ๋ชจ๋"๋ก ํ์ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค).
ํจ์ ์ด๋ฆ
ํจ์ ์ด๋ฆ์ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ ์ํด ๊ฐ ๋จ์ด๋ ์ธ๋์ค
์ฝ์ด๋ก ๊ตฌ๋ถํ๋๋ก ํ๋ค.
mixedCase ์คํ์ผ์ ๊ฒฝ์ฐ, ์ด๋ฏธ mixedCase ์คํ์ผ์ ๋ฐ๋ฅด๊ณ ์๋ ๋ชจ๋
(์: threading.py)์์๋ง ํ์ ํธํ์ฑ ์ ์ง๋ฅผ ์ํด ํ์ฉ๋๋ค.
ํจ์/๋ฉ์๋ ์ธ์
์ธ์คํด์ค ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ธ์์๋ self๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
ํด๋์ค ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ธ์์๋ cls๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
ํจ์ ์ธ์์ ์ด๋ฆ์ด ์์ฝ์ด์ ์ถฉ๋ํ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ธ์ ์ด๋ฆ์ ๋์
์ธ๋์ค์ฝ์ด ๋ฌธ์ ํ๋๋ฅผ ์ถ๊ฐํด ์ฃผ๋ ๊ฒ์ด ์ฝ์ด๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ง์ถค๋ฒ์
์ด๊ธฐ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค ๋ซ๋ค. ๊ทธ๋ฌ๋ฏ๋ก class_๋ฅผ ์ฌ์ฉํ๋
๊ฒ์ด clss๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ซ๋ค. (์๋ง ๋ ๋์ ๋ฐฉ๋ฒ์ ๋์์ด๋ฅผ
์ฌ์ฉํด์ ์ด๋ฆ ์ถฉ๋์ ํผํ๋ ๋ฐฉ๋ฒ์ผ ๊ฒ์ด๋ค.)
๋ฉ์๋ ์ด๋ฆ๊ณผ ์ธ์คํด์ค ๋ณ์
๋ค์ ํจ์ ๋ช
๋ช
๊ท์น์ ์ฌ์ฉํ๋ค: ์๋ฌธ์๋ก ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ฐ ๋จ์ด
๋ ํ์์ ๋ฐ๋ผ ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ ์ํด ์ธ๋์ค์ฝ์ด๋ก ๊ตฌ๋ถํ๋ค.
๋น public ๋ฉ์๋/์ธ์คํด์ค ๋ณ์์ ๊ฒฝ์ฐ ์์ ์ธ๋์ค์ฝ์ด ๋ฌธ์๋ฅผ ํ๋ ๋ถ
์ธ๋ค.
์๋ธํด๋์ค์์ ์ด๋ฆ ์ถฉ๋์ ํผํ๊ธฐ ์ํด, ์์ ๋ ๊ฐ์ ์ธ๋์ค์ฝ์ด๋ฅผ ๋ถ
์ฌ ํ์ด์ฌ์ ๋ค์ ๋งน๊ธ๋ง ๊ท์น์ ๋ฐ๋ฅธ๋ค.
ํ์ด์ฌ์ ์ด๋ฌํ ์ด๋ฆ์ ํด๋์ค ์ด๋ฆ์ ๊ฒฐํฉํ์ฌ ๋ค์ ๋งน๊ธ๋ง์ ์ํํ๋ค
: ๋ง์ฝ Foo ํด๋์ค๊ฐ ``__a``๋ผ๋ ์ด๋ฆ์ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๊ฐ๊ณ ์๋ค๋ฉด, ์ด
์ดํธ๋ฆฌ๋ทฐํธ๋ ``Foo.__a``๊ฐ์ ์ฝ๋๋ก ์ ๊ทผํ ์ ์๋ค. (์ง์ํ ์ฌ์ฉ์
๋ผ๋ฉด ``Foo._Foo__a``๋ฅผ ํธ์ถํ์ฌ ์ด ์ดํธ๋ฆฌ๋ทฐํธ์ ์ ๊ทผํ ์ ์๋ค.)
์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ ์ธ๋์ค์ฝ์ด ๋ฌธ์๋ฅผ ์์ ๋ถ์ด๋ ๋ฐฉ๋ฒ์ ์์์ด ์ผ์ด
๋๋๋ก ์ค๊ณ๋ ํด๋์ค ๋ด์ ์ดํธ๋ฆฌ๋ทฐํธ์์ ์ผ์ด๋๋ ์ด๋ฆ ์ถฉ๋์ ํผํ
๋์๋ง ์ฌ์ฉํด์ผ ํ๋ค.
์ฃผ์: __names์ ์ฌ์ฉ์ ๋ํด์๋ ๋ค์ ๋
ผ๋์ด ์๋ค (์๋ ๋ด์ฉ์ ์ฐธ์กฐ).
์์
~~~~
์์๋ ๋ณดํต ๋ชจ๋ ์์ค์์ ์ ์๋๋ฉฐ, ๋๋ฌธ์ ๋ฐ ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ
์ธ๋์ค์ฝ์ด ๋ฌธ์๋ก ๊ตฌ์ฑ๋๋ค. ``MAX_OVERFLOW``์ ``TOTAL`` ๋ฑ์ ์๋ฅผ
๋ค ์ ์๋ค.
์์์ ์ํ ์ค๊ณ
~~~~~~~~~~~~~~~~
ํญ์ ํด๋์ค์ ๋ฉ์๋์ ์ธ์คํด์ค ๋ณ์(๋์ ํฉ์ณ "์ดํธ๋ฆฌ๋ทฐํธ")๊ฐ
public์ธ์ง public์ด ์๋์ง๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ค. ๊ฒฐ์ ์ด ์ด๋ ค์ธ ๊ฒฝ์ฐ ๋น
public์ผ๋ก ์ ์ํ๋ค. ๋น public ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ public์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ
์ด ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ณด๋ค ์ฝ๋ค.
public ์ดํธ๋ฆฌ๋ทฐํธ๋ ๋น์ ์ด ๋ง๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ค์ด ์ค
์ ๋ก ์ ๊ทผํ๊ฒ ๋ ์ดํธ๋ฆฌ๋ทฐํธ๋ก, ํ์ ํธํ์ฑ ์ ์ง๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
๋น public ์ดํธ๋ฆฌ๋ทฐํธ๋ ์๋ ํํฐ๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ์ค๊ณ๋ ์ดํธ๋ฆฌ๋ทฐ
ํธ์ด๋ค. ๋น public ์ดํธ๋ฆฌ๋ทฐํธ๋ ์ดํ์ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ค.
์ฌ๊ธฐ์๋ "private"์ด๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. ์ฌ์ค ํ์ด์ฌ์๋
private ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค (ํ์ ์ด์์ ์์
์ ๋์
ํ์ง ์์ ๊ฒฝ์ฐ์ ๊ทธ๋ ๋ค๋ ์ด์ผ๊ธฐ์ด๋ค).
์ดํธ๋ฆฌ๋ทฐํธ์ ๋ ๋ค๋ฅธ ํ ๊ฐ์ง ์ ํ์ผ๋ก "์๋ธํด๋์ค API"์ ์ผ๋ถ๋ฅผ ๋ค
์ ์๋ค (๋ค๋ฅธ ์ธ์ด์์๋ "protected"๋ผ๊ณ ํํํ๊ณค ํ๋ค). ํด๋์ค๋ค
์ค ์ผ๋ถ๋ ์์์ ์ํ ๋ถ๋ชจ ํด๋์ค๋ก์ ์ค๊ณ๋๋ฉฐ, ํด๋์ค์ ํ๋์ ๊ตฌ์ฑ
ํ๋ ์์๋ค์ ํ์ฅํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ฌํ ํด๋์ค๋ฅผ ์ค๊ณํ ๋
์ด๋ค ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ public์ด ๋ ์ง, ์๋ธํด๋์ค API์ ์ผ๋ถ๊ฐ ๋ ์ง, ๊ธฐ๋ณธ
ํด๋์ค์์๋ง ์ฐ์ผ์ง์ ๋ํด ๋ช
ํํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋๋ฐ ์ ๊ฒฝ์จ์ผ ํ๋ค.
ํ์ด์ฌ์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ด๋๋ผ์ธ์ ๋ง์์ ์๊ธฐ๋๋ก ํ์:
- public ์ดํธ๋ฆฌ๋ทฐํธ๋ ์ธ๋์ค์ฝ์ด ๋ฌธ์๋ก ์์ํด์ ์ ๋๋ค.
- public ์ดํธ๋ฆฌ๋ทฐํธ์ ์ด๋ฆ์ด ์์ฝ์ด์ ์ถฉ๋ํ ๊ฒฝ์ฐ, ์ดํธ๋ฆฌ๋ทฐํธ ์ด๋ฆ์
๋์ ์ธ๋์ค์ฝ์ด ๋ฌธ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ค. ์ฝ์ด๋ ํ๋ฆฐ ๋ง์ถค๋ฒ์ ์ฌ์ฉํ
๋ ๋์ ์ด ๋ฐฉ์์ ๊ถ์ฅํ๋ค. (์ด ๊ท์น๊ณผ๋ ์๊ด ์์ด, 'cls'๋ ๋ณ์
ํน์ ์ธ์์์ ํด๋์ค๋ฅผ ๋ํ๋ด๋๋ฐ ์ ์ ํ ๋จ์ด์ด๋ฉฐ, ํนํ ํด๋์ค ๋ฉ
์๋์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ฐ์ธ๋ค.)
์ฃผ์ 1: ์์์ ์ค๋ช
ํ ํด๋์ค ๋ฉ์๋์ ์ธ์ ์ด๋ฆ์ ๋ํ ๊ถ์ฅ์ฌํญ์
์ดํด๋ณด์.
- ๊ฐ๋จํ public ๋ฐ์ดํฐ ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฒฝ์ฐ, ๋ณต์กํ ์ ๊ทผ์/๋ณ๊ฒฝ์ ๋ฉ์
๋ ๋์ ์ดํธ๋ฆฌ๋ทฐํธ ์ด๋ฆ์ ์ง์ ๋
ธ์ถํ๋ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ข๋ค. ํ์ด์ฌ
์ ํฅํ ๊ฐ์ ์ ๋ํ์ฌ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ, ๊ธฐ๋ฅ์ด ๋์ด๋ ์
๋ก ๊ฐ๋จํ ๋ฐ์ดํฐ ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์์์ผ ํ๋ค. ์ด๋ฐ
๊ฒฝ์ฐ, ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๊ธฐ๋ฅ ๊ตฌํ์ ์จ๊ธฐ๊ณ ์ฌ์ฉ์๋ ๊ฐ๋จํ
๋ฐ์ดํฐ ์ดํธ๋ฆฌ๋ทฐํธ์ ์ ๊ทผํ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
์ฃผ์ 1: ํ๋กํผํฐ๋ ์๋ก์ด ์คํ์ผ์ ํด๋์ค์์๋ง ๋์ํ๋ค.
์ฃผ์ 2: ๊ธฐ๋ฅ์ ๋์์ ์์ด ๋ถ์์ฉ์ด ์๊ธฐ์ง ์๋๋ก ์ฃผ์ํ๋ค. ํ์ง๋ง
์บ์์ฒ๋ผ ๋ถ์์ฉ์ด ์ฃผ ๊ธฐ๋ฅ์ธ ๊ฒฝ์ฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ด์ฐฎ๋ค.
์ฃผ์ 3: ํฐ ๊ณ์ฐ๋์ ์๊ตฌํ๋ ํ๋กํผํฐ์ ์ฌ์ฉ์ ํผํ๋ค; ํธ์ถ์๋ ์ด
ํธ๋ฆฌ๋ทฐํธ์ ๋ํ ์ ๊ทผ ๋น์ฉ์ด (๋น๊ต์ ) ์ ๋ค๊ณ ๊ธฐ๋ํ๊ฒ ๋๋ค.
- ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋์์ธํ๋ฉด์ ํน์ ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์์๋์ง ์๋๋ก ํ๊ณ
์ถ๋ค๋ฉด, ์ด๋ค ์ดํธ๋ฆฌ๋ทฐํธ์ ์ด๋ฆ ์์ ๋ ๊ฐ์ ์ธ๋์ค์ฝ์ด๋ฅผ ๋ถ์ด๋ ๊ฒ
์ ๊ณ ๋ คํด๋ณด์. ์ด๋ ๊ฒ ํ๋ฉด ํ์ด์ฌ์ ๋ค์ ๋งน๊ธ๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฒ
๋๋ฉฐ, ์ดํธ๋ฆฌ๋ทฐํธ ์ด๋ฆ ์์ ํด๋์ค์ ์ด๋ฆ์ด ๋งน๊ธ๋ง๋๋ค. ์ด ๊ธฐ๋ฅ์
์์ ํด๋์ค๊ฐ ์ฐ์ฐํ ๋์ผํ ์ดํธ๋ฆฌ๋ทฐํธ ์ด๋ฆ์ ์ฌ์ฉํ์ ๋ ์ดํธ๋ฆฌ๋ทฐ
ํธ ์ด๋ฆ ์ถฉ๋์ด ์ผ์ด๋๋ ๊ฒ์ ๋ง์์ค๋ค.
์ฃผ์ 1: ๋งน๊ธ๋ง์๋ ๋จ์ํ ํด๋์ค ์ด๋ฆ๋ง์ด ์ฐ์ธ๋ค๋ ๊ฒ์ ์ฃผ์ํ์.
๊ทธ๋ฌ๋ฏ๋ก ๋ง์ฝ ์์ ํด๋์ค๊ฐ ๋์ผํ ํด๋์ค ์ด๋ฆ๊ณผ ์ดํธ๋ฆฌ๋ทฐํธ ์ด๋ฆ์
์ฌ์ฉํ๋ค๋ฉด, ์ฌ์ ํ ์ด๋ฆ ์ถฉ๋์ด ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
์ฃผ์ 2: ์ด๋ฆ ๋งน๊ธ๋ง์ ์ฌ์ฉํ๋ฉด ๋๋ฒ๊น
๊ณผ ``__getattr__()`` ๋ฑ์ ์
์
์ด ์กฐ๊ธ ๋ถํธํด์ง๋ค. ํ์ง๋ง, ๋ค์ ๋งน๊ธ๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์๋ ์ด๋ฏธ
์ ๋ฆฌ๊ฐ ์ ๋์ด ์์ผ๋ฏ๋ก ์ง์ ํ์ํ ์์
์ ์ฒ๋ฆฌํ๋ ๊ฒ๋ ์ด๋ ต์ง ์
๋ค.
์ฃผ์ 3: ๋ชจ๋ ์ด๊ฐ ๋ค์ ๋งน๊ธ๋ง์ ์ข์ํ๋ ๊ฒ์ ์๋๋ค. ์ฐ๋ฐ์ ์ธ ์ด
๋ฆ ์ถฉ๋์ ๋ฐฉ์ง์, ํด๋น ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ์ฌ๋์ ํธ์์ฑ ์ฌ์ด์์
ํํ์ฑ์ ์ฐพ๋๋ก ํ์.
ํ๋ก๊ทธ๋๋ฐ ๊ถ์ฅ์ฌํญ
===================
- ํ์ด์ฌ ์ฝ๋๋ ๋ค๋ฅธ ํ์ด์ฌ ๊ตฌํ (PyPy, Jython, IronPython, Cython,
Psyco ๋ฑ)์์
์๋ฅผ ๋ค๋ฉด, CPython์ ๊ฐ๋จํ ๋ฌธ์์ด ๊ฒฐํฉ(``a += b``, ``a = a + b``
๊ฐ์ ํํ์)์ ํจ์จ์ ์ผ๋ก ๊ตฌํ๋์ด ์๋ค. ํ์ง๋ง Jython์์๋ ์ ๊ตฌ
๋ฌธ์ด ๋ ๋๋ฆฌ๊ฒ ์คํ๋ ์ ์์ผ๋ฏ๋ก, CPython์ ๊ตฌํ์ ์ง๋์น๊ฒ ์์กด
ํด์ ์ ๋๋ค. ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ๋ถ๋ถ์์ ๋ฌธ์์ด ๊ฒฐํฉ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ
ํ ๊ฒฝ์ฐ ``''.join()`` ๋ฉ์๋๋ฅผ ๋์ ์ฌ์ฉํด์ผ ํ๋ค. ์ด ๋ฉ์๋๋ ๋ค
์ํ ํ์ด์ฌ ๊ตฌํ์ฒด์์ ๋ฌธ์์ด ๊ฒฐํฉ์ด ์ ํ์ ์คํ ์๊ฐ์ ๊ฐ๋๋ก ๋ณด
์ฅํด ์ค๋ค.
- None๊ณผ ๊ฐ์ ์ฑ๊ธํด ๊ฐ์ฒด์ ๋ํด ๋น๊ต ์ฐ์ฐ์ ํ ๋์๋ ํญ์ ``is``
ํน์ ``is not`` ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋๋ฑ ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ์
๋๋ค.
๋ํ, ``if x is not None``์ ์๋ฏธ๋ก ``if x``๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ฃผ์ํด์ผ
ํ๋ค -- ๊ธฐ๋ณธ๊ฐ์ด None์ธ ๋ณ์๋ ์ธ์์ ๋ฌด์ธ๊ฐ ๊ฐ์ด ์ง์ ๋์๋์ง๋ฅผ
๊ฒ์ฌํ ๊ฒฝ์ฐ๋ฅผ ์๋ก ๋ค ์ ์๋ค. ์ด ๊ฐ์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ํ์
(์ปจํ
์ด๋์ ๊ฒฝ์ฐ)์ผ ์๋ ์์ผ๋ฉฐ, ๊ทธ๋ด ๊ฒฝ์ฐ boolean์ผ๋ก ํด์๋์ด
false๋ฅผ ๋ฐํํ ์ ์๋ค.
- ํฅ์๋ ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ ๋ ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ ๊ฒฝ์ฐ, ํน์ ํ ๋น
๊ต ์ฐ์ฐ๋ง ๊ตฌํํ๋ ๊ฒ ๋ณด๋ค๋ ์ฌ์ฏ ๊ฐ์ ์ฐ์ฐ(``__eq__``,
``__ne__``, ``__lt__``, ``__le__``, ``__gt__``, ``__ge__``)์ ๋ชจ๋
๊ตฌํํ๋ ๊ฒ์ด ์ต์ ์ ๋ฐฉ๋ฒ์ด๋ค.
``functools.total_ordering()`` ๋ฐ์ฝ๋ ์ดํฐ๋ ๊ตฌํ๋์ง ์์ ๋น๊ต ์ฐ
์ฐ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ฏ๋ก, ์ด๋ฌํ ๊ตฌํ์
๋ค์ด๊ฐ๋ ๋
ธ๋ ฅ์ ์ต์ํํ ์ ์๋ค.
PEP 207์ ํ์ด์ฌ์ด ๊ฐ์ ํ๊ณ ์๋ ์ฌ๊ท์ ๊ท์น์ ๋ํด ์ค๋ช
ํ๊ณ ์๋ค.
์ด์ ๋ฐ๋ฅด๋ฉด, ์ธํฐํ๋ฆฌํฐ๋ ``y > x``๋ฅผ ``x < y``์ผ๋ก, ``y >= x``๋ฅผ
``x <= y``๋ผ๋ ์ฝ๋๋ก ๋ณํํด์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ``x == y``์
``x != y``์ ๊ฒฝ์ฐ ๋ ์ธ์์ ์์น๋ฅผ ์๋ก ๋ฐ๊ฟ ์๋ ์๋ค.
``sort()``์ ``min()`` ๋ช
๋ น์ ``<`` ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ``max()``
ํจ์๋ ``>`` ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค. ์ด์จ๋ , ์ฌ์ฏ ๊ฐ์ ์ฐ์ฐ์ ๋ชจ๋ ๊ตฌ
ํํ์ฌ ๋ค๋ฅธ ๋งฅ๋ฝ์์ ํผ๋์ด ์ผ์ด๋์ง ์๋๋ก ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค.
- ํด๋์ค ๊ธฐ๋ฐ์ ์์ธ๋ฅผ ์ฌ์ฉํ๋ค.
์์ผ๋ก ์์ฑ๋๋ ์ฝ๋์์๋ ๋ฌธ์์ด ์์ธ๊ฐ ๊ธ์ง๋๋ฉฐ, ๋ฌธ์์ด ์์ธ ๊ธฐ
๋ฅ์ ํ์ด์ฌ 2.6์์ ์ ๊ฑฐ๋์๋ค.
๋ชจ๋, ํจํค์ง๋ ์์ ๋ง์ ํน์ ๋๋ฉ์ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์์ธ ํด๋์ค๋ฅผ
์ ์ํด์ผ ํ๋ค. ์ด๋ค ์์ธ ํด๋์ค๋ ํ์ด์ฌ์ ๋ด์ฅ๋ Exception ํด๋์ค
๋ฅผ ์์ํ๋ค. ํด๋์ค docstring์ ํญ์ ํฌํจ์์ผ์ผ ํ๋ค. ์::
class MessageError(Exception):
"""Base class for errors in the email package."""
์์ธ์๋ ํด๋์ค ์ด๋ฆ ๊ท์น์ด ์ ์ฉ๋์ง๋ง, ์ด ์์ธ ํด๋์ค๊ฐ ์๋ฌ๋ฅผ ๋
ํ๋ผ ๊ฒฝ์ฐ์๋ "Error"๋ฅผ ์ ๋ฏธ์ฌ๋ก ๋ถ์ฌ์ผ ํ๋ค. ์๋ฌ๊ฐ ์๋ ์์ธ์
๊ฒฝ์ฐ์๋ ํน๋ณํ ์ ๋ฏธ์ฌ๋ฅผ ๋ถ์ผ ํ์๊ฐ ์๋ค.
- ์์ธ๋ฅผ ๋ฐ์์ํค๋ ค๋ฉด `raise ValueError('message')`` ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ค
. ์์ ์ ``raise ValueError, 'message'`` ๊ตฌ๋ฌธ์ ๋ ์ด์ ์ฌ์ฉํ์ง
์๋๋ค.
๊ดํธ๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ๋ฌธ์ ๊ถ์ฅํ๋ ์ด์ ๋, ์์ธ์ ์ธ์๊ฐ ๊ธด ๋ฌธ์์ด์ด
๊ฑฐ๋ ๋ฌธ์์ด ํ์ํ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ์ฌ๋ฌ ์ค์ ์ด์ด์ ์์ฑํ๊ธฐ๊ฐ ์ข
๋ ํธ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ด์ฌ 3์์ ๊ดํธ๋ฅผ ์ฌ์ฉํ์ง ์์ ์์ธ ๋ฐ
์ ๊ตฌ๋ฌธ์ ํ๋ฆฐ ๋ฌธ๋ฒ์ด๋ค.
- ์์ธ๋ฅผ ์ฒ๋ฆฌํ (catch) ๋์๋ ๋ฒ์ฉ์ ์ธ ``except:`` ์ ๋์ , ์ฒ๋ฆฌํ
ํน์ ํ ์์ธ๋ฅผ ๋ช
์ํ๋๋ก ํ๋ค.
์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ค:
try:
import platform_specific_module
except ImportError:
platform_specific_module = None
์ฒ๋ฆฌํ ์์ธ๊ฐ ์ง์ ๋์ง ์์ ``except:`` ์ ์ SystemExit,
KeyboardInterrupt ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค-C๋ฅผ ๋๋ฌ ํ๋ก๊ทธ๋จ
์ ์ธํฐ๋ฝํธํ ์ ์๊ฒ ๋ง๋๋ ๋ฑ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์์ง๊ฐ ์๋ค. ๋ง
์ฝ ํ๋ก๊ทธ๋จ ์๋ฌ์ ์งํ๋ฅผ ์๋ฆฌ๋ ๋ชจ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด
``except Exception:``๋ฅผ ์ฌ์ฉํ๋๋ก ํ์(์ฒ๋ฆฌํ ์์ธ๊ฐ ์ง์ ๋์ง ์
์ except ์ ์ ``except BaseException:`` ์ ๊ณผ ๋์ผํ๋ค).
์์ธ๊ฐ ์ง์ ๋์ง ์์ 'except' ์ ์ ์ฌ์ฉํด์ผ ํ๋ ์ ์ ํ ๊ฒฝ์ฐ๋ ๋ค์
๊ณผ ๊ฐ๋ค:
1. ์์ธ ํธ๋ค๋ฌ๊ฐ ์ญ์ถ์ (traceback) ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋ ๋ก๊ทธ๋ฅผ ๋จ๊ฒจ์ผ
ํ ๊ฒฝ์ฐ; ์ฌ์ฉํ๊ฐ ์ต์ํ ์๋ฌ๊ฐ ์ผ์ด๋ฌ์์ ์ธ์งํ ์ ์๊ฒ ๋๋ค.
2. ์ฝ๋์์ ์ผ์ข
์ ์ ๋ฆฌ ์์
์ ์ํํ ๋ค์, ``raise`` ๋ช
๋ น์ ์ฌ์ฉ
ํด ํด๋น ์์ธ๋ฅผ ์์ ๋จ๊ณ๋ก ๊ณ์ ์ฌ๋ ค๋ณด๋ด๋ ค ํ ๊ฒฝ์ฐ. ์ด ๊ฒฝ์ฐ์๋
``try...finally`` ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ๋ฐฉ๋ฒ์ผ ์ ์๋ค.
- ๋ํ, try/except ์ ์ ์ฌ์ฉํ ๋์๋ ``try`` ์ ์ด ์ ์ฉ๋๋ ์ฝ๋์
๋ฒ์๋ฅผ ์ต์ํํด์ผ ํ๋ค. ์ด๋ ๋ฒ๊ทธ๊ฐ ๊ฒน์น๋ ์ผ์ ๋ง์์ค๋ค.
์ข์::
try:
value = collection[key]
except KeyError:
return key_not_found(key)
else:
return handle_value(value)
๋์จ::
try:
# ์ฝ๋ ์ ์ฉ ๋ฒ์๊ฐ ๋๋ค!
return handle_value(collection[key])
except KeyError:
# ์ฌ๊ธฐ์๋ handle_value()์ด ๋ฐ์์ํจ KeyError ์์ธ๋ฅผ ์ฒ๋ฆฌ
return key_not_found(key)
- ๋ฆฌ์์ค์ ์ ์ /ํด์ ์ธ์ ์์
์ ์ ์ธํ๊ณ , ์ด๋ค ์์
์ ํ ๋๋ ์ง
๋ณ๋์ ํจ์/๋ฉ์๋๋ฅผ ํตํด ๋ฌธ๋งฅ(context) ๊ด๋ฆฌ์๋ฅผ ํธ์ถํด์ผ ํ๋ค.
์๋ฅผ ๋ค๋ฉด:
์ข์::
with conn.begin_transaction():
do_stuff_in_transaction(conn)
๋์จ::
with conn:
do_stuff_in_transaction(conn)
ํ์์ ์๋ฅผ ์ดํด๋ณด๋ฉด __enter__, __exit__ ๋ฉ์๋๊ฐ ํธ๋์ญ์
์ดํ์
์ปค๋ฅ์
์ ๋ซ๋๋ค๋ ๊ฒ ์ธ์๋ ์ด๋ค ์ผ์ ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ
์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๋ช
์์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ
์ ์ค์ํ๋ค.
- string ๋ชจ๋ ๋์ ๋ฌธ์์ด ๊ด๋ จ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
๋ฌธ์์ด ๋ฉ์๋๋ ํญ์ ์ข ๋ ๋น ๋ฅด๋ฉฐ ์ ๋์ฝ๋ ๋ฌธ์์ด๊ณผ ๋์ผํ API๋ฅผ
๊ณต์ ํ๊ณ ์๋ค. ํ์ด์ฌ 2.0 ์ดํ ๋ฒ์ ๊ณผ์ ํ์ ํธํ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ
์๋ ์ด ๊ท์น์ ๋ฌด์ํด๋ ๋๋ค.
- ๋ฌธ์์ด์ ์ ๋์ฌ/์ ๋ฏธ์ฌ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ฌธ์์ด์ ์ง์ ์๋ฅด๋ ๋์ ,
``''.startswith()``์ ``''.endswith()``๋ฅผ ์ฌ์ฉํ๋ค.
startswith()์ endswith()๋ ์๋ฏธ๊ฐ ๋ช
ํํ๋ฏ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ฌ์ง๊ฐ
์ ๋ค. ์๋ฅผ ๋ค๋ฉด::
์ข์: if foo.startswith('bar'):
๋์จ: if foo[:3] == 'bar':
์์ธ์ ์ผ๋ก, ํ์ด์ฌ 1.5.2์์ ๋์ํ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ๊ฒฝ์ฐ๋ ํ
์์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค(๊ทธ๋ฐ ์ผ์ด ์๊ธฐ๋ฅผ!).
- ๊ฐ์ฒด ํ์
๋น๊ต ์, ํ์
์ ์ง์ ๋น๊ตํ๋ ๋์ ํญ์ isinstance()๋ฅผ
์ฌ์ฉํ๋ค. ::
์ข์: if isinstance(obj, int):
๋์จ: if type(obj) is type(1):
๊ฐ์ฒด๊ฐ ๋ฌธ์์ด์ธ์ง ํ์ธํ ๊ฒฝ์ฐ, ํด๋น ๋ฌธ์์ด์ด ์ ๋์ฝ๋ ๋ฌธ์์ด์ผ ์
๋ ์๋ค๋ ์ ์ ๋ช
์ฌํ์. ํ์ด์ฌ 2.3์์๋ str, unicode๊ฐ ๋์ผํ
๊ธฐ๋ณธ ํด๋์ค์ธ basestring์ ์์ํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์
์๋ค::
if isinstance(obj, basestring):
- ๋ฐฐ์ด ํํ์ ํ์
(๋ฌธ์์ด, ๋ฆฌ์คํธ, ํํ)์ ๊ทธ ๋ด์ฉ์ด ๋น์ด์์ ๋
false๋ฅผ ๋ฐํํ๋ค๋ ์ฌ์ค์ ํ์ฉํ๋ค. ::
์ข์: if not seq:
if seq:
๋์จ:if len(seq)
if not len(seq)
- ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ๋ค์ ๋ฐ๋ผ์ค๋ ๋ฌธ์ ์์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. ์ด๋ ๊ฒ ๋ค
์ ๋ถ์ ๊ณต๋ฐฑ ๋ฌธ์๋ ๋์ ์ ๋์ง ์์ผ๋ฉฐ, ์ผ๋ถ ํธ์ง๊ธฐ(ํน์ ์ต์ ์
reindent.py)์์๋ ์ด๋ฌํ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๋ค.
- ``==``๋ฅผ ์ฌ์ฉํด์ True/False ๊ฐ์ ๋ถ์ธ ๊ฐ๊ณผ ๋น๊ตํ์ง ์๋๋ค.
์ข์: if greeting:
๋์จ: if greeting == True:
์ต์
: if greeting is True:
- ํ์ด์ฌ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํน์ ์ด๋
ธํ
์ด์
์คํ์ผ์ ์ฝ๋งค์ธ ํจ์ ์ด๋
ธ
ํ
์ด์
์ ์ฌ์ฉํ์ง ์๋๋ค. ๊ทธ ๋์ ์, ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ์ ์ฉํ ์ด๋
ธ
ํ
์ด์
์คํ์ผ์ ์ง์ ๋ฐ๊ฒฌํ๊ณ ์คํํด ๋ณผ ์ ์๋๋ก ํ๊ณ ์๋ค.
(์ญ์ฃผ: ์ฌ๊ธฐ์์์ ํจ์ ์ด๋
ธํ
์ด์
์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจ์ ํ
๋กํ ํ์
๊ณผ ๋น์ทํ๊ฒ ํจ์์ ๋ํ ์ ์๋ฅผ ๋งํ๋ค. PEP 3107์ ์ฐธ๊ณ )
ํจ์ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ ์ด๊ธฐ์ ํต์ฌ ๊ฐ๋ฐ์๋ค์ ์ผ๊ด์ฑ ์๋ ์๊ธฐ
์๋ณ์ ์ด๋
ธํ
์ด์
์คํ์ผ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ์๋ฅผ ๋ค๋ฉด:
* ``[str]``์ ์ด ์ด๋
ธํ
์ด์
์ด ๋ฌธ์์ด ๋ฆฌ์คํธ๋ฅผ ๋ํ๋ด๋์ง, str ํน์
None ํ์
์ ๊ฐ์ ๋ํ๋ด๋์ง ๋ชจํธํ๋ค.
* ``open(file:(str,bytes))``์ด๋ ์ด๋
ธํ
์ด์
์ str ๋ค์์ bytes ๊ฐ
์ ๊ฐ๋ 2๊ฐ์ ํํ์ ๋ํ๋ด๋ ๊ฒ์ด ์๋๋ผ, bytes ํน์ str์ธ ๊ฐ์ง
์ ์๋ ๊ฐ์ ์ฐ์ธ๋ค.
* ``seek(whence:int)``๋ ์ด๋
ธํ
์ด์
์ ๋ช
์ธ๊ฐ ํน์ ๋ถ๋ถ์์๋ ์ ์ฝ
์ด ์ฌํ๊ณ , ํน์ ๊ทธ๋ ์ง ์์ ๋๋ ์์์ ๋ณด์ฌ์ค๋ค: int๋ ์ง๋์น๊ฒ
ํ์ ์ ์ด๋ฉฐ(``__index__``๊ฐ ํ์ฉํ๋ ๋ชจ๋ ๊ฒ์ด ํ์ฉ๋๋ค), ๋์์
ํ์ ์ ์ด์ง ์๊ธฐ๋ ํ๋ค(0, 1, 2 ๊ฐ๋ง ํ์ฉ๋๋ค). ๋ง์ฐฌ๊ฐ์ง๋ก
``write(b: bytes)``๋ผ๋ ์ด๋
ธํ
์ด์
๋ํ ์ง๋์น๊ฒ ํ์ ์ ์ด๋ค(๋ฒํผ
ํ๋กํ ์ฝ์ ํ์ฉํ๋ ๋ชจ๋ ๊ฐ์ ์ง์ํ๋ค).
* ``read1(n: int=None)`` ์ด๋
ธํ
์ด์
์ ๋ชจ์์ ์ด๋ค. None์ int๊ฐ ์
๋๊ธฐ ๋๋ฌธ์ด๋ค. ``source_path(self, fullname:str) -> object``์
๊ฐ์ ์ด๋
ธํ
์ด์
์ ๋ฐํ ํ์
์ด ๋ฌด์์ธ์ง ํผ๋ํ ์ ์๋ค.
* ๋ํ, ์ด๋
ธํ
์ด์
์ ๊ตฌ์ฒดํ(concrete) ํ์
๊ณผ ์ถ์ ํ์
์ ์ฌ์ฉ์ ์
์ด ์ผ๊ด์ฑ์ด ์๋ค: int์ Integral, set/frozenset๊ณผ MutableSet/Set
์ ๋ค ์ ์๋ค.
* ์ถ์ ๊ธฐ๋ณธ ํด๋์ค์ ์ด๋
ธํ
์ด์
์ผ๋ถ๋ ๋ถ์ ํํ ๋ช
์ธ๋ฅผ ๊ฐ๊ณ ์๋ค.
์๋ฅผ ๋ค๋ฉด, set-to-set ์ฐ์ฐ์ Set ๊ฐ์ฒด๋ฅผ ํ์๋ก ํ๋๋ฐ, ์ด๋
Iterable์ด ์๋ Set ์ธ์คํด์ค๋ฅผ ์ป๊ธฐ ์ํด์์ด๋ค.
* ์ด๋
ธํ
์ด์
์ ๋ช
์ธ์ ํฌํจ๋์ด ์์ผ๋ ํ
์คํธ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์๋ค๋
๊ฒ ๋ํ ๋ฌธ์ ๊ฐ ๋์๋ค.
* ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, docstring์ด ์ด๋ฏธ ํ์
๋ช
์ธ์ ํฌํจ๋์ด ์์์ผ๋ฉฐ ํจ
์ ์ด๋
ธํ
์ด์
๋ณด๋ค ๋ ๋ช
ํํ๋ค. ๊ทธ ์ธ์ ๊ฒฝ์ฐ, ์ด๋
ธํ
์ด์
์ด ์ญ์
๋ ํ docstring์ ๋ด์ฉ์ด ๊ฐ์ ๋์๋ค.
* ์ด์ ๊ฐ์ ํจ์ ์ด๋
ธํ
์ด์
๋ค์ ์๋ ํ์
๊ฒ์ฌ๋ ์ธ์์ ๊ฒ์ฆ์ ์
ํํ๋ ์์คํ
์์ ์ฌ์ฉํ๊ธฐ์๋ ๋๋ฌด ์ฃผ๋จน๊ตฌ๊ตฌ์์ด๊ณ ์ผ๊ด์ฑ์ด ์์
๋ค. ์ด๋ฌํ ์ด๋
ธํ
์ด์
์ ์ฝ๋์ ๋จ๊ฒจ๋๋ฉด ์ฐจํ์ ์๋ํ๋ ์ ํธ๋ฆฌํฐ
๋ฑ์ ์์ฑํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์์ ํ ๋ ์ด๋ ค์์ ๊ฒช์ ์ ์๋ค.
์ฐธ์กฐ
====
.. [1] PEP 7, C ์ฝ๋ ์คํ์ผ ๊ฐ์ด๋ (Style Guide for C Code), ๋ฐ ๋ก์ฌ
.. [2] ๋ฐฐ๋ฆฌ์ GNU Mailman ์คํ์ผ ๊ฐ์ด๋
(Barry's GNU Mailman style guide)
http://barry.warsaw.us/software/STYLEGUIDE.txt
.. [3] http://www.wikipedia.com/wiki/CamelCase
์ ์๊ถ
======
์ด ๋ฌธ์๋ ํผํ๋ฆญ ๋๋ฉ์ธ์ ์ํ๋ค.
..
Local Variables:
mode: indented-text
indent-tabs-mode: nil
sentence-end-double-space: t
fill-column: 70
coding: utf-8
End: