본문 바로가기

Programming

파이썬(Python) 기초 : 함수와 모듈

 

함수

 

파이썬에서 함수는 코드를 구조화하고 재사용성을 높이는 데 사용됩니다.

함수는 특정 작업을 수행하는 코드 블록이며, 필요할 때 호출하여 사용할 수 있습니다.

파이썬에서 함수는 def 키워드를 사용하여 정의됩니다.


1. 함수 정의하기

 

def 함수이름(매개변수1, 매개변수2, ...):
    """함수에 대한 설명(도움말 문자열)"""
    # 함수의 동작을 정의하는 코드 블록
    return 반환값

 

  • def: 함수를 정의할 때 사용하는 키워드입니다.
  • 함수이름: 함수의 이름으로, 호출할 때 사용됩니다.
  • 매개변수: 함수에 전달되는 입력값으로, 필요한 경우 여러 개를 지정할 수 있습니다.
  • """도움말 문자열""": 함수에 대한 도움말 문자열(docstring)로, 함수의 기능이나 사용법을 설명합니다.
  • return: 함수의 결과를 반환하는 키워드로, 반환할 값이 없을 때에는 생략할 수 있습니다.

 

2. 함수 호출하기

 

결과 = 함수이름(인자1, 인자2, ...)

 

  • 함수이름: 호출할 함수의 이름입니다.
  • 인자: 함수에 전달되는 입력값으로, 매개변수와 동일한 순서로 전달되어야 합니다.
  • 결과: 함수가 반환하는 값으로, 함수가 return 키워드를 사용하여 반환값을 명시한 경우에만 사용됩니다.

 

3. 함수 사용 예

 

def add(x, y):
    """두 수를 더하는 함수"""
    return x + y

result = add(3, 5)
print(result)  # 출력: 8


위의 예시는 두 개의 숫자를 더하는 함수를 정의하고 호출하는 코드입니다. 

함수 add는 두 개의 매개변수 x와 y를 받아서 두 수를 더한 결과를 반환합니다. 

이후 add 함수를 호출하여 인자로 3과 5를 전달하고, 결과를 result 변수에 저장한 후 출력합니다.

함수는 코드를 모듈화 하고 재사용성을 높이는 데 매우 유용합니다. 

적절하게 함수를 사용하면 코드를 보다 효율적으로 관리하고 유지보수할 수 있습니다.

 

 

모듈


파이썬에서 모듈은 파이썬 코드를 구성하는 단위입니다. 

모듈은 변수, 함수, 클래스 등을 포함할 수 있으며, 다른 파이썬 파일에서 이러한 요소들을 재사용할 수 있도록 합니다. 

모듈은 일반적으로 .py 확장자를 가진 파일로 저장됩니다.


1. 모듈의 생성

 

파이썬에서 모듈을 생성하는 것은 매우 간단합니다.

다음은 간단한 모듈을 생성하는 예시입니다.

# my_module.py

def greeting(name):
    print("Hello, " + name)


위의 코드는 greeting 함수를 정의한 모듈인 my_module.py를 생성하는 것입니다. 이제 이 모듈을 다른 파이썬 파일에서 불러와 사용할 수 있습니다.

 

2. 모듈의 사용

 


다른 파이썬 파일에서 모듈을 사용하기 위해서는 import 문을 사용합니다. 다음은 모듈을 사용하는 예시입니다.

# main.py

import my_module

my_module.greeting("Alice")

 

위의 코드에서 import my_module은 my_module.py 파일을 불러오고, 그 안에 정의된 greeting 함수를 사용하여 "Alice" 문자열을 전달합니다. 이제 main.py를 실행하면 "Hello, Alice"가 출력됩니다.

 

3. 모듈의 재사용


모듈은 코드의 재사용성을 높여주기 때문에 다양한 패키지나 라이브러리에서 자주 사용됩니다. 

파이썬의 표준 라이브러리도 모듈의 형태로 제공됩니다. 

예를 들어, math, random, datetime 등의 모듈은 파이썬의 기본 기능을 확장하고 다양한 기능을 제공합니다.

import math

print(math.pi)  # 원주율 출력

 

위의 코드는 math 모듈을 불러와서 원주율을 출력하는 예시입니다. 

math 모듈은 파이썬 표준 라이브러리에 포함되어 있으므로 따로 설치할 필요 없이 사용할 수 있습니다.

모듈을 사용하면 코드를 구성화하여 관리하고, 재사용성을 높일 수 있습니다. 

이는 프로그램을 작성할 때 코드의 가독성과 유지보수성을 높이는 데 도움이 됩니다.

 

내장 함수와 표준 라이브러리

 

1. 내장 함수(Built-in Functions)


내장 함수는 파이썬 인터프리터에 내장되어 있는 함수들로, 별도의 모듈을 import 하지 않고도 사용할 수 있습니다. 

몇 가지 자주 사용되는 내장 함수들을 살펴보겠습니다.

ⓐ print(): 값을 출력하는 함수입니다. 화면에 문자열, 숫자, 변수 등을 출력할 수 있습니다.

print("Hello, world!")  # 출력: Hello, world!


ⓑ len(): 리스트, 튜플, 문자열 등의 길이를 반환하는 함수입니다.

print(len([1, 2, 3]))  # 출력: 3

 

ⓒ max(): 인자로 전달된 값 중에서 최댓값을 반환합니다.

# max(iterable, *[, key, default])

print(max(4, 7, 1))  # 출력: 7

strings = ["apple", "banana", "cherry", "date"]

max_string = max(strings, key=lambda x: len(x))  # 문자열의 길이를 기준으로 최댓값을 찾습니다.

print("길이가 가장 긴 문자열:", max_string)  # "banana" 문자열의 길이가 가장 길므로 "banana"를 출력합니다.

 

ⓓ min(): 인자로 전달된 값 중에서 최솟값을 반환합니다.

# min(iterable, *[, key, default])

print(min(4, 7, 1))  # 출력: 1

strings = ["apple", "banana", "cherry", "date"]

min_string = min(strings, key=lambda x: len(x))  # 문자열의 길이를 기준으로 최솟값을 찾습니다.

print("길이가 가장 짧은 문자열:", min_string)  # "date" 문자열의 길이가 가장 짧으므로 "date"를 출력합니다.

 

ⓔ sum(): 리스트나 튜플 등의 요소들의 합을 반환합니다.

# sum(iterable, start=0)

print(sum([1, 2, 3]))  # 출력: 6 , 초기값 미지정시 0

numbers = [1, 2, 3, 4, 5]

total_with_initial_value = sum(numbers, start=10)  # numbers 리스트의 항목들의 합에 10을 더합니다.

print("리스트의 합에 초기값을 더한 결과:", total_with_initial_value)  # 1 + 2 + 3 + 4 + 5 + 10 = 25 가 출력됩니다.

 

ⓕ sorted(): 리스트나 튜플을 정렬한 새로운 리스트를 반환하는 함수입니다.

# sorted(iterable, *, key=None, reverse=False)

print(sorted([3, 1, 2]))  # 출력: [1, 2, 3] , 기본값 오름차순


fruits = ["apple", "banana", "cherry", "date"]

sorted_fruits_by_length = sorted(fruits, key=lambda x: len(x))

print("문자열의 길이에 따라 정렬된 과일:", sorted_fruits_by_length)


numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]

sorted_numbers_descending = sorted(numbers, reverse=True)

print("내림차순으로 정렬된 숫자 리스트:", sorted_numbers_descending)

 

※ sort() 와 sorted() 비교

#sort() 함수

numbers = [3, 1, 4, 2, 5]
numbers.sort()
print(numbers)  # 출력: [1, 2, 3, 4, 5]


numbers = [3, 1, 4, 2, 5]
sorted_numbers = numbers.sort()
print(sorted_numbers)  # 출력: None


#sorted() 함수

numbers = [3, 1, 4, 2, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 출력: [1, 2, 3, 4, 5]
print(numbers)  # 출력: [3, 1, 4, 2, 5]


numbers = [3, 1, 4, 2, 5]
sorted_numbers = sorted(numbers)
print(numbers)  # 출력: [3, 1, 4, 2, 5]

 

sort() 함수는 원본 리스트를 직접 정렬하며, 반환값이 없습니다.

sorted() 함수는 정렬된 새로운 리스트를 반환하며, 원본 리스트는 변경되지 않습니다.

 

따라서 원본 리스트를 변경하고자 할 때는 sort() 함수를 사용하고, 원본 리스트를 유지하면서 정렬된 새로운 리스트를 얻고자 할 때는 sorted() 함수를 사용합니다.

 

ⓖ abs(): 절댓값을 반환하는 함수입니다.

num1 = -10
num2 = 5.5
num3 = -7

abs_num1 = abs(num1)  # -10의 절댓값을 구합니다.
abs_num2 = abs(num2)  # 5.5의 절댓값을 구합니다.
abs_num3 = abs(num3)  # -7의 절댓값을 구합니다.

print("절댓값 결과:")
print("num1의 절댓값:", abs_num1)  # 출력: 10
print("num2의 절댓값:", abs_num2)  # 출력: 5.5
print("num3의 절댓값:", abs_num3)  # 출력: 7

 

ⓗ join(): 문자열을 이어 붙일때 사용되는 함수입니다.

#separator.join(iterable)

my_list = ["Hello", "world", "this", "is", "Python"]

result = " ".join(my_list)  # 리스트의 문자열 요소들을 공백을 기준으로 연결합니다.

print(result)  # 출력: "Hello world this is Python"

 

ⓘ round(): 소수점 이하를 반올림한 값을 반환하는 함수입니다.

# round(number[, ndigits])

print(round(3.14159, 2))  # 출력: 3.14

number1 = 3.14159
number2 = 2.71828

rounded_number1 = round(number1)  # 3.14159를 반올림하여 3을 반환합니다.
rounded_number2 = round(number2, 2)  # 2.71828을 소수점 이하 2자리까지 반올림하여 2.72를 반환합니다.

print("반올림 결과:")
print("number1의 반올림:", rounded_number1)  # 출력: 3
print("number2의 반올림:", rounded_number2)  # 출력: 2.72

 

ⓙ any(): 반복 가능한 객체 중 하나라도 True가 있으면 True를 반환합니다.

# any(iterable)

print(any([False, True, False]))  # 출력: True

numbers = [1, 3, 5, 7, 8]

result = any(num % 2 == 0 for num in numbers)

print("리스트에 짝수가 있는지 확인 결과:", result)  # 출력: True

 

ⓚ all(): 반복 가능한 객체의 모든 요소가 True일 때 True를 반환합니다.

# all(iterable)

print(all([True, True, True]))  # 출력: True

numbers = [2, 4, 6, 8, 10]

result = all(num > 0 for num in numbers)

print("리스트의 모든 요소가 양수인지 확인 결과:", result)  # 출력: True

 

2. 표준 라이브러리(Standard Library)

 

파이썬 표준 라이브러리는 파이썬 설치 시 기본적으로 함께 제공되는 라이브러리로, 다양한 기능을 제공합니다. 이들 중 몇 가지 주요 모듈을 살펴보겠습니다.

ⓐ math: 수학 함수와 상수를 제공하는 모듈입니다.

  • 삼각 함수: 삼각 함수에는 sin(), cos(), tan(), asin(), acos(), atan() 등이 있습니다.
  • 로그와 지수 함수: log(), log10(), exp(), sqrt() 등이 있습니다.
  • 상수: pi (원주율 π), e (자연 상수), inf (양의 무한대), nan (숫자가 아님) 등이 있습니다.
import math

# 원주율(π) 값 출력
print("원주율:", math.pi)

# 제곱근 계산
num = 16
print("16의 제곱근:", math.sqrt(num))

 

ⓑ random : 난수를 생성하는 함수를 제공하는 모듈로, 게임이나 랜덤한 데이터를 필요로 하는 프로그램에서 자주 사용됩니다.

  • random(): 0 이상 1 미만의 임의의 부동 소수점 수를 반환합니다.
  • randint(a, b): 정수 a와 b 사이의 임의의 정수를 반환합니다 (a와 b를 포함합니다).
  • uniform(a, b): a 이상 b 미만의 임의의 부동 소수점 수를 반환합니다.
  • choice(seq): 시퀀스 seq에서 임의의 요소를 선택하여 반환합니다.
  • shuffle(seq): 시퀀스 seq의 요소들을 무작위로 섞습니다.
import random

# 1부터 10 사이의 랜덤한 정수 출력
print(random.randint(1, 10))

# 리스트의 요소를 무작위로 섞기
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)

# 0 이상 1 미만의 부동 소수점 수를 반환
random_number = random.random()
print("랜덤한 부동 소수점 수:", random_number)

# 1부터 6 사이의 정수를 반환
dice_roll = random.randint(1, 6)
print("주사위 눈금:", dice_roll)

 

ⓒ datetime: 날짜와 시간을 다루는 함수를 제공하는 모듈입니다.

날짜와 시간을 처리해야 하는 프로그램에서 매우 유용합니다.

  • datetime: 날짜와 시간의 조합을 나타내는 클래스입니다.
  • date: 날짜만을 나타내는 클래스입니다.
  • time: 시간만을 나타내는 클래스입니다.
  • timedelta: 두 날짜 또는 시간 간의 차이를 나타내는 클래스입니다.

    일반적으로 사용되는 datetime 모듈의 함수들은 다음과 같습니다:

  • datetime.now(): 현재 날짜와 시간을 반환합니다.
  • datetime.today(): 현재 날짜와 시간을 반환합니다. (now()와 동일한 기능을 수행합니다.)
  • datetime.strptime(date_string, format): 문자열을 파싱하여 datetime 객체로 변환합니다.
  • datetime.strftime(format): datetime 객체를 문자열로 변환합니다.
import datetime

# 현재 시간 출력
print(datetime.datetime.now())

# 날짜 계산
today = datetime.date.today()
print(today)

# 날짜 포맷팅
print(today.strftime("%Y-%m-%d"))

# 현재 날짜와 시간을 나타내는 datetime 객체를 반환
current_datetime = datetime.datetime.now()
print("현재 날짜와 시간:", current_datetime)


# 문자열 "2022-04-05"를 %Y-%m-%d 형식에 맞게 해석하여 datetime 객체로 변환
date_string = "2022-04-05"
date_object = datetime.datetime.strptime(date_string, "%Y-%m-%d")
print("문자열을 datetime 객체로 변환한 결과:", date_object)

 

ⓓ os: 운영 체제와 상호 작용하는 함수를 제공하는 모듈로, 파일 시스템을 다루는 등 다양한 작업에 사용됩니다.

 

  • os.getcwd(): 현재 작업 디렉터리를 가져옵니다.
  • os.chdir(path): 현재 작업 디렉터리를 변경합니다.
  • os.listdir(path='.'): 지정된 경로의 파일 및 디렉터리 목록을 반환합니다.
  • os.mkdir(path): 새 디렉터리를 만듭니다.
  • os.makedirs(path): 하위 디렉터리를 포함하여 새 디렉터리를 만듭니다.
  • os.remove(path): 파일을 삭제합니다.
  • os.rmdir(path): 디렉터리를 삭제합니다.
  • os.path.join(path1, path2, ...): 경로 구성 요소들을 연결하여 하나의 경로로 결합합니다.
import os

# 현재 디렉토리 출력
print(os.getcwd())

# 디렉토리 생성
os.mkdir("new_directory")

# 파일 삭제
os.remove("file.txt")

# 현재 작업 디렉터리 가져오기
current_directory = os.getcwd()
print("현재 작업 디렉터리:", current_directory)

# 현재 디렉터리의 파일 목록 가져오기
file_list = os.listdir()
print("현재 디렉터리의 파일 목록:")
for file in file_list:
    print(file)

# 새 디렉터리 만들기
os.mkdir("new_directory")

# 새 디렉터리로 이동
os.chdir("new_directory")

# 파일 작성
with open("new_file.txt", "w") as file:
    file.write("Hello, world!\n")

 

ⓔ re: 정규 표현식을 지원하는 함수를 제공하는 모듈입니다.

 

  • re.match(pattern, string): 문자열의 시작 부분에서 패턴이 일치하는지 확인합니다.
  • re.search(pattern, string): 문자열 전체에서 패턴이 일치하는지 확인합니다.
  • re.findall(pattern, string): 문자열에서 패턴과 일치하는 모든 부분을 찾아 리스트로 반환합니다.
  • re.finditer(pattern, string): 문자열에서 패턴과 일치하는 모든 부분을 찾아 이터레이터로 반환합니다.
  • re.sub(pattern, repl, string): 문자열에서 패턴과 일치하는 부분을 대체 문자열로 교체합니다.
  • re.split(pattern, string): 문자열을 패턴을 기준으로 분할하여 리스트로 반환합니다.
import re

pattern = r'\b\w+\b'
text = "Python is a great language"
print(re.findall(pattern, text))  # 단어들을 찾아 리스트로 반환


text = "Contact us at email@example.com or support@example.com for assistance."

# 이메일 주소 추출
email_addresses = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text)

print("추출된 이메일 주소:")
for email in email_addresses:
    print(email)


text = "Hello, World! How are you today?"

# "Hello"를 "Hi"로 대체
new_text = re.sub(r'Hello', 'Hi', text)

print("대체된 텍스트:", new_text)

 

ⓕ sys: 파이썬 인터프리터와 관련된 정보 및 동작을 제어하는 함수를 제공하는 모듈입니다. 

주로 명령행 인수(arguments)를 처리하거나, 파이썬 인터프리터와 상호 작용하는 프로그램에서 사용됩니다.

 

  • sys.argv: 명령줄 인수(argument)에 접근할 수 있는 리스트입니다.
  • sys.exit(): 프로그램을 종료합니다.
  • sys.platform: 현재 실행 중인 플랫폼을 나타내는 문자열을 제공합니다 (예: "win32", "linux").
  • sys.version: 현재 파이썬 버전을 나타내는 문자열을 제공합니다.
  • sys.path: 모듈을 검색하는 경로가 들어 있는 리스트입니다.
  • sys.stdin, sys.stdout, sys.stderr: 표준 입력, 표준 출력, 표준 오류 스트림을 나타내는 파일 객체입니다.
import sys

# 명령행 인수(arguments) 출력
print(sys.argv)

# 파이썬 버전 정보 출력
print(sys.version)

platform = sys.platform
print("현재 시스템의 플랫폼:", platform)

 

ⓖ json: JSON 데이터를 다루는 함수를 제공하는 모듈로, 웹 프로그래밍이나 데이터 분석에서 자주 사용됩니다.

 

  • json.dumps(): 파이썬 객체를 JSON 문자열로 직렬화합니다.
  • json.loads(): JSON 문자열을 파이썬 객체로 역직렬화합니다.
  • json.dump(): 파이썬 객체를 JSON 파일로 직렬화하여 저장합니다.
  • json.load(): JSON 파일을 읽고 파이썬 객체로 역직렬화합니다.
import json

# 파이썬 딕셔너리
data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

# 파이썬 객체를 JSON 문자열로 직렬화
json_string = json.dumps(data)
print("JSON 문자열:", json_string)

# JSON 문자열을 파이썬 객체로 역직렬화
parsed_data = json.loads(json_string)
print("파이썬 객체:", parsed_data)


# 파이썬 딕셔너리
data = {
    "name": "Alice",
    "age": 25,
    "city": "London"
}

# 파이썬 객체를 JSON 파일로 저장
with open("data.json", "w") as json_file:
    json.dump(data, json_file)

# JSON 파일을 읽고 파이썬 객체로 역직렬화
with open("data.json", "r") as json_file:
    loaded_data = json.load(json_file)

print("파이썬 객체:", loaded_data)

 

ⓗ urllib: URL을 다루고 웹에 있는 데이터를 가져오는 기능을 제공합니다.

 

  • urllib.request.urlopen(): 주어진 URL을 열고 데이터를 읽어오는 함수입니다.
  • urllib.parse.urlencode(): URL 쿼리 문자열을 인코딩하는 함수입니다.
  • urllib.parse.parse_qs(): URL 쿼리 문자열을 디코딩하여 딕셔너리로 변환하는 함수입니다.
  • urllib.parse.urljoin(): 상대 URL을 절대 URL로 변환하는 함수입니다.
import urllib.request

# 웹 페이지 URL
url = "https://www.example.com"

# URL 열기
response = urllib.request.urlopen(url)

# HTML 가져오기
html_content = response.read()

# HTML 출력
print(html_content)
import urllib.parse

# 쿼리 문자열을 인코딩
query_params = {'q': 'python', 'page': 1}
encoded_query = urllib.parse.urlencode(query_params)

print("인코딩된 쿼리 문자열:", encoded_query)

 

ⓘ csv: CSV 파일을 다루는 함수를 제공합니다.

 

  • csv.reader(): CSV 파일을 읽는 데 사용되는 reader 객체를 생성합니다.
  • csv.writer(): CSV 파일을 쓰는 데 사용되는 writer 객체를 생성합니다.
  • csv.DictReader(): CSV 파일의 각 행을 딕셔너리로 읽는 데 사용되는 reader 객체를 생성합니다.
  • csv.DictWriter(): CSV 파일에 딕셔너리의 내용을 쓰는 데 사용되는 writer 객체를 생성합니다.
import csv

# CSV 파일 열기
with open('data.csv', newline='') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)
import csv

# CSV 파일에 쓸 데이터
data = [
    ['Name', 'Age', 'City'],
    ['John', 30, 'New York'],
    ['Alice', 25, 'London'],
    ['Bob', 35, 'Paris']
]

# CSV 파일 쓰기
with open('output.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows(data)

 

이러한 내장 함수와 표준 라이브러리를 활용하면 다양한 기능을 손쉽게 구현할 수 있습니다. 필요한 기능이 있을 때마다 내장 함수와 표준 라이브러리를 찾아보고 활용하는 것이 좋습니다.