"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
파이썬에서 함수를 정의하고 사용하는 방법은?
파이썬에서 함수는def 키워드를 사용하여 정의하며, def 함수명(매개변수): 수행할 문장 return 결과값의 구조를 가집니다. 정의된 함수는 함수명을 호출하여 사용할 수 있습니다.

파이썬 함수의 특징은 무엇인가요?
- 입력이나 출력이 없을 수도 있습니다.
- 여러 개의 입력 값을 받을 때는 *args를 사용하여 개수 제한 없이 받을 수 있습니다.
- 여러 개의 결과값을 반환할 수 있지만, 실제로는 튜플 형태로 묶여 하나의 값으로 반환됩니다.
- 매개변수에 미리 기본값을 설정할 수 있으며, 이 경우 기본값이 설정된 매개변수는 항상 마지막에 위치해야 합니다.
- 함수 내부에 선언된 변수는 함수 내부에서만 유효한 지역 변수이며, 외부 변수에 영향을 주려면 return을 사용하거나 global 키워드를 사용해야 합니다.
- lambda 키워드를 사용하여 한 줄로 간단하게 함수를 정의할 수 있습니다.
파이썬 함수의 핵심 개념부터 실용적인 파일 입출력까지 한 번에 마스터할 수 있는 강의입니다. 단순히 문법을 나열하는 것을 넘어, 함수가 왜 필요한지, 입력과 출력이 없는 함수는 어떻게 활용되는지 등 본질적인 원리를 명확한 비유와 함께 설명합니다. 특히 return 값의 유무, 지역 변수와 전역 변수의 범위, 그리고 lambda 함수처럼 실제 코딩에서 자주 마주치는 난해한 개념들을 실제 예시와 함께 쉽게 풀어내어 바로 적용 가능한 인사이트를 제공합니다. 또한, 파일 읽기/ 쓰기 모드(w, r, a)의 차이점과 with 문을 활용한 효율적인 파일처리 방법까지 다루어, 파이썬을 활용한 데이터 처리 능력을 한 단계 끌어올릴 수 있도록 돕습니다.
1. 함수의 개념과 파이썬 활용법 소개
- 함수의 기본 개념: 함수는 특정 입력(과일, 설탕)을 받아 처리(믹서기)하여 결과물(과일 주스)을 내는 과정과 유사하다.
- 수학적 함수(f(x) = 2x + 3)의 예시를 통해 입력(x=1)이 함수식을 거쳐 출력(5)이 되는 과정을 설명한다.
- 프로그래밍 함수의 특징: 프로그래밍에서의 함수는 수학적 함수와 달리 입력이나 출력이 없을 수도 있다.
- 예시: 자바스크립트의 alert 함수는 입력과 출력이 없어도 팝업창을 나타낸다.
- 입력만 있거나, 출력만 있거나, 둘 다 없는 등 다양한 형태가 가능하다.
2. 파이썬 함수의 구조 및 실습
2.1. 파이썬 함수의 기본 구조와 호출
- 함수 정의: def 키워드를 사용하여 함수를 정의한다.
- def 다음에 함수이름, 괄호 안에 매개변수(입력)를 적는다.
- 함수본문에는 수행할 문장을 작성하고, return 값(출력)을 지정한다.
- 함수 실습 (sum 함수): sum이라는 함수를 정의하여 두 개의 인자(a, b)를 받아 더한 후 결과를 반환하는 예시를 통해 설명한다.
- def sum(a, b):로 함수를 정의하고, result = a + b로 계산한 뒤 return result로 결과를 돌려준다.
- 함수 호출: 함수는 정의만으로는 실행되지 않으며, 직접 호출해야 한다.
- print(sum(1, 2))와 같이 호출하면, sum 함수가 실행되어 결과값 3이 출력된다.
- return 값은 호출된 위치에 결과로 나타나며, 이 값이 print 함수에 의해 출력된다.
2.2. 입력 및 출력 유무에 따른 함수 형태
- 입력은 없지만 출력은 있는 함수: 매개변수없이 return 값만 있는 함수도 가능하다.
- 예시: 입력 없이 특정 값을 반환하는 함수를 print하면 해당 값이 출력된다.
- 입력은 있지만 출력은 없는 함수: 매개변수는 있지만 return 값이 없는 함수도 가능하다.
- 함수내부에서 print 문을 통해 자체적인 처리를 수행할 수 있다.
- return 값이 없으므로, 함수호출 결과를 print하면 None이 출력된다.
- 입력과 출력 모두 없는 함수: 매개변수도 없고 return 값도 없는 함수도 가능하다.
- 예시: 함수내부에서 단순히 "하이"를 출력하는 함수는 입력과 출력이 모두 없다.
- 내장 함수의 출력 유무: 파이썬의 내장 함수중에도 return 값이 없는 경우가 있다.
- list.append(): 리스트에 요소를 추가하는 기능은 있지만, return 값이 없어 print하면 None이 나온다.
- list.pop(): 리스트의 마지막 요소를 제거하고 그 요소를 return하므로, print하면 제거된 요소가 출력된다.
- 이러한 차이로 인해 어떤 함수는 print 시 결과가 나오고, 어떤 함수는 None이 나오는 이유를 설명할 수 있다.
3. 함수의 다양한 매개변수 처리 방법
3.1. 가변 인자 (*args)
- 가변 인자 필요성: 함수의 매개변수개수를 미리 알 수 없거나, 여러 개의 인자를 한 번에 받고 싶을 때 사용한다.
- 일반적인 매개변수정의 방식으로는 인자 개수가 고정되어 있어 유연하게 대응하기 어렵다.
- <em>args 사용법: 매개변수앞에 </em>를 붙여 *args와 같이 사용하면 여러 개의 인자를 한 번에 받을 수 있다.
- *args로 받은 인자들은 함수내부에서 리스트(튜플) 형태로 처리된다.
- 예시: sum_all(*args) 함수는 전달된 모든 숫자를 더하여 반환한다.
- 함수 이름의 자유로움: 함수이름은 사용자가 임의로 정할 수 있지만, 일반적으로 함수의 기능을 나타내는 영어 단어를 사용한다.
- *args의 변수명: args 대신 다른 이름을 사용해도 되지만, 관습적으로 args를 많이 사용한다.
3.2. 키워드 가변 인자 (**kwargs)
- </strong>kwargs 사용법: 매개변수 앞에 </strong>를 붙여 <em></em>kwargs와 같이 사용하면 키워드 인자(key=value) 형태로 여러 개의 값을 딕셔너리 형태로 받을 수 있다.
- 예시: name='Alice', age=30과 같이 key=value 형태로 입력된 값들을 딕셔너리로 받아 처리할 수 있다.
- 특정 키(예: 'name')가 존재할 때만 해당 값을 출력하는 등의 활용이 가능하다.
- 활용성: <em></em>kwargs는 다양한 키워드 인자를 유연하게 처리할 때 유용하게 사용된다.
- 이 개념은 뒤에서 더 자세히 다루어질 예정이다.
3.3. 함수의 결과값과 튜플 반환
- 함수의 결과값은 항상 하나: 파이썬 함수는 겉보기에는 여러 개의 값을 반환하는 것처럼 보일 수 있지만, 실제로는 하나의 튜플(tuple) 형태로 묶어서 반환한다.
- 예시: return a+b, a<em>b와 같이 두 개의 값을 반환하면, 이 값들은 (a+b, a</em>b) 형태의 튜플로 묶여서 반환된다.
- 튜플 활용: 반환된 튜플에서 필요한 값만 인덱싱하여 사용할 수 있다.
- 예시: result = sum_and_multiply(1, 2)로 받은 result가 (3, 2)라면, result[0]을 통해 더한 값(3)만 사용할 수 있다.
4. 함수의 매개변수 초기값 설정 및 주의사항
4.1. 매개변수 초기값 설정

- 초기값 설정 방법: 함수정의 시 매개변수에 미리 기본값을 할당할 수 있다.
- 예시: def my_self(name, age, man=True):와 같이 man=True로 설정하면, man 인자를 생략했을 때 기본적으로 True 값이 할당된다.
- 초기값의 활용: 인자를 명시적으로 전달하면 기본값이 변경되고, 생략하면 기본값이 적용된다.
- my_self("철수", 25) 호출 시 man은 True로 자동 할당된다.
- my_self("영희", 23, False) 호출 시 man은 False로 변경되어 적용된다.
4.2. 매개변수 순서의 중요성 및 해결 방법

- 위치 인자의 순서: 함수호출 시 매개변수는 정의된 순서대로 값을 인식하므로, 순서를 맞춰야 한다.
- 예시: my_self(25, "정서율", True)와 같이 호출하면, name에 숫자 25가 할당되어 오류가 발생한다.
- 키워드 인자를 이용한 순서 무시: 매개변수이름을 직접 지정하여 값을 할당하면 순서에 상관없이 호출할 수 있다.
- 예시: my_self(age=25, name="정서율", man=True)와 같이 호출하면 순서가 달라도 올바르게 매핑된다.
- 초기값 설정 매개변수의 위치 주의사항: 기본값이 설정된 매개변수는 항상 맨 뒤에 위치해야 한다.
- 기본값이 설정된 매개변수가 중간에 위치하면, 생략 시 컴퓨터가 어떤 인자에 값을 할당해야 할지 혼란스러워 오류가 발생한다.
- 따라서 def my_self(name, age, man=True):와 같이 기본값 매개변수는 항상 마지막에 두어야 한다.
5. 변수의 효력 범위 (지역 변수와 전역 변수)

- 지역 변수 (Local Variable): 함수내에서 정의된 변수는 해당 함수안에서만 유효하며, 함수를 벗어나면 효력을 잃는다.
- 예시: a = 1 (전역 변수)이 있고, def test(a): a = a + 1 ( 함수내 지역 변수 a)가 있을 때, 함수내의 a는 외부의 a에 영향을 주지 않는다.
- 함수 실행 후 외부의 a를 출력하면 여전히 1이 나온다.
- 파이썬 라이브러리 시각화를 통해 글로벌 프레임(전역)과 함수 프레임(지역)의 변수가 독립적임을 확인할 수 있다.
- 전역 변수 (Global Variable)에 영향을 주는 방법:
- return 값을 통한 재할당: 함수내에서 계산된 값을 return하여 외부 변수에 다시 할당하는 방법이다.
- 예시: a = 1, def test(a): return a + 1, a = test(a)와 같이 함수에서 반환된 값을 다시 a에 할당하면 a의 값이 2로 변경된다.
- global 키워드 사용: 함수내에서 global 키워드를 사용하여 전역 변수를 직접 수정할 수 있다.
- 예시: a = 1, def test(): global a; a = a + 1, test()와 같이 global a를 선언하면 함수내에서 a를 변경했을 때 외부의 a 값도 변경된다.
- global 키워드를 사용하면 해당 변수가 지역 변수가 아닌 전역 변수임을 명시한다.
6. 람다(Lambda) 함수
- 람다 함수의 개념: 람다 함수는 간단한 함수를 한 줄로 표현하는 방법이다.
- 일반적인 def 함수정의보다 간결하게 함수를 만들 수 있다.
- 람다 함수 사용법: lambda 매개변수: 표현식 형태로 작성한다.
- 예시: add = lambda a, b: a + b는 a와 b를 받아 더한 값을 반환하는 함수를 정의한다.
- add(1, 2)와 같이 호출하면 결과값 3이 나온다.
- 람다 함수의 활용:
- 간단한 식 표현: 복잡하지 않은 연산을 수행하는 함수를 만들 때 유용하다.
- def를 사용할 수 없는 곳: 리스트나 다른 자료구조 안에 함수를 직접 정의해야 할 때 람다 함수를 사용할 수 있다.
- 예시: my_list = [lambda a, b: a + b, lambda a, b: a * b]와 같이 리스트 안에 람다 함수를 담을 수 있다.
- my_list[0](1, 2)와 같이 인덱스를 통해 함수를 호출하고 인자를 전달할 수 있다.
- 이름 없는 함수: 람다 함수는 이름 없이도 정의하고 사용할 수 있다.
- 변수에 담아 사용하거나, 다른 함수의 인자로 전달하는 등 다양하게 활용된다.
7. 사용자 입력과 출력 (Input & Print)
7.1. input() 함수
- input() 함수의 역할: 사용자로부터 입력을 받는 내장 함수이다.
- input()을 호출하면 프로그램이 사용자 입력을 기다린다.
- 입력된 값은 변수에 저장하여 활용할 수 있다.
- input() 함수의 매개변수: input() 함수는 사용자에게 보여줄 프롬프트 메시지를 매개변수로 받을 수 있다.
- 예시: number = input("숫자를 입력하세요: ")와 같이 사용하면 "숫자를 입력하세요: "라는 메시지가 출력된 후 입력을 기다린다.
- 알고리즘 문제 풀이 등 사용자 입력을 처리해야 할 때 주로 사용된다.
7.2. print() 함수의 심화 기능
- 여러 문자열 출력: print() 함수는 여러 개의 문자열을 콤마(,) 없이 나열해도 자동으로 연결하여 출력한다.
- 예시: print("Hello", "World")는 "Hello World"로 출력된다.
- 콤마(,) 사용 시 자동 띄어 쓰기: print() 함수에 여러 매개변수를 콤마로 구분하여 전달하면, 각 매개변수사이에 자동으로 띄어 쓰기가 추가되어 출력된다.
- 예시: print("Hello", "World")는 "Hello World"로 출력된다.
- end 매개변수: print() 함수는 기본적으로 출력 후 다음 줄로 넘어간다. end 매개변수를 사용하여 줄바꿈 동작을 변경할 수 있다.
- print("Hi", end=""): 줄바꿈 없이 다음 출력이 바로 이어서 나온다.
- print("Hi", end=" "): 출력 후 공백을 추가하고 다음 출력이 이어진다.
8. 파일 입출력 (File I/O)
8.1. 파일 생성 및 쓰기 모드 (w)

- 파일 생성 및 열기: open() 함수를 사용하여 파일을 열거나 생성한다.
- f = open("새파일.txt", "w"): "새 파일.txt"라는 파일을 쓰기 모드(w)로 열고 파일객체를 f에 저장한다.
- w 모드는 파일이 없으면 생성하고, 있으면 기존 내용을 모두 지우고 새로 쓴다.
- 파일 모드:
- w (write): 쓰기 모드. 파일을 새로 생성하거나 기존 내용을 덮어쓴다.
- r (read): 읽기 모드. 기존 파일을 읽을 때 사용한다.
- a (append): 추가 모드. 기존 파일내용의 끝에 새로운 내용을 덧붙인다.
- 파일 경로:
- 상대 경로: open("새파일.txt", "w")와 같이 파일이름만 지정하면 현재 스크립트가 실행되는 폴더에 파일이 생성된다.
- 절대 경로: open("C:/Python/새파일.txt", "w")와 같이 전체 경로를 지정할 수 있다.
- 파일에 내용 쓰기: write() 함수를 사용하여 파일에 데이터를 쓴다.
- f.write("내용"): 파일객체 f에 "내용"을 쓴다.
- f.close(): 파일작업을 마친 후에는 반드시 파일을 닫아야 한다.
- 줄바꿈 문자 (`
)<em></em>: 파일에 줄바꿈을 하려면 문자열 끝에
`을 명시적으로 추가해야 한다.
- 예시: `f.write(f"{i}번째 줄입니다.
")`
- 인코딩 설정: 한글 등 특정 문자가 깨지는 것을 방지하기 위해 encoding 매개변수를 사용한다.
- open("새파일.txt", "w", encoding="utf-8"): utf-8 인코딩으로 파일을 연다.
- 활용 예시: 크롤링 등으로 얻은 실시간 검색어 순위 등을 텍스트 파일로 저장하는 데 활용할 수 있다.
8.2. 파일 읽기 모드 (r)
- 파일 읽기 모드 열기: open("새파일.txt", "r", encoding="utf-8")와 같이 r 모드로 파일을 연다.
- readline() 함수: 파일에서 한 줄씩 읽어온다.
- line = f.readline(): 파일 f에서 첫 번째 줄을 읽어 line 변수에 저장한다.
- 파일을 열었으면 반드시 f.close()로 닫아야 한다.
- 모든 줄 읽기 (반복문 활용):
- while 문 사용: while True:로 무한 반복하며 readline()으로 한 줄씩 읽고, 더 이상 읽을 내용이 없으면(line이 빈 문자열이 되면) break로 반복문을 종료한다.
- readlines() 함수: 파일의 모든 줄을 읽어 리스트 형태로 반환한다.
- lines = f.readlines(): 파일의 모든 줄을 읽어 각 줄을 요소로 하는 리스트 lines에 저장한다.
- 각 줄 끝에는 `
(줄바꿈 문자)이 포함되어 있으므로, print()` 시 추가적인 줄바꿈이 발생할 수 있다.
- 이를 방지하려면 print(line, end="")를 사용하거나, line.strip()으로 `
`을 제거할 수 있다.
- 모든 줄을 한 줄로 출력하려면 strip()으로 `
을 제거하고 end=""`를 사용한다.
- read() 함수: 파일의 모든 내용을 하나의 문자열로 통째로 읽어온다.
- data = f.read(): 파일의 모든 내용을 data 변수에 저장한다.
- readline()은 한 줄, readlines()는 리스트, read()는 통째로 읽는다는 차이가 있다.
8.3. 파일 추가 모드 (a)
- 추가 모드 (a)의 역할: 기존 파일의 내용을 유지한 채, 파일의 끝에 새로운 내용을 덧붙일 때 사용한다.
- w 모드와 달리 기존 내용을 덮어쓰지 않는다.
- 사용법: open("새파일.txt", "a", encoding="utf-8")와 같이 a 모드로 파일을 연다.
- f.write()를 사용하여 내용을 추가하면 기존 내용 뒤에 이어서 작성된다.
8.4. with 문을 활용한 파일 처리
- with 문의 장점: with 문을 사용하면 파일을 자동으로 닫아주므로, 명시적으로 f.close()를 호출할 필요가 없다.
- 사용법: with open("파일이름", "모드") as 변수명: 형태로 사용한다.
- 예시: with open("foo.txt", "w") as f:
- with 블록 내부에서 파일객체(f)를 사용하며, 블록을 벗어나면 파일이 자동으로 닫힌다.
- 이는 지역 변수 개념과 유사하게, with 블록 내에서만 파일객체가 유효하다.
9. 요약 및 마무리
- 함수 개념: 믹서기 비유, 입력/출력 유무, 정의 및 호출 방법.
- 매개변수: 가변 인자(<em>args), 키워드 가변 인자(</em>*kwargs), 튜플 반환, 초기값 설정 및 순서 주의사항.
- 변수 범위: 지역 변수와 전역 변수, return 및 global 키워드를 통한 전역 변수 접근.
- 람다 함수: 간단한 함수를 한 줄로 표현하는 방법, 리스트 내 함수포함 가능.
- 사용자 입출력: input() 함수사용법, print() 함수의 다양한 기능(end 매개변수등).
- 파일 입출력: 파일 모드(w, r, a), readline(), readlines(), read() 함수, with 문을 통한 자동 파일닫기.
'인터넷' 카테고리의 다른 글
| 2025년 네이버 블로그 키워드 찾는법 1편 (마르지않는 샘물 갖기) (1) | 2025.08.30 |
|---|---|
| 2025년 블로그 수익화 현실 3단계 (1) | 2025.08.30 |
| 네이버 블로그C랭크, 다이아+? 모르고 쓰면 망합니다!! 준최적화로 1위찍은 상위노출 비법 공개 2탄 (2) | 2025.08.30 |
| 준최적화로 1위찍은 네이버 블로그 상위노출 비법 공개 1탄 (2025년 최신) (2) | 2025.08.30 |
| 네이버 블로그 애드포스트 한 달에 2900만원 가능했던, 강의보다 정확한 진짜메인, 홈판, 홈피드 노출 비법 공개 (4) | 2025.08.30 |