C# 개발자로 일하다가 Python 문법을 처음 봤을 때 솔직히 "이거 너무 쉬운 거 아닌가?" 싶었어요.
근데 막상 쓰다 보면 C#이랑 미묘하게 달라서 자꾸 실수하는 부분들이 생기더라고요. 오늘은 C# 개발자 눈으로 봤을 때 "이건 알아야 해" 싶은 Python 문법만 추려봤어요.
1. 문자열 포맷팅 — f-string
C#에서 문자열 보간은 이렇게 하죠:
string name = "잠탱이";
int age = 30;
Console.WriteLine($"이름: {name}, 나이: {age}");
Python f-string도 거의 똑같아요:
name = "잠탱이"
age = 30
print(f"이름: {name}, 나이: {age}")
$"" 대신 f"" 예요. 거의 같아서 금방 익숙해져요.
2. None — C#의 null
C#의 null 이 Python에선 None 이에요:
// C#
string result = null;
if (result == null) { ... }
# Python
result = None
if result is None: # == 대신 is 사용
...
Python에서
None비교는==보다is를 쓰는 게 권장 스타일이에요.
3. 딕셔너리 — C#의 Dictionary
C#:
var dict = new Dictionary<string, int>();
dict["apple"] = 1;
dict["banana"] = 2;
Console.WriteLine(dict["apple"]);
Python:
dict = {"apple": 1, "banana": 2}
print(dict["apple"]) # 1
# 키 없을 때 기본값 반환
print(dict.get("orange", 0)) # 0
.get() 메서드가 유용해요. 키가 없을 때 예외 대신 기본값을 반환해줘요.
4. 튜플 — 변경 불가능한 리스트
C#엔 없는 개념이에요 (ValueTuple이랑 비슷):
# 튜플 — 한 번 만들면 변경 불가
point = (10, 20)
x, y = point # 언패킹
print(x) # 10
print(y) # 20
AI 개발할 때 함수에서 여러 값 반환할 때 자주 써요:
def get_size(text: str) -> tuple[int, int]:
return len(text), len(text.encode('utf-8'))
chars, bytes_size = get_size("안녕하세요")
5. enumerate — 인덱스 + 값 동시에
C#에서 인덱스랑 값 같이 쓰려면:
for (int i = 0; i < list.Count; i++) {
Console.WriteLine($"{i}: {list[i]}");
}
Python은 enumerate 로 깔끔하게:
items = ["사과", "바나나", "딸기"]
for i, item in enumerate(items):
print(f"{i}: {item}")
# 0: 사과
# 1: 바나나
# 2: 딸기
6. with 문 — C#의 using이랑 같아요
C#:
using (var file = File.OpenRead("data.txt")) {
// 자동으로 닫힘
}
Python:
with open("data.txt", "r") as file:
content = file.read()
# 블록 끝나면 자동으로 닫힘
AI 개발할 때 파일 읽고 쓸 일이 많아서 꼭 알아야 해요.
7. args, *kwargs — 가변 인수
C#의 params 랑 비슷한데 더 유연해요:
# *args — 위치 인수 여러 개
def add(*args):
return sum(args)
add(1, 2, 3) # 6
# **kwargs — 키워드 인수 여러 개
def greet(**kwargs):
print(f"이름: {kwargs['name']}, 나이: {kwargs['age']}")
greet(name="잠탱이", age=30)
LangChain이나 FastAPI 코드 보면 **kwargs 자주 나와요. 이게 뭔지 알아야 코드가 읽혀요.
8. 람다 — C# LINQ랑 비슷해요
C#:
var sorted = list.OrderBy(x => x.Length).ToList();
Python:
items = ["banana", "apple", "cherry"]
sorted_items = sorted(items, key=lambda x: len(x))
# ['apple', 'banana', 'cherry']
lambda x: x.length 대신 lambda x: len(x) 예요. 구조는 거의 같아요.
9. 타입 힌트 — C# 처럼 타입 명시하기
Python은 타입 선언이 없지만, 타입 힌트로 명시할 수 있어요:
def chat(message: str, history: list[str] = []) -> str:
# message는 str, history는 list[str], 반환값은 str
return "응답"
FastAPI는 타입 힌트를 적극 활용해요. C# 개발자라면 타입 힌트 쓰는 습관 들이는 게 좋아요.
정리
| 개념 | C# | Python |
|---|---|---|
| 문자열 보간 | $"이름: {name}" |
f"이름: {name}" |
| null | null |
None |
| null 비교 | == null |
is None |
| 딕셔너리 | Dictionary<K,V> |
{} |
| 파일 처리 | using |
with |
| 가변 인수 | params |
*args, **kwargs |
| 람다 | x => x.Length |
lambda x: len(x) |
C# 배경이 있으면 Python 문법은 생각보다 금방 익혀요. 개념이 비슷한 게 많아서 "아 이거랑 같은 거네" 하는 순간이 많을 거예요.
다음 글은 드디어 Gemini API 발급부터 첫 응답까지예요!
'Python 입문' 카테고리의 다른 글
| Python 가상환경 venv란? — Java Maven 쓰던 개발자가 이해한 방식 (1) | 2026.04.09 |
|---|---|
| Java 개발자가 Python 처음 배울 때 헷갈리는 것들 (0) | 2026.04.07 |