Day_1 07. String and advanced function concept

작성일

3 분 소요

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

  1. Call by Value
    • 함수에 인자를 넘길 때 값만 넘김
    • 함수 내에 인자 값 변경 시, 호출자에게 영향을 주지 않음
  2. Call by Reference
    • 함수에 인자를 넘길 때 메모리 주소를 넘김
    • 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨
  3. 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 모듈 활용해 코드의 컨벤션 수정 및 오류 발견 가능!

댓글남기기