240729 TIL #454 Python String / 함수 호출 방식

김춘복·2024년 7월 29일
0

TIL : Today I Learned

목록 보기
455/494

Today I Learned

이번주 동안은 부스트캠프 AI Tech가 정식으로 시작하기 전에 온보딩 클래스를 시작한다. 대부분 한번씩 다 배운 내용이지만 파이썬과 머신러닝에 대한 내용을 복습하기 좋은 시간이다. 열심히 해보자!


String

시퀀스 자료형으로 문자형 data를 메모리에 저장한다.

  • 영문자 한 글자는 1byte(= 8bit = 2^8 = 256)를 사용한다.
    String은 1byte 크기로 한 글자씩 메모리 공간을 할당해 저장한다.

  • 컴퓨터는 문자를 2진수로 인식한다. UTF-8 같은 포맷이 문자를 2진수로 변환하는 인코딩 방식이다.

  • 문자열의 각 문자는 개별 주소(offset)을 가진다. 이 주소를 활용해 indexing을 할 수 있다.
    왼쪽은 0부터, 오른쪽은 -1부터 시작한다.

a = "smart"
print(a[0]) # s
print(a[-1]) # t
print(a[:2]) # sm
print(a[-2:] # rt
  • String 함수
함수설명예제
len(s)문자열의 길이를 반환len("hello")5
s.lower()문자열을 소문자로 변환"HELLO".lower()"hello"
s.upper()문자열을 대문자로 변환"hello".upper()"HELLO"
s.capitalize()문자열의 첫 글자를 대문자로 변환"hello".capitalize()"Hello"
s.title()문자열의 각 단어의 첫 글자를 대문자로 변환"hello world".title()"Hello World"
s.strip()문자열의 양쪽 끝에 있는 공백 문자를 제거" hello ".strip()"hello"
s.split(sep=None)문자열을 주어진 구분자(sep)로 나누어 리스트로 반환"a,b,c".split(",")["a", "b", "c"]
s.join(iterable)문자열을 주어진 iterable의 요소들 사이에 삽입하여 결합",".join(["a", "b", "c"])"a,b,c"
s.replace(old, new)문자열 내의 모든 old 문자열을 new 문자열로 대체"hello world".replace("world", "Python")"hello Python"
s.find(sub)문자열 내에서 sub 문자열이 처음 등장하는 위치의 인덱스를 반환. 찾지 못하면 -1을 반환"hello".find("e")1
s.rfind(sub)문자열 내에서 sub 문자열이 마지막으로 등장하는 위치의 인덱스를 반환. 찾지 못하면 -1을 반환."hello".rfind("l")3
s.startswith(prefix)문자열이 주어진 prefix로 시작하면 True, 그렇지 않으면 False를 반환"hello".startswith("he")True
s.endswith(suffix)문자열이 주어진 suffix로 끝나면 True, 그렇지 않으면 False를 반환"hello".endswith("lo")True
s.isalpha()문자열이 알파벳 문자로만 이루어져 있으면 True, 그렇지 않으면 False를 반환"hello".isalpha()True
s.isdigit()문자열이 숫자 문자로만 이루어져 있으면 True, 그렇지 않으면 False를 반환"123".isdigit()True
s.isalnum()문자열이 알파벳 또는 숫자 문자로만 이루어져 있으면 True, 그렇지 않으면 False를 반환"hello123".isalnum()True
s.islower()문자열이 모두 소문자이면 True, 그렇지 않으면 False를 반환"hello".islower()True
s.isupper()문자열이 모두 대문자이면 True, 그렇지 않으면 False를 반환"HELLO".isupper()True
s.isspace()문자열이 모두 공백 문자로만 이루어져 있으면 True, 그렇지 않으면 False를 반환" ".isspace()True

함수 호출 방식

  1. Call by Value
    함수에 인자를 넘길 때 값만 넘긴다.
    함수 내에 인자값 변경 시 호출자에 영향을 주지 않는다.

  2. Call by Reference
    함수에 인자를 넘길 때 메모리 주소를 넘긴다.
    함수 내에 인자값 변경 시 호출자의 값도 변경된다.

  3. Call by Object Reference

Call by Object Reference

파이썬의 함수 호출 방식.
객체의 주소가 함수로 전달되는 방식이다.

  • 전달된 객체를 참조해서 변경시 호출자에 영향을 준다.

  • 하지만 새로운 객체를 만들거나, 함수내에서 변수에게 다른 객체를 할당하면 호출자에 영향을 주지 않는다.

ex)변경 가능한 객체(mutable objects)

리스트같은 mutable한 객체가 전달될 경우 함수 내에서 리스트가 변경되면 리스트에 변경이 반영된다.

def modify_list(l):
    l.append(4)
    print("Inside function:", l)

my_list = [1, 2, 3]
modify_list(my_list)
print("Outside function:", my_list)

# Inside function: [1, 2, 3, 4]
# Outside function: [1, 2, 3, 4]

ex2)변경 불가능한 객체 (immutable objects)

int 같은 변경불가능한 정수(객체)가 함수에 전달되면 함수 내부에서만 변경되고 외부에는 영향을 끼치지 않는다.

def modify_int(x):
    x += 10
    print("Inside function:", x)

my_int = 5
modify_int(my_int)
print("Outside function:", my_int)

# Inside function: 15
# Outside function: 5
profile
꾸준히 성장하기 위해 매일 log를 남깁니다!

0개의 댓글