[ String and advanced function concept ]
문자열 ( String )
문자열( string ) : 시퀀스 자료형으로 문자형 데이터를 메모리에 저장
영문자 한 글자는 1byte의 메모리 공간을 사용
* 1 byte = 8 bits = 2^8 = 256 까지 저장 가능
* UTF-8에서 8은 8bits를 의미한다.
문자열의 각 문자는 개별 주소인 offset을 가진다. offset을 이용해서 할당된 값을 가져오는 것을 인덱싱이라 한다.
( List와 같은 형태로 데이터를 처리한다. → 문자열 slicing 가능, )
| len(a) | 문자열의 길이 및 문자 개수 반환 |
| a.upper() / a.lower() | 문자열을 대문자 / 소문자로 변환 |
| a.capitalize() | 문자열의 첫 문자를 대문자로 변환 |
| a.title() | 문자열을 제목 형태로 변환 → 띄어쓰기 후 첫 글자만 대문자 |
| a.count('abc') | 문자열에 인자값이 들어간 횟수 반환 |
| a.find('abc') a.rfind('abc') |
문자열에 인자값이 들어간 offset 반환 |
| a.startswith('abc') | 문자열이 인자값으로 시작하는지 boolean 값 반환 |
| a.endswith('abc') | 문자열이 인자값으로 끝나는지 boolean 값 반환 |
| a.isdigit() | 문자열이 십진수로 변환이 가능한지 boolean 값 반환 |
ex) 인피니트 - Paradise 노래에서 'Paradise'가 몇번 나오는지 출력하는 함수 구하기
open으로 연 파일의 문자열을 한줄씩 읽기 위해서는 readline() 메소드를 활용
strip() 메소드는 양쪽 공백을 제거해준다.
f = open('Paradise.txt', 'r', encoding="UTF-8")
my_lyric = ""
while True :
line = f.readline()
if not line :
break
my_lyric = my_lyric + line.strip() + "\n"
f.close()
count = my_lyric.lower().count('paradise')
print("Paradise 출력횟수 :", count) # 13
call by object reference
함수에서 Parameter를 전달하는 방식은 총 3가지가 존재.
| Call by Value ( 값에 의한 호출 ) | 함수에 인자를 넘길 때 값만 넘김. 함수 내에 인자값 변경시, 호출자에게 영향을 주지 않음 |
| Call by Reference ( 참조에 의한 호출 ) | 함수에 인자를 넘길 때 메모리 주소를 넘김. 함수내에 인자값 변경시, 호출자의 값도 변경됨 |
| Call by Object Reference ( 객체 참조에 의한 호출 ) | 객체의 주소가 함수로 전달되는 방식 |
파이썬은 객체의 주소가 함수로 전달되는 방식인 Call by Object Reference 이다.
전달된 객체를 참조하여 변경시 호출자에게 영향을 주나, 새로운 객체를 만들 경우 호출자에게 영향을 주지 않는다.
def spam(eggs):
eggs.append(1) # 기존 객체의 주소값에 [1] 추가
eggs = [2,3] # 새로운 객체 생성
print(eggs) # [2, 3]
ham = [0]
spam(ham)
print(ham) # [0, 1]
ham이 spam()의 인자값으로 들어가게 되면 ham과 spam()의 파라미터인 eggs는 같은 주소를 가리키게 된다.
append 함수를 사용하면 ham과 eggs가 가리키고 있는 같은 주소에 [1]이 추가되지만 eggs = [2,3] 같이
새로운 객체를 생성해 줄 경우는 eggs는 [2,3]이 들어있는 다른 주소를 가리키게 된다. 그래서 결과값은 [0,1]이다.
* swap
1. 리스트 자체가 들어가지 않고 값들만 들어갈 경우는 각각의 값을 가리키는 주소만 바뀔 뿐 실제 값은 변하지 않는다.
x, y에 들어가는 값들만 주소가 바뀌기 때문에 리스트의 자체에는 아무런 영향을 끼치지 않는다.
def swap_value(x,y) :
temp = x
x = y
y = temp
2. 리스트가 들어가지 않고 index 들만 들어가게 될 경우는 리스트 자체를 만지기 때문에 리스트의 값이 변한다.
def swap_index(index_x, index_y):
temp = ex[index_x]
ex[index_x] = ex[index_y]
ex[index_y] = temp
ex = [1,2,3,4,5]
swap_index(0,1)
print(ex) # [2, 1, 3, 4, 5]
3. index 뿐만 아니라 리스트도 같이 swap 함수에 전달할 경우는 리스트 전체 값이 들어가 있기 때문에
리스트의 객체가 그대로 유지가 된다. 새로 할당을 안받았기 때문에 메모리의 주소가 그대로 유지된다.
def swap_reference( list_ex, index_x, index_y) :
temp = list_ex[index_x]
list_ex[index_x] = list_ex[index_y]
list_ex[index_y] = temp
ex = [1,2,3,4,5]
swap_reference(ex,1,4)
print(ex) # [1, 5, 3, 4, 2]
function - scoping rule
변수의 범위( Scoping Rule ) : 변수가 사용되는 범위
| 지역변수 ( Local Variable ) | 함수 내에서만 사용 |
| 전역변수 ( Global Variable ) | 프로그램 전체에서 사용 |
def game():
g = "Lost Ark"
print(g)
g = "Battle Ground"
game()
print(g)
# Lost Ark
# Battle Ground
전역변수와 지역변수는 같은 이름으로 선언될 수 있지만 같은 값이 아니다.
함수 내에 전역 변수와 같은 이름의 변수를 선언하면 새로운 지역변수가 생성된다.
함수 내에서 전역변수를 사용할 경우 global 키워드를 사용해야한다.
def game():
global g
g = "Lost Ark"
print(g)
g = "Battle Ground"
game()
print(g)
# Lost Ark
# Lost Ark
재귀함수 ( recursive function )
재귀함수는 자기 자신을 호출하는 함수이다. 재귀문이 종료하는 조건이 존재하며, 종료 조건까지 함수 호출을 반복한다.
def factorial(n) :
if n == 0 :
return 1
else :
return n * factorial(n-1)
number = int(input("숫자 입력 : "))
print(factorial(number))
function type hints
파이썬의 가장 큰 특징으로는 dynamic typing이 있다.
function type hints는 동적 타입 언어인 파이썬에서도 정적 타입 언어처럼 자료형을 표시할 수 있게 해주는 기능이다.
def do_function(name : str) -> str :
return name
type hints의 장점으로는 사용자에게 인터페이스를 명확하게 알려줄 수 있고, 함수의 문서화 시 파라미터에 대한
정보를 명확히 알 수 있다. 또한 시스템의 전체적인 안정성을 확보할 수 있다.
docstring
docstring은 함수 사용자의 이해도를 높이기 위해서 파이썬 함수에 대한 상세한 설명을 사전에 작성하는 것이다.
함수의 목적을 사전에 정의해서 적을 수 있다. """로 함수명 바로 아래에 적어주면 된다.
def my_name(name) :
"""
자기소개하는 함수입니다:)
"""
return f"제 이름은 {name}입니다."'Python > 네이버 부스트코스 AI BASIC 코칭스터디' 카테고리의 다른 글
| [ AI 코칭스터디 ] 2주차 학습 ( Python Object Oriented Programming ) (0) | 2022.01.24 |
|---|---|
| [ AI 코칭스터디 ] 1주차 학습 ( Python Data Structure ) (0) | 2022.01.21 |
| [ AI 코칭스터디 ] 1주차 학습 ( Conditionals and Loops ) (0) | 2022.01.19 |
| [ AI 코칭스터디 ] 1주차 학습 ( Function and Console I/O ) (0) | 2022.01.18 |
| [ AI 코칭스터디 ] 1주차 학습 ( Variables ) (0) | 2022.01.17 |