Boostcamp AI Tech

[Boostcamp Day-2] Python - String and advanced function concept

ju_young 2021. 8. 3. 22:18
728x90

문자열(String)

시퀀스 자료형으로 문자형 data를 메모리에 저장하며 영문자 한 글자는 1byte의 메모리공간을 사용한다.

인덱싱(Indexing), 슬라이싱(Slicing)

문자열의 각 문자는 개별 주소를 가지기 때문에 리스트와 같이 인덱싱과 슬라이싱이 가능하다.

a = 'abcde'
print(a[0], a[4])

a ="Artificial Intelligence and Machine Learning"
print(a[:4]

문자열 연산

문자열끼리의 연산은 리스트의 연산과 거의 동일하다고 보면 된다.

a = 'abc'
b = 'de'
print(a + b)
# >> abcde
print(a * 2)
# >> abcabc

문자열 함수

문자열 함수로는 다음과 같은 것들이 있다.

이스케이프 문자

특수 문자라고도 불리며 다음과 같은 것들이 있다.

raw string

앞서 말한 이스케이프 문자를 무시하고 문자 그대로를 출력해준다.

print(r'\n')

파이썬 함수 호출 방식

Call by Object Reference

def y(a):
    a.append(1)
    a = [2, 3]
x = [0]
y(x)
print(x)
# >> [0, 1]

위 코드에서 보면 y라는 함수를 사용하여 리스트 a에 1을 추가하고 [2, 3]리스트로 지정해주었지만 print 문으로 확인한 결과 [0, 1]이 출력되었다. 여기서 y라는 함수가 a라는 리스트에 1을 추가한다는 것은 기존 객체의 주소값에 1을 추가한다는 것이고 a에 [2, 3]을 지정한 것은 새로운 객체를 생성한 것과 같다. 즉, 새로 생성한 객체를 return 하지 않은 이상 기존 객체에 영향을 주지 않는다.

swap

스왑을 함수로 다음과 같이 작성했다고 하자.

def a(x, y):
    temp = x
    x = y
    y = temp

def b(offset_x, offset_y):
    temp = a[offset_x]
    a[offset_x] = a[offset_y]
    a[offset_y] = temp

def c(list, offset_x, offset_y):
    temp = liset[offset_x]
    list[offset_x] = list[offset_y]
    list[offset_y] = temp

이때 실제로 스왑이 일어난 함수는 b함수와 c함수로 객체의 주소 값을 받아 변경할 때만 수행된다는 것을 확인할 수 있다.

function - scoping rule

def test(x):
    print(y)
    a = 10
    print(x)
x = 5
test(x)
print(a)

위 코드에서 x를 전역 변수 a를 지역 변수라고 한다. 전역 변수는 프로그램 전체에서 사용 가능하고 함수에서도 사용가능하지만 지역 변수는 함수내에서만 사용 가능하다. 만약 함수 내에 전역 변수와 같은 이름의 변수를 선언하면 새로운 지역 변수가 생긴다.

 

전역 변수를 함수 내에서 사용 시 다음과 같이 global 키워드를 사용한다.

def test():
    global x
    print(x)
x = 5

재귀함수(recursive function)

재귀함수는 자기자신을 호출하는 함수이다. 다시 말해 함수내에 또 자신을 호출한다는 것이다. 대표적으로 팩토리얼 문제에 재귀함수를 사용할 수 있다.

def factorial(n):
    if n == 1:
        return 1
    else:
        return n + factorial(n - 1)

function type hints

다음과 같이 변수 또는 함수 옆에 타입이 무엇인지 적어놓을 수 있다.

def x(a : str) -> str:
    return 'abc'

type hint의 장점으로 사용자에게 인터페이스를 명확히 알려줄 수 있고 문서화시 parameter에 대한 정보를 명확히 알 수 있다. 또한 mypy 또는 IDE, linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인할 수 있다.

function docstring

파이썬 함수에 대한 상세 스펙을 다음과 같이 사전에 작성하는 것을 말한다.

728x90