시퀀스 자료형으로 문자형 data를 메모리에 저장
문자 하나하나가 1byte의 메모리 공간을 사용
각 데이터 타입 별로 메모리 공간을 할당 받은 크기가 다르다.
ex ) int 는 4byte , float 타입은 8byte 의 크기를 할당 받아 표현 범위의 차이가 크다.
인덱싱(Indexing)
a = "abcde"
print(a[0],a[4])
>>> a e
슬라이싱(Slicing)
Text = "Artificial Intelligence and Machine Learning"
print(a[0:6], " AND " , a[-9:])
>>> Artifi AND Learning
문자열 함수
함수명 | 기능 |
---|---|
len(a) | 문자열의 문자 개수를 반환 |
a.upper() | 대문자로 변환 |
a.lower() | 소문자로 변환 |
a.capitalize() | 첫 문자를 대문자로 변환 |
a.title() | 제목형태로 변환, 띄워쓰기 후 첫 글자만 대문자 |
a.count(’abc’) | 문자열 a에 ‘abc’가 들어간 횟수 반환 |
a.find(’abc’) | 문자열 a에 ‘abc’가 들어간 위치 처음 위치 반환 |
a.rfind(’abc’) | 문자열 a에 ‘abc’가 들어간 위치 중 마지막 위치 반환 |
a.startswith(’abc’) | ‘abc’로 시작하는 문자열 여부 반환 |
a.endswith(’abc’) | ‘abc’로 끝나는 문자열 여부 반환 |
a.isdigit() | 문자열 a가 숫자인지 아닌지 여부 반환 |
# "It's OK." 라는 문자열 선언
a = 'It\'s OK.'
a = "It's OK."
a = """It's OK
I'm Happy.
See you."""
특수 문자
문자 | 설명 |
---|---|
\ [Enter] | 다음 줄과 연속임을 표현 |
\ | \ 문자 자체 |
\n | 줄 바꾸기 |
\t | TAB 키 |
\e | ESC 키 |
\’ | ‘ 문자 |
\” | “ 문자 |
\b | 백 스페이스 |
Call by object reference
파이썬의 어떤 함수내에서 parameter를 전달할 때 메모리를 어떻게 처리하는가?
값에 의한 호출(Call by Value)
참조에 의한 호출(Call by Reference)
객체 참조에 의한 호출(Call by Object Reference)
def spam(eggs):
eggs.append(1) # 햄과 에그는 같은 메모리 공간을 가르키기 때문에 1이 추가
eggs = [2,3] # 새로운 객체 생성
ham = [0] # 햄은 0
spam(ham) # 스팸에 햄을 넣어서 햄이 에그가 됨
print(ham) # 따라서 햄은 [0,1]
>>> [0,1]
swap
# 메모리는 고정 되어있기 때문에 전체 리스트에는 영향이 없다
def swap_value(x,y):
temp = x
x = y
y = temp
def swap_offset(offset_x,offset_y):
temp = a[offset_x]
a[offset_x] = a[offset_y] # 좌변에 할당
a[offset_y] = temp # 리스트 자체의 값을 만지기 때문에 변화가 일어난다
def swap_reference(list,offset_x,offset_y): # 리스트 값이 이미 들어가있고,
temp = list[offset_x]
list[offset_x] = list[offset_y] # 리스트의 메모리가 그대로 유지되기 때문에 변화가 나타난다
list[offset_y] = temp
Scoping rule
def test(t):
t = 20
print("In Function :",t) # 20
x = 10
print("Before : ", x) # 10
test(x)
print("After : ", x) # 10
def f():
global s # 전역 변수 사용
s = "I love London!" # 새로운 지역변수 생성
print(s) # I love London!
s = "I love Paris!"
f() # global에 의해 s의 변화가 나타남
print(s) # I love London!
Recursive functioin(재귀 함수)
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(int(input("Input Number of Factorial Calculation: "))))
Type hints
def type_hint_example(name:str) -> str:
return f"Hello, {name}"
Docstring
함수 사용자의 이행도를 높이기 위해 파이썬 함수에 대한 목적, 파라미터, 설명 등을 사전에 작성
vscode에서 docstring generator를 통해 편리하게 작성할 수 있다.
기본적으로 함수는 간결하고 명확하게 작성할 것
함수 이름에 함수의 역할,의도가 명확히 들어날 수 있도록 생성
인자로 받은 값 자체를 바꾸지는 말 것 → 복사를 사용해 다룬다면 OK
공통적으로 나타나는 부분과 복잡한 수식은 함수로 구현해 간결하게 나타내기
컴퓨터보다는 사람이 이해할 수 있는 코드를 짜기
코딩 컨벤션
팀 혹은 프로젝트 마다 규칙을 정해 코드의 일관성을 띄어야 함
ex ) 들여쓰기는 4space OR Tab , 불필요한 공백 피하기, 연산자는 1칸 이상 띄우지 않는다 등