Python에는 여러가지 자료형이 있다. 이번 포스팅에서는 기초적인 변수 선언부터, 중간에 의문을 가졌던 함수와 메소드의 차이를 정리했다.
변수
- 변수는 값을 담는 그릇으로, 재사용을 위한 목적으로 사용된다.
- 변수 선언은 "변수 = 값" 형태로 이뤄진다.
- 변수의 이름은 다른 사람이 봐도 해당 변수의 의미를 알 수 있도록, 적절한 단어를 사용하는 것이 좋다.
- 변수에 대입된 값에 의해 변수의 자료형이 결정된다.
# 변수 선언
my_var = 10
print(my_var) # 출력 : 10
type(my_var) # int
키워드
Python 키워드는 자체 사용 목적으로 이미 예약된 문자열로, 변수나 함수 이름 등의 식별자로 사용할 수 없다.
# Python 키워드 확인
import keyword
print(keyword.kwlist)
식별자
- 식별자는 변수나 함수 등의 이름을 위해 사용하는 단어
- 식별자는 특정 규칙을 가지며, 대/소문자를 구분하므로 주로 소문자 사용이 권장된다. 가독성을 위해 언더바(_)와 영어 단어를 적절히 섞어 사용하는 것이 좋다.
- 키워드, 특수 문자(언더바 제외), 공백 포함, 숫자 시작 금지
연산자
Python은 일반적으로 알고 있는 연산 방법과, 값을 비교하거나 대입하는 등 다양한 연산자를 가지고 있다.
- 산술 연산자 : 사칙연산(+, - ,* , /), 몫(//), 나머지(%), 제곱(**) 연산자
- 비교 연산자 : 같음(=), 같지 않음(!=)으로 True or False를 반환
- 복합 대입 연산자 : 연산과 대입을 동시에 수행
- 논리 연산자 : and, or, not으로 두 개 이상의 조건을 연결
- 멤버 연산자 : in, not in으로 어떤 값이 특정 객체의 요소인지 확인
- 식별 연산자 : is, is not으로 두 객체가 동일한 객체인지 확인, 값의 같음을 비교하는 비교 연산자와는 조금 다른 의미
# 산술 연산자
a//b # 몫
a % b # 나머지
a ** 2 # 제곱
# 비교 연산자
a == b # "같다" 비교
# 문자열 비교
s1 = 'A'
s2 = 'a'
print(s1 == s2) # False
print(s1 < s2) # True
# ASCII 값 비교
print(ord('A'), ord('a'))
# 복합 대입 연산자
val = 7
val += 7
val -= 2
val *= 2
val /= 5
print(val) # 4.8
# 논리 연산자
a = 10
print(a >= 7 and a <= 12) # True
b = 15
print(3 <= b <= 12) # False
# 멤버 연산자
d = [13,52,647,2]
print(13 in d) # True
print(41 not in d) # True
# 식별 연산자
x = [1,3,5]
y = [1,3,5]
z = x
print(x == y) # True
print(x == z) # True
print(x is y) # False
print(x is z) # True
Python은 ASCII Code에 따라 문자의 대문자와 소문자를 비교하는 경우 소문자의 값이 더 크다고 출력한다. ASCII 코드는 컴퓨터에서 문자를 표현하는 표준적인 방법이다. 각 문자는 고유의 숫자값을 가지며, 이 숫자값은 컴퓨터가 문자를 인식하고 처리하는 데 사용된다.
영문 대문자와 소문자의 ASCII 값은 다르게 설정되어 있다. 대문자 'A'의 ASCII 값은 65이고, 소문자 'a'의 ASCII 값은 97이다. 따라서 Python은 문자의 대소 비교에서 알파벳 순서가 아닌, ASCII 값에 따라 소문자를 대문자보다 큰 값으로 판단한다.
기본 자료형
- 정수형: 음의 정수, 0, 양의 정수를 포함하며, 정수 끼리의 연산 결과가 실수가 될 수 있다.
- 실수형: 소수점을 표시할 수 있는 숫자를 포함
- 부울형: 논리 자료형으로, 참(True)과 거짓(False)을 나타내는 자료형이다. 주로 조건문이나 반복문에 사용된다.
- 자료형 변환: float(), int(), str(), bool() 함수를 사용해 자료형을 변환
- 날짜 시간 자료형: Python은 기본적으로 날짜와 시간 관련 자료형을 제공하지 않으므로, 필요할 경우 datetime 라이브러리를 사용
# 정수형
integer = 10
print(type(integer)) # 출력: <class 'int'>
# 실수형
floating_point = 10.5
print(type(floating_point)) # 출력: <class 'float'>
# 부울형
boolean = True
print(type(boolean)) # 출력: <class 'bool'>
# 자료형 변환
string = "100"
print(type(string)) # 출력: <class 'str'>
converted = int(string)
print(type(converted)) # 출력: <class 'int'>
# 날짜 시간 자료형
from datetime import datetime
current_datetime = datetime.datetime.now()
print(current_datetime) # 출력: 현재 날짜와 시간
date_only = current_datetime.date()
print(date_only) # 출력: 현재 날짜
time_only = current_datetime.time()
print(time_only) # 출력: 현재 시간
# 날짜 시간 정보 표시
print('날짜와 시간:', dt)
print('년:', dt.year)
print('월:', dt.month)
print('일:', dt.day)
print('시:', dt.hour)
print('분:', dt.minute)
print('초:', dt.second)
문자열 자료형
1. 문자열 자료형
- Python에서 문자열은 큰 따옴표나 작은 따옴표를 사용해 표현
- 문자열 길이는 len() 함수를 이용해 확인
- 문자열 나열은 콤마 없이 나열하여 합치거나, 콤마로 구분하여 튜플 형태로 제작
- 여러 줄 문자열은 따옴표 세 개나 \n을 사용해 표현할 수 있으며, print() 함수를 통해 출력
- 문자열에 따옴표를 넣을 때는 큰 따옴표 안에 작은 따옴표를, 작은 따옴표 안에 큰 따옴표를 사용하거나, \' 또는 \"를 사용
# 문자열 선언
my_str = "Hello, World!"
# 문자열 길이 확인
print(len(my_str)) # 출력: 13
# 여러 줄 문자열
multi_str = """Hello,
World!"""
print(multi_str)
# 따옴표를 포함한 문자열
quote_str = 'He said, "Hello, World!"'
print(quote_str)
2. format 메서드
- 문자열 일부분을 변경하며 재사용할 때는 문자열 포맷팅을 사용하며, 이는 문자열.format() 형태로 사용
- format 메서드는 대부분 print() 함수 안에서 사용됨
- format 메서드로 출력되는 값 순서, 자리수 등을 제어할 수 있으며, 최근에는 f-string이 많이 사용됨
import math
# format 메서드 사용
formatted_str = "Hello, {}!".format("Python")
print(formatted_str) # 출력: Hello, Python!
# f-string 사용
name = "Python"
f_str = f"Hello, {name}!"
print(f_str) # 출력: Hello, Python!
# 세밀한 출력
print('{:.5f}'.format(math.pi)) # 소수점 자리수 제한(3.14159)
print('[{0}] [{1}]'.format('빵빵이', 150)) # 위치 지정
print('[{0:10}] [{1:6}]'.format('빵빵이', 120)) # 기본 정렬
print('[{0:>10}] [{1:<6}]'.format('빵빵이', 1700)) # 오른쪽, 왼쪽 정렬
print('[{0:^10}] [{1:^6}]'.format('빵빵이', 3200)) # 가운데 정렬
print('[{0:-^10}] [{1:_^6}]'.format('빵빵이', 200)) # 공백 다른 문자로 채우기
3. 문자열 인덱싱 및 슬라이싱
- 문자열은 문자 요소가 모여 만들어진 자료형이며, 인덱싱과 슬라이싱으로 특정 요소나 범위의 요소를 조회
- 인덱스는 0부터 시작하며, 문자열 인덱싱과 슬라이싱은 리스트와 비슷한 특성을 가짐
# 문자열 인덱싱
print(my_str[0]) # 출력: H
# 문자열 슬라이싱
print(my_str[0:5]) # 출력: Hello
print(my_str[-1]) # 출력: !
4. 문자열 관련 주요 메서드
- 대/소문자 변환: capitalize(), title(), upper(), lower() 사용
- 자릿수 지정과 정렬: rjust(x), ljust(x), center(x) 사용
- 일부 변경 및 제거: replace(x, y), strip(x) 사용
- 분리와 연결: split(x), x.join(s) 사용
# 대/소문자 변환
print(my_str.upper()) # 출력: HELLO, WORLD!
print(my_str.lower()) # 출력: hello, world!
# 정렬
print(my_str.center(20)) # 출력: Hello, World!
# 일부 변경 및 제거
print(my_str.replace("World", "Python")) # 출력: Hello, Python!
# 분리와 연결
split_str = my_str.split(", ")
print(split_str) # 출력: ['Hello', 'World!']
joined_str = ", ".join(split_str)
print(joined_str) # 출력: Hello, World!
자료형에서 메서드와 함수라는 용어가 계속 반복되고 있다. 두 개 모두 특정 작업을 수행하는 코드의 집합이지만, 분명한 차이가 존재한다.
함수(Function) : 함수는 특정 작업을 수행하는 독립적인 코드의 묶음이다. 함수는 입력값을 받아 처리하고, 결과를 반환하는 역할을 수행한다. Python은 기본적으로 print()와 같은 내장 함수(built-in-function)를 제공하며, 필요한 경우 def 구문을 활용해 사용자 정의 함수(user-defined-function)으로 함수를 정의할 수 있다. 함수는 독립적으로 존재하므로, 객체의 상태에 직접 접근할 수 없다.
메서드(Method) : 메서드는 클래스(Class)에 속한 함수를 말하며, 해당 클래스의 instance(객체)에서만 호출할 수 있다. 메서드는 self라는 특별한 인자를 통해 객체의 속성이나 다른 메서드에 접근할 수 있다. 즉, 객체의 상태를 변경하거나 객체의 행동을 조절하는 역할을 수행한다.
# 함수 정의: 리스트를 받아 새로운 리스트를 반환하는 함수
def append_number_func(lst):
new_lst = lst.copy()
new_lst.append(10)
return new_lst
# 함수 호출
original_list = [1, 2, 3]
result_function = append_number_func(original_list)
print("Original list after function: ", original_list)
print("Function result: ", result_function)
# 클래스 정의: 리스트를 속성으로 가지고, 메서드를 통해 리스트 속성을 변경하는 클래스
class MyClass:
def __init__(self, lst):
self.lst = lst
def append_number_method(self):
self.lst.append(10)
return self.lst
# 클래스의 인스턴스 생성
my_class = MyClass([1, 2, 3])
# 메서드 호출
result_method = my_class.append_number_method()
print("Original list after method: ", my_class.lst)
print("Method result: ", result_method)
Original list after function: [1, 2, 3]
Function result: [1, 2, 3, 10]
Original list after method: [1, 2, 3, 10]
Method result: [1, 2, 3, 10]
위의 코드를 실행하면, append_number_func() 함수는 원본 list에 변화를 주지 않고 새로운 리스트를 반환한다. 반면, MyClass Class의 append_number_method() 메서드는 객체의 list 속성 자체를 변경하는 것을 확인할 수 있다.
'Aivle > Python' 카테고리의 다른 글
| [에이블스쿨] 가설 검정 및 이변량 분석 (0) | 2024.03.17 |
|---|---|
| [에이블스쿨] 단변량 분석 (0) | 2024.03.15 |
| [에이블스쿨] Pandas (0) | 2024.03.08 |
| [에이블스쿨] 제어문과 함수 (2) | 2024.03.04 |
| [에이블스쿨] 컨테이너 자료형 (0) | 2024.03.02 |