Day_1 07. String and advanced function concept
작성일
String and advanced function concept
1. String
1.1 문자열 (string)
- 시퀀스 자료형으로 문자형 data를 메모리에 저장
- 영문자 한 글자는 1byte의 메모리공간을 사용
-
string은 1byte 크기로 한 글자씩 메모리 공간이 할당됨
- 1Byte의 메모리 공간?
- 컴퓨터는 2진수로 데이터를 저장
- 이진수 한 자릿수는 1bit로 저장됨
- 즉 1bit는 0 또는 1
- 1 byte = 8 bit =
2^8
= 256 까지 저장 가능
1.2 프로그램 언어에서 데이터 타입
- 각 타입별로 메모리 공간을 할당 받은 크기가 다름
- int : 4바이트
- long : 무제한
- float : 8바이트
1.3 문자열 특징
- 인덱싱(Indexing)
- 문자열의 각 문자는 개별 주소(offset)를 가짐
- 이 주소를 사용해 할당된 값을 가져오는 것이 인덱싱
- List와 같은 형태로 데이터를 처리함
- 슬라이싱(Slicing)
- 문자열의 주소값을 기반으로 문자열의 부분값을 반환
- 문자열 연산 및 포함여부 검사
- 덧셈과 뺄셈 연산 가능, in 명령으로 포함여부 체크
- 문자열 함수
- len(a) : 문자열의 문자 개수를 반환
- a.upper() : 대문자로 변환
- a.lower() : 소문자로 변환
- a.capitallize() : 첫 문자를 대문자로 변환
- a.title() : 제목형태로 변환 띄어쓰기 후 첫 글자만 대문자
- a.count(‘abc’) : 문자열 a에 ‘abc’가 들어간 횟수 반환
- a.find(‘abc’) : 문자열 a에 ‘abc’가 들어간 위치(오프셋) 반환
- a.rfind(‘abc’) : 문자열 a에 ‘abc’가 들어간 위치(오프셋) 반환
- a.startswith(‘abc’) : 문자열 a는 ‘abc’로 시작하는 문자열 여부 반환
- a.endswith(‘abc’) : 문자열 a는 ‘abc’로 끝나는 문자열 여부 반환
- 다양한 문자열 표현
- 문자열 선언은 큰따옴표(““)나 작은 따옴표(‘‘)를 활용
- It’s OK 문자열은 어떻게 표현할까?
- a = ‘It' ok.’
- a = “It’s ok.”
- 두 줄 이상은 어떻게 저장할까?
- \n # \n은 줄바꿈을 의미하는 특수 문자
- 큰 따옴표 또는 작은 따옴표 세 번 연속 사용
- 특수 문자
- 문자열을 표시할 때 백슬래시 “"를 사용하여 키보드로 표시하기 어려운 문자들을 표현함
- raw string
- 특수문자 특수 기호인 \ escape 글자를 무시하고 그대로 출력함
raw_string = r"이제 파이썬 강의 그만 만들고 싶다. \n 레알"
print(raw_string)
이제 파이썬 강의 그만 만들고 싶다. \n 레알
2. str lab - yesterday
2.1 yesterday
- Yesterday 노래엔 Yesterday 라는 말이 몇 번 나올까?
wget https://raw.githubusercontent.com/TeamLab/introduction_to_python_TEAMLAB_MOOC/master/code/6/yesterday.txt
- yesterday_count_basic.py 참고
3. function II
3.1 call by oject reference
- Call by Value
- 함수에 인자를 넘길 때 값만 넘김
- 함수 내에 인자 값 변경 시, 호출자에게 영향을 주지 않음
- Call by Reference
- 함수에 인자를 넘길 때 메모리 주소를 넘김
- 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨
- Call by Object Reference
- 파이썬은 객체의 주소가 함수로 전달되는 방식
- 전달된 객체를 참조하여 변경 시 호출자에게 영향을 주나, 새로운 객체를 만들 경우 호출자에게 영향을 주지 않음
def spam(eggs):
eggs.append(5) # 기존 객체의 주소값에 [5] 추가
eggs = [2, 3] # 새로운 객체 생성
ham = [0]
spam(ham)
print(ham)
[0, 5]
3.2 swap
- 함수를 통해 변수 간의 값을 교환(Swap)하는 함수
4. function - scoping rule
4.1 변수의 범위 (Scoping Rule)
- 변수가 사용되는 범위 (함수 또는 메인 프로그램)
- 지역변수 (local variable) : 함수내에서만 사용
- 전역변수 (Global variable) : 프로그램전체에서 사용
- 전역변수는 함수에서 사용가능
- But, 함수 내에 전역 변수와 같은 이름의 변수를 선언하면 새로운 지역 변수가 생김
- 함수 내에서 전역변수 사용 시 global 키워드 사용
5. rcursive function
- 자기자신을 호출하느 ㄴ함수
- 점화식과 같은 재귀적 수학 모형을 표현할 때 사용
- 재귀 종료 조건 존재, 종료 조건까지 함수호출 반복
def factorial(n):
if n == 1:
return 1
else:
return n * factorical(n-1)
print(factorial(int(input("Input Number for Factorial Calculation: ")))
6. function type hints
- 파이썬의 가장 큰 특징 - dynamic typing
- 처음 함수를 사용하는 사용자가 interface를 알기 어렵다는 단점이 있음
- python 3.5 버전 이후로는 PEP 484에 기반하여 type hints 기능 제공
def type_hint_example(name: str) -> str:
return f"Hello, {name}"
- Type hints의 장점
- 사용자에게 인터페이스를 명확히 알려줄 수 있다.
- 함수의 문서화시 parameter에 대한 정보를 명확히 알 수 있다.
- mypy 또는 IDE, Linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인
- 시스템 전체적인 안정성을 확보할 수 있다.
7. docstring
- 파이썬 함수에 대한 상세스펙을 사전에 작성 -> 함수 사용자의 이행도 UP
- 세개의 따옴표로 docstring 영역 표시(함수명 아래)
8. 함수 작성 가이드 라인
- 함수는 가능하면 짧게 작성할 것 (줄 수를 줄일 것)
- 함수 이름에 함수의 역할, 의도를 명확히 들어낼 것
- 하나의 함수에는 유사한 역할을 하는 코드만 포함
- 인자로 받은 값 자체를 바꾸진 말 것 (임시변수 선언)
9. 함수는 언제 만드는가?
- 공통적으로 사용되는 코드는 함수로 변환
- 복잡한 수식 -> 식별 가능한 이름의 함수로 변환
- 복잡한 조건 -> 식별 가능한 이름의 함수로 변환
10. How to write good code
10.1 사람을 위한 코드
- 컴퓨터가 이해할 수 있는 코드는 어느 바보나 다 짤 수 있다.
- 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다.
10.2 파이썬 코딩 컨벤션
- 명확한 규칙은 없음
- 떄로는 팀마다, 프로젝트마다 따로
- 중요한건 일관성!!
- 읽기 좋은 코드가 좋은 코드
- 들여쓰기는 공백 4칸을 권장
- 한 줄은 최대 79자까지
- 불필요한 공백은 피함
- 연산자는 1칸 이상 안 띄움
-
주석은 항상 갱신, 불필요한 주석은 삭제
- black 모듈 활용해 코드의 컨벤션 수정 및 오류 발견 가능!
댓글남기기