파이썬 기본 내장함수에는 여러가지가 있어요. 그 중 입문~초중급 복습용 함수입니다.
“시그니처 → 설명 → 예제 → 주의사항/팁” 순서로 빠르게 이해해볼게요!
시그니처를 모르신다면 아래 링크에 자세히 설명해놨답니다.
https://brotherweek111.tistory.com/24
파이썬 함수 시그니처(Signature) 완벽 이해하기
파이썬을 공부하다 보면 함수 설명에 이런 문장을 종종 보셨을 거예요print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 이게 바로 함수의 시그니처(Signature) 입니다.처음 보면 어려워 보이지만,
brotherweek111.tistory.com
1) 입출력 & 타입 확인
✅ print()
한줄 요약: 값을 문자열로 바꿔 표준출력에 찍습니다.
시그니처: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- objects: 출력할 값들(여러 개 가능)
- sep: 값과 값 사이 구분자(기본 공백)
- end: 마지막에 붙는 문자열(기본 새줄)
- file: 출력 대상(기본 표준출력)
- flush: 버퍼 강제 비움 여부
print("A", "B", 123) # A B 123
print("2025-10-11", sep=" | ") # sep은 값 사이에만 적용
print("progress", end="...done!\n") # 줄바꿈 대신 커스텀 엔딩
주의/팁
- 디버깅 시 print(repr(obj))로 “있는 그대로”를 볼 수 있음.
- 로그성 출력은 print() 대신 logging 모듈 권장(레벨/포맷/핸들러)
✅ input()
한줄 요약: 콘솔에서 한 줄을 문자열로 입력받습니다.
시그니처: input(prompt=None) → str
age_text = input("나이? ") # 항상 문자열
age = int(age_text) # 숫자 계산 전 형 변환 필수
print(age + 1)
주의/팁
- EOFError 가능(파이프 입력 등). 안전하게 쓰려면 try/except 처리.
- 숫자 → 반드시 int()/float()로 변환 후 사용.
✅ type()
한줄 요약: 객체의 실제 타입(클래스)을 돌려줍니다.
시그니처: type(obj) → type
print(type(10)) # <class 'int'>
print(type([1,2,3])) # <class 'list'>
주의/팁
- 타입 비교는 보통 isinstance(obj, SomeClass)가 더 적절합니다(상속 고려).
2) 형 변환
✅ int(), float(), str(), bool()
한줄 요약: 대표적인 기본 타입 변환기.
시그니처(대표):
- int(x=0, base=10)
- float(x=0.0)
- str(obj='')
- bool(x) (공집합/0/빈문자열/None → False, 나머지 True)
print(int("10")) # 10
print(float("3.14")) # 3.14
print(str(123)) # '123'
print(bool(0), bool("")) # False False
주의/팁
- int("10.5")는 에러 → float("10.5") 후 int()로 자릿수 버림.
- bool("0")는 True (빈 문자열만 False).
3) 숫자/집계 관련
✅ abs(), round(), pow()
한줄 요약: 절댓값/반올림/거듭제곱(모듈러 지원).
시그니처:
- abs(x)
- round(number[, ndigits])
- pow(x, y[, mod])
print(abs(-7)) # 7
print(round(3.14159, 2)) # 3.14
print(round(2.5)) # 2 (은행가 반올림: ties to even)
print(pow(2, 5)) # 32
print(pow(3, 10, 7)) # 3**10 % 7 을 빠르게 계산
주의/팁
- 반올림 규칙: 파이썬 3는 “짝수 쪽으로 묶음(은행가 반올림)”.
- pow(a, b, mod)는 큰 수 모듈러 연산에 매우 효율적.
✅ min(), max(), sum()
한줄 요약: 최소/최대/합계.
시그니처:
- min(iterable, *[, key]) 또는 min(a, b, c, ...)
- max(iterable, *[, key])
- sum(iterable, /, start=0)
scores = [88, 92, 75, 99]
print(min(scores)) # 75
print(max(scores)) # 99
print(sum(scores)) # 354
print(sum(scores, 10)) # 364 (초깃값 더하기)
4) 시퀀스/반복
✅ len()
한줄 요약: 컨테이너의 길이(개수).
시그니처: len(obj) → int
print(len("python")) # 6
print(len([1,2,3,4])) # 4
print(len({"a":1,"b":2})) # 2
주의/팁
- 제너레이터에는 len() 불가(크기를 모름). 리스트로 변환해야 길이 측정 가능.
✅ range()
한줄 요약: 메모리 효율 좋은 정수 시퀀스(게으른 반복자).
시그니처: range(stop) / range(start, stop[, step])
print(list(range(5))) # [0,1,2,3,4]
print(list(range(2, 7))) # [2,3,4,5,6]
print(list(range(10, 0, -3))) # [10, 7, 4, 1]
주의/팁
- 실제 리스트가 아니라 필요할 때 생성되는 시퀀스. 매우 큰 범위도 메모리 안전.
✅ enumerate()
한줄 요약: 인덱스와 값을 함께 꺼내는 반복자.
시그니처: enumerate(iterable, start=0)
fruits = ["apple", "banana", "cherry"]
for i, f in enumerate(fruits, start=1):
print(i, f)
# 1 apple / 2 banana / 3 cherry
주의/팁
- 가장 짧은 이터러블 길이에 맞춰 잘립니다.
- 길이 맞추려면 itertools.zip_longest() 사용.
5) 정렬
✅ sorted() (새 리스트 반환) / 리스트 메서드 list.sort() (원본 정렬)
한줄 요약: 파이썬 정렬은 안정적(stable), key=로 맞춤 정렬.
시그니처:
- sorted(iterable, *, key=None, reverse=False)
- list.sort(self, /, *, key=None, reverse=False)
nums = [5,1,4,2]
print(sorted(nums)) # [1,2,4,5] (원본 유지)
nums.sort(reverse=True)
print(nums) # [5,4,2,1] (원본 변경)
words = ["Apple", "banana", "cherry"]
print(sorted(words, key=str.lower)) # 대소문자 무시 정렬
주의/팁
- 복수 기준: key=lambda x: (x.score, x.name) 처럼 튜플 키로 다단계 정렬.
- 시간복잡도 O(n log n), 내부 알고리즘은 Timsort.
6) 컬렉션 생성/검사
✅ list(), tuple(), set(), dict()
한줄 요약: 형 변환/새 컬렉션 만들기.
시그니처: 각 타입 생성자
print(list("abc")) # ['a','b','c']
print(tuple([1,2,3])) # (1,2,3)
print(set([1,1,2,3])) # {1,2,3}
print(dict([("a",1), ("b",2)])) # {'a':1,'b':2}
# dict 컴프리헨션
squares = {x: x*x for x in range(5)}
print(squares) # {0:0, 1:1, 2:4, 3:9, 4:16}
주의/팁
- set은 중복 제거와 멤버십 테스트에 강력(평균 O(1)).
- dict는 3.7+부터 삽입 순서 유지.
✅ any(), all()
한줄 요약: 이터러블의 논리합/논리곱.
시그니처: any(iterable) / all(iterable)
print(any([0, "", None, 3])) # True (하나라도 참이면 True)
print(all([1, "hi", [0]])) # True (모두 참으로 간주되면 True)
print(all([]), any([])) # True False (공리 주의)
주의/팁
- 빈 이터러블: all([]) → True, any([]) → False.
7) 함수형 툴
✅ map()
한줄 요약: 각 원소에 함수를 적용(게으른 평가).
시그니처: map(function, iterable, ...)
nums = [1, 2, 3, 4]
squared = list(map(lambda x: x*x, nums))
print(squared) # [1,4,9,16]
주의/팁
- 결과가 필요하면 보통 list()로 물리화.
- 여러 이터러블을 동시에 받을 수 있음(함수 파라미터 수 일치).
✅ filter()
한줄 요약: 조건을 통과한 원소만 남깁니다(게으른 평가).
시그니처: filter(function, iterable)
nums = [1,2,3,4,5,6]
even = list(filter(lambda x: x % 2 == 0, nums))
print(even) # [2,4,6]
주의/팁
- function이 None이면 Truthy한 값만 남깁니다.
- 가독성 측면에서는 리스트 컴프리헨션이 더 선호되기도 함.
✅ lambda
한줄 요약: 한 줄짜리 익명 함수.
시그니처: lambda 매개변수들: 표현식
inc = lambda x: x + 1
print(inc(3)) # 4
# 정렬 key로 자주 사용
pairs = [("alice", 30), ("bob", 25), ("carol", 27)]
print(sorted(pairs, key=lambda p: p[1])) # 나이순
주의/팁
- 여러 줄 로직/복잡한 처리 → def로 이름 있는 함수 정의 권장.
8) 문자열/컬렉션 유틸
✅ reversed()
한줄 요약: 역순 이터레이터를 반환(원본 불변).
시그니처: reversed(seq) (임의 접근 가능한 시퀀스에 적합)
print(list(reversed([1,2,3]))) # [3,2,1]
print("".join(reversed("abc"))) # "cba"
✅ ord() / chr()
한줄 요약: 문자 ↔ 유니코드 코드포인트 변환.
시그니처: ord(c) / chr(i)
print(ord('A')) # 65
print(chr(65)) # 'A'
주의/팁
- 이모지/한글 등도 유니코드 코드포인트를 가집니다.
✅ (참고) 문자열 정렬/검사 보조
sorted("string"): 문자 리스트로 정렬
print(sorted("Python")) # ['P','h','n','o','t','y']
9) 객체/속성 조사
✅ isinstance()
한줄 요약: 인스턴스가 특정 타입(혹은 그 서브클래스)인지 검사.
시그니처: isinstance(obj, class_or_tuple)
print(isinstance(3.14, float)) # True
print(isinstance(True, (int, bool))) # True (bool은 int의 서브클래스)
✅ dir()
한줄 요약: 객체가 가진 속성/메서드 목록(이름들)을 문자열로 반환.
시그니처: dir([object])
print(dir("hello")) # 문자열이 가진 메서드들 확인
주의/팁
- 디버깅/탐색에 유용. 구현 세부에 따라 “비공식” 항목도 포함될 수 있음.
✅ help()
한줄 요약: 대화형 도움말 시스템(문서 문자열, 시그니처, 예제).
시그니처: help([object])
# 대화형 셸/노트북에서:
# help(len)
# help(str.split)
🔒 보너스: 안전 변환 & 예외 처리 패턴
def to_int_safe(text, default=None):
try:
return int(text)
except ValueError:
try:
return int(float(text)) # "10.5" → 10
except ValueError:
return default
print(to_int_safe("10")) # 10
print(to_int_safe("10.5")) # 10
print(to_int_safe("abc", 0)) # 0
포인트
- 사용자 입력/파일 파싱 시 예외 안전성이 중요합니다.
- 실패 시 기본값/로그를 남겨 파이프라인이 멈추지 않게 하세요.
'Patrashu의 랩실 > 파이썬' 카테고리의 다른 글
| 파이썬 함수 시그니처(Signature) 완벽 이해하기 (0) | 2025.10.11 |
|---|---|
| Python으로 만들어보는 Useless tool : 2. 오늘의 운세 (0) | 2025.09.30 |
| Python으로 만들어보는 Useless tool : 1. 명언 출력기 (0) | 2025.09.28 |
| 날짜, 시간 다루기 - datetime (0) | 2025.03.21 |
| 반복문 - for (0) | 2025.03.18 |