[Python] 기본 문법: 들여쓰기, 주석, 변수
python 문법, python syntax, 들여쓰기, indentation, python 주석, python 변수
정의
Python은 들여쓰기(indentation)로 블록을 구분하는 언어다. C/Java의 중괄호 {} 대신 일관된 들여쓰기 수준이 블록 스코프를 결정한다. PEP 8은 공백 4칸을 권장하며 탭과 공백 혼용은 TabError를 발생시킨다.
들여쓰기 규칙
python
def greet(name):
if name: # 4칸 들여쓰기
print(f"Hello, {name}")
for _ in range(2):
print("!") # 8칸 (중첩)
else:
print("Hello, stranger")
greet("Alice") 결과
Hello, Alice
!
!같은 블록 안에서는 들여쓰기 폭이 동일해야 한다. 다음은 IndentationError를 던진다.
def bad():
x = 1
y = 2 # IndentationError: unexpected indent
주석
- 한 줄 주석:
# - 여러 줄 “주석”: 보통 docstring(
"""...""")을 사용하지만, 실제로는 문자열 리터럴이라 GC된다.
# 한 줄 주석
def add(a, b):
"""두 수를 더한다.
이런 형식의 docstring은 help(add)로 확인할 수 있다.
"""
return a + b
#은 라인 끝까지 적용되며, 문자열 리터럴 안에서는 일반 문자로 취급된다.
변수와 할당
Python은 동적 타이핑이다. 변수 선언이 없고, 할당과 동시에 이름이 객체에 바인딩된다.
python
x = 42 # int
x = "hello" # 같은 이름이 다른 타입 객체를 가리킴
y, z = 1, 2 # 튜플 언패킹
a = b = c = 0 # 체인 할당 (모두 같은 객체)
print(type(x), x)
print(y, z)
print(a is b, b is c) 결과
<class 'str'> hello
1 2
True Truex = 42는 “x라는 라벨을 정수 객체 42에 붙인다”는 의미이지, “x라는 메모리 슬롯에 42를 쓴다”가 아니다. 이 차이는 가변/불변 객체 동작을 이해할 때 핵심이다.
Expression vs Statement
- Expression(표현식): 값을 만들어내는 코드.
1 + 2,[x*2 for x in xs],f(a) - Statement(문): 동작을 수행하는 코드.
if,for,def,return,=할당
Python 3.8+ walrus operator := 는 expression 자리에서 할당을 수행하는 예외다.
if (n := len(data)) > 10:
print(f"길이가 {n}으로 너무 김")
식별자(Identifier) 규칙
- 영문/유니코드 문자, 숫자,
_사용 가능 (숫자로 시작 불가) - 대소문자 구분:
value와Value는 다른 변수 - 예약어 33개(
if,for,class,True,None, …)는 사용 불가 - 관례:
snake_case: 변수/함수PascalCase: 클래스_leading_underscore: 내부용__double_underscore__: 매직 메서드/속성
# 가능하지만 권장 안 함
한글변수 = 1
π = 3.14159
라인 연속
긴 한 줄은 백슬래시 \ 또는 괄호 안에서 자동으로 연속된다.
total = 1 + 2 + 3 + \
4 + 5 + 6 # 백슬래시 연속
items = [
"apple",
"banana",
"cherry", # 괄호/대괄호 안은 자유 줄바꿈
]
PEP 8은 괄호 활용을 백슬래시보다 권장한다.
다중 문장 한 줄에 작성
세미콜론으로 분리 가능하지만 가독성 때문에 권장하지 않는다.
x = 1; y = 2; print(x + y) # 동작은 하나 비권장
PEP 8 핵심 스타일
- 들여쓰기: 공백 4칸
- 한 줄 최대 79자(주석은 72자)
- 함수/클래스 정의 사이 빈 줄 2줄
- 메서드 사이 빈 줄 1줄
- 연산자 양옆 공백 1칸:
a + b,a == b - 함수 호출 시 키워드 인수
=양옆 공백 없음:f(x=1)
💬 댓글