티스토리 뷰
[1] 문자열
- 시퀀스 자료형(리스트와 비슷함)으로 문자형 data를 메모리에 저장
- 영문자 한 글자는 1byte의 메모리공간을 사용
(1) Byte
- 컴퓨터는 모든 데이터를 2진수로 저장 => 변환 규칙(UTF-8, 아스키코드 등)
- 이진수 한 자리는 1bit로 저장됨, 즉 1bit 는 0도는 1
- 1byte = 8bit = 2^8 = 256까지 저장 가능
*CPU :한번에 처리할 수 있는 데이터 양, 64bit = 2^64까지 처리 가능
- 데이터 타입은 메모리의 효율적 활용을 위해 매우 중요(int 4byte, long 무제한, float 8바이트)
(2)인덱싱 indexing a[0]
- 각 문자열의 각 문자는 개별주소(offset)을 가짐
- 이 주소를 사용해 할당된 값을 가져오는 것이 인덱싱
- List와 같은 형태로 데이터를 처리함
(3) 슬라이싱 slicing a[시작, 끝+1, step]
- 문자열의 주소값을 기반으로 문자열의 부분값을 반환
- 문자열 뒤집기 : [::-1]
(4) 덧셈과 뺄셈 연산 가능, in 명령으로 포함여부 체크
(5) 문자열 함수
함수명 | 기능 | 예시 |
len(a) | 문자열의 문자 개수를 반환 | |
a.upper() | 대문자로 변환 | |
a.lower() | 소문자로 변환 | |
a.capitalize() | 첫 문자를 대문자로 변환 | a= "dgsdf abcdefg" print(a.title()) 출력→ Dgsdf Abcdefg print(a.capitalize()) 출력→ Dgsdf abcdefg * 원본은 바뀌지 않음 |
a.title() | 제목형태로 변환 띄어쓰기 후 첫글자만 대문자 |
|
a.count('abc') | 문자열 a에 'abc'가 들어간 횟수 반환 | |
a.find('abc') a.rfind('abc) |
문자열 a에 'abc'가 들어간 위치(오프셋) 반환 | |
a.startswith('abc') | 문자열 a는 'abc'로 시자하는 문자열여부 반환 | |
a.endswith('abc') | 문자열 a는 'abc'로 끝나는 문자열여부 반환 | |
a.strip() | 좌우 공백을 없앰 | |
a.rstrip() | 오른쪽 공백을 없앰 | |
a.lstrip() | 왼쪽 공백을 없앰 | |
a.split() | 공백을 기준으로 나눠 리스트로 반환 | |
a.split('abc') | abc를 기준으로 나눠 리스트로 반환 | |
a.isdigit() | 문자열이 숫자인지 여부 반환 | |
a.islower() | 문자열이 소문자인지 여부 반환 | |
a.isupper() | 문자열이 대문자인지 여부 반환 |
(6) 다양한 문자열 표현
- 문자열 선언은 큰 따옴표("")나 작은따옴표('')를 활용
a. 예시
상황 | 예시 |
It's ok. '를 출력해야 하는 상황 ① '앞에 \붙여줌 ② 큰 따옴표로 작은 따옴표를 감싸줌 |
print("it's ok.") print('it\'s ok.') 출력 → it's ok. |
두 줄 이상 저장 ① \n 개행 ② 큰따옴표 또는 작은따옴표 세 번 연속 사용 |
print("it's\n\nok.") print("""it's ok.""") 출력 → it's ok. it's ok. |
b. 이스케이프 \ 문자
문자 | 설명 | 문자 | 설명 |
\ [Enter] |
다음 줄과 연속임을 표현 | \n | 줄 바꾸기 |
\\ | \문자 자체 | \t | tab키 |
\` | `문자 | \e | esc키 |
\" | "문자 | \b | 백 스페이스 |
c. raw string : r"문자열"
print(r"안녕하세요\n하이") → 안녕하세요\n하이 # \n 그대로 출력
[2] 함수
(1) 함수에서 parameter를 전달하는 방식
값에 의한 호출(Call by Value) | 참조에 의한 호출(Call by Reference) | 객체 참조에 의한 호출 (Call by Object Reference) |
함수에 인자를 넘길 때 값만 넘김. 함수 내에 인자 값 변경시, 호출자에 영향을 주지 않음 | 함수에 인자를 넘길 때 메모리 주소를 넘김. 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨 *C의 포인터처럼 |
- 파이썬은 객체의 주소가 함수로 전달되는 방식, 객체를 그대로 받아옴 - 전달된 객체를 참조하여 변경 시 호출자에게 영향을 주나, 새로운 객체를 만들 경우 호출자에게 영향을 주지 않음 * list의 메모리 방식과 유사 |
def f(x): ← a에 있던 5가 넘어감 x = 7 ← a는 그대로 5 a=5 f(a) |
def f(x): → x도 같은 메모리의 주소값을 가리킴 x.append(1) # [0,1] → 가리키턴 곳에 1 추가 x = [2,3] → a 주소를 가리키던게 끊기고 x는 새로운 곳에 [2,3] 생성 a = [0] → a는 메모리의 주소값을 가리킴 f(a) print(a) # [0,1] |
(2) swap(교환) : 함수를 통해 변수 간의 값을 교환(swap)하는 함수, call by ... 를 설명하기 위한 전통적인 함수 예시
swap_value | swap_offset | swap_reference |
a = [1,2,3,4,5] def swap_value(x,y): temp = x x = y y = temp swap_value( a[1],a[2] ) print(a) # [1,2,3,4,5] |
def swap_offset(offset_x, offset_y): temp = a[offset_x] a[offset_x] = a[offset_y] a[offset_y] = temp swap_offset(1,2) print(a) # [1, 3, 2, 4, 5] |
def swap_reference(list, offset_x, offset_y): temp = list[offset_x] list[offset_x] = list[offset_y] list[offset_y] = temp swap_reference(a,0,3) print(a) # [4, 3, 2, 1, 5] |
a에 영향 X | a리스의 전역 변수 값을 직접 변경 | a리스트 객체의 주소값을 받아 값을 변경 |
(3) 주의사항
append()같은걸 잘못 하면 값 자체가 바뀌기 때문에 바로 변경하지 말고 복사한 값을 쓰는게 안전함!
(4) 변수의 범위
- 변수가 사용되는 범위(함수 또는 메인 프로그램0
- 지역변수 local variable : 함수 내에서만 사용
- 전역변수 Global variable : 프로그램 전체에서 사용
def f():
global s → 밖에있는 전역 변수 s 쓸게~
s= "I love London!"
print(s)
s = "I love Paris!"
f() # I love London!
print(s) # I love London!
(5) 재귀함수
- 자기자신을 호출하는 함수
- 점화식과 같은 재귀적 수학 모형을 표현할 때 사용
- 재귀 종료 조건 존재, 종료 조건까지 함수호출 반복
(6) Type hints
- 파이썬의 가장 큰 특징: dynamic typing
- 처음 함수를 사용하는 사용자가 interface를 알기 어렵다는 단점이 있음
=> type hints 기능 제공
def 함수이름(변수이름: 변수타입)-> 리턴 타입:
return
*Type hints의 장점
- 사용자에게 인터페이스를 명확히 알려줄 수 있다
- 함수의 문서화시 parameter에 대한 정보를 명확히 알 수 있다.
- mypy 또는 IDE, linter등을 통해 코드의 발생 가능한 오류를 사전에 확인
- 시스템 전체적인 안정성을 화보할 수 있다.
(7) docstring (함수에 다는 주석, 목적을 사전에 적음 """ """ 형식으로)
- 파이썬 함수에 대한 상세스펙을 사전에 작성하여 함수 사용자의 이해도를 높임
- 세개의 따옴표 docstring 영역 표시(함수명 아래)
- 목적, 파라미터내용, 리턴값에 대한 상세한 설명, 예제 등
- vscode에 익스텐션 설치하면 좋음 python docstring generator
(8) 함수 작성 가이드라인
- 함수는 가능하면 짧게 작성할 걸(줄 수를 줄일 것)
- 함수 이름에 함수의 역할(verb), 의도(object)가 명확히 들어낼 것
- 함수명: verb_obejct 형태로, 띄어쓰기대신_
- 하나의 함수에는 유사한 역할을 하는 코드만 포함 (더하기+출력 같이 묶지 X)
- 인자로 받은 값 자체를 바꾸진 말 것 (임시변수 선언), 값을 복사해서 처리
(9) 함수는 언제 만드는가?
- 공통적으로 사용되는 코드는 함수로 변환
- 복잡한 수식(ex.근의공식)은 식별 가능한 이름의 함수로 변환
- 복잡한 조건은 식별 가능한 이름의 함수로 변환
(10) 코딩은 팀플!
컴퓨터가 이해할 수 있는 코드는 어느 바보나 다 짤 수 있다.
좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다. -마틴 파울러-
코드 = 보고서, 쉽게, 남이 이해할 수 있게
=> 규칙: 코딩컨벤션
=> flake8 모듈로 체크, flake8<파일명>
=> 최근에는 black모듈 활용하여 pep8 like 수준 준수(black codename.py명령을 사용)
- 명확한 규칙은 없음. 구글python 컨벤션 참고하기
- 때로는 팀마다, 프로젝트마다 따로
- 중요한건 일관성
- 읽기 좋은 코드가 좋은 코드
- 들여쓰기는 Tab 보다 4 Space (공백4칸 권장)많이 사용, 중요한건 혼합하지마라!
- 한 줄은 최대 79자 까지
- 불필요한 공백은 피함
- 연산자는 1칸 이상 안 띄움
- 주석은 항상 갱신, 불필요한 주석은 삭제
- 코드의 마지막에는 항상 한 줄 추가
- 소문자l, 대문자O, 대문자I 금지
- 함수명은 소문자로 구성, 필요하면 밑줄로 나눔
※ 출처 : 네이버 부스트코스 - 인공지능 기초 다지기(https://www.boostcourse.org/ai100)
'AI > Python' 카테고리의 다른 글
[python] 모듈(collections) (2) | 2024.06.09 |
---|---|
[Python] 자료구조(스택,큐,튜플,집합,딕셔너리) (2) | 2024.06.08 |
[Python] 조건문, 반복문, 디버깅 (2) | 2024.06.05 |
[프로그래머스 기초] Day 12,13,14,15 문자열, 리스트 (0) | 2024.06.05 |
[프로그래머스 기초] Day8,9,10,11,12 이차원 배열, 리스트, 예외처리,반복문 (2) | 2024.06.03 |
- Total
- Today
- Yesterday
- ChatGPT
- 티스토리챌린지
- 갓생
- 30분
- 습관
- IH
- Ai
- SQL
- 아침운동
- 오픽
- 운동
- 고득점 Kit
- 스크랩
- 미라클모닝
- 아침
- opic
- Python
- 실기
- 프로그래머스
- 오블완
- llm
- 경제
- 빅데이터 분석기사
- 기초
- 루틴
- 줄넘기
- 다이어트
- 뉴스
- 영어회화
- C언어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |