* String and advanced function concept
🐍 Python의 문자열과 함수
📌 문자열(String)
: 시퀀스 자료형으로 문자형 data를 메모리에 저장한다.
영문자 한 글자는 1byte의 메모리 공간 사용
1byte = 8bit = 2**8 = 256
1bit는 0 또는 1
데이터 타입별로 메모리 공간 할당 크기가 다르다.
문자열 인덱싱(String Indexing)
: 문자열의 각 문자는 개별 주소(offset)를 가진다. 이 주소를 사용해 할당한 값을 가져오는 것이 인덱싱.
문자열도 연산이 가능하다.
🌟 알아두면 좋은 문자열 함수
특수 문자 표현
📌 함수(function)
함수 호출 방식
1. 값에 의한 호출(Call by Value)
: 함수에 인자를 넘길 때 값만 넘김. 함수 내에 인자 값 변경 시, 호출자에게 영향을 주지 않음
2. 참조에 의한 호출(Call by Reference)
: 함수에 인자를 넘길 때 메모리 주소를 넘김. 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨
3. 객체 참조에 의한 호출(Call by Object Reference)
값 교환 Swap
: 함수를 통해 변수 간의 값을 교환(Swap)하는 함수
- 1번의 예시 : 값 변하지 않음
# function - swap ❌
def swap_value(x, y):
temp = x
x = y
y = temp
- 2번의 예시 : ex 리스트의 전역 변수 값을 직접 변경
# 리스트 자체를 바꿈
def swap_offset(offset_x, offset_y):
temp = ex[offset_x]
ex[offset_x] = ex[offset_y]
ex[offset_y] = temp
- 3번의 예시 : ex 리스트 객체의 주소 값을 받아 값을 변경
# 가장 이상적
# 객체를 유지하며 쓸 수 있는 함수
# 값은 항상 복사해서 사용하는 것이 좋음
def swap_reference (list_ex, offset_x, offset_y):
temp = list_ex[offset_x] # 4
list_ex[offset_x] = list_ex[offset_y] # list_ex[3] = 5
list_ex[offset_y] = temp # list_ex[4] = 4
범위 Scoping
지역 변수(local variable) : 함수 내에서만 사용 (프로세스의 stack_임시 데이터(함수 호출, 지역 변수))
전역 변수(Global variable) : 프로그램 전체에서 사용 (프로세스의 data_전역 변수, 초기화된 데이터)
# scope
# 함수 내 전역변수 사용시 global 키워드 사용
def f():
global s
s = "I LOVE PIZZA"
print(s)
s = "I LOVE PASTA"
f() # I LOVE PIZZA
print(s) # I LOVE PIZZA
재귀 함수(recursive function)
: 자기 자신을 호출하는 함수, 점화식과 같은 재귀적 수학 모형을 표현할 때 사용
재귀 종료 조건 존재, 종료 조건까지 함수 호출 반복
- 재귀 함수로 Factorial 구현
# 재귀 종료 조건(n == 1)까지 함수호출 반복
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(int(input("Input Number for Factorial: "))))
- 반복문으로 Factorial 구현
# 연습문제: 재귀함수 코드를 일반 loop 코드로 변경
def factorial():
n = int(input("Input Number for Factorial: "))
result = 1;
for i in range(1, n+1):
result *= i
return result
factorial()
강의를 들으며 손코딩 하지 말고 직접 해보자!
코드는 하나의 보고서이다.
읽기 좋은 코드가 좋은 코드이다.
더 자세한 내용은 실제 강의를 들어보길 추천합니다 🙂
※ 위 내용은 부스트코스(boostcourse) 인공지능(AI) 기초 다지기 강의를 듣고 공부하며 내용을 정리한 글입니다.