[BoostCamp AI Tech / Day 1] String and advanced function concept

newbie·2021년 8월 2일
0

Index

String

  1. 문자열 특징
  2. 문자열 함수
  3. 다양한 문자열 표현

function ||

  1. 함수에서 parameter 전달 방식
  2. 변수의 범위(scoping Rule)
  3. 재귀함수(recursive function)
  4. function type hints
  5. 함수 작성 가이드라인

String

  • 시퀀스 자료형으로 문자형 data를 메모리에 저장
  • 영문자 한 글자는 1byte(8bit)의 메모리 사용
    • 컴퓨터는 문자를 직접적으로 인식X => 모든 데이터를 2진수로 인식
    • 하나의 문자는 숫자로 변형되어 표현됨(UTF-8 기준)

프로그램 언어별 데이터 타입

  • 각 타입 별 메모리 공간을 할당 받는 크기가 다름
    • 정수형(int) : 4byte(32bit)
    • 정수형(long) : 무제한
    • 실수형(float) : 8byte(64bit)
  • 메모리 공간에 따라 표현할 수 있는 숫자범위가 다름
  • 데이터 타입은 메모리의 효율적 활용을 위해 매우 중요

문자열 특징

  • 문자열은 개별 주소(offset)을 가지므로 list와 같은 형태로 처리 가능
    • 인덱싱, 슬라이싱, concatenate 등

문자열 함수

  • a가 문자열 객체일 경우
  • len(a) : 문자열 길이
  • a.upper() : 대문자화
  • a.lower() : 소문자화
  • a.capitalize() : 첫 문자만 대문자 나머지 소문자화
  • a.title() : 띄워쓰기 후 첫 글자만 대문자
  • a.count("bb") : 문자열 a에 "bb"가 들어간 횟수 반환
  • a.find("bb") : 문자열 a에 "bb"가 들어간 위치(오프셋) 반환
  • a.rfind("bb") : 문자열 a에 "bb"가 들어간 위치(오프셋) 반환(우측기준)
  • a.startswith("bb") : 문자열 a가 "bb"로 시작하는 문자열인지 여부
  • a.endswith("bb") : 문자열 a가 "bb"로 끝나는 문자열인지 여부
  • a.split() : 특정 기준으로 문자열 나눔(빈 경우 띄어쓰기 기준)
  • a.strip() : 문자열 a의 좌우 빈칸 제거
  • a.isdigit() : 문자열 a가 숫자인지

다양한 문자열 표현

  • 문자열 선언은 큰따옴표("")나 작은 따옴표('')를 활용
  • That's right 문자열 표현 방법
    1) "That's right" : 큰따옴표로 선언 시 작은 따옴표는 출력 문자로 인식
    2) 'That\'s right' : 역슬래시() + (') 시 작은 따옴표를 출력 문자로 인식
  • 특수 문자
    • \ : \ 문자 자체
    • \' : ' 문자
    • \b : 벡스페이스
    • \n : 줄 바꾸기
    • \t : Tab
    • \e : ESC
  • raw string : 특수 기호를 무시하고 전체를 문자로 인식
    • r"\npython" => \n도 문자로 인식하여 그대로 출력됨

function ||

함수에서 parameter 전달 방식

  • call by value : 값에 의한 호출
    • 함수에 인자를 넘길 때 만 넘김
    • 함수 내 인자 값 변경 시 호출자에 영향 X
  • call by reference : 참조에 의한 호출
    • 함수에 인자를 넘길 때 메모리 주소를 넘김
    • 함수 내 인자 값 변경 시 호출자의 값도 변경
  • call by object reference : 객체 참조에 의한 호출
    • python만의 전달 방식
    • 객체의 주소가 함수로 전달
    • 전달된 객체를 참조하여 값을 변경 시 호출자에 영향을 줌
    • 단 함수 내에서 새로운 객체를 만들 경우 호출자에 영향 X

변수의 범위(scoping Rule)

  • 변수가 사용되는 범위(함수 또는 메인 프로그램)
  • 지역 변수(local variable) : 함수 내에서만 사용
  • 전역 변수(global variable) : 프로그램 전체에서 사용
  • 함수 내에서 전역변수 사용 시 "global 변수명" 사용

재귀함수(recursive function)

  • 자기 자신을 호출하는 함수
  • 점화식과 같은 재귀적 수학 모형을 표현할 때 사용
  • 재귀 종료 조건 존재, 종료 조건까지 함수호출 반복

    def tmp(x): return 0 if x < 5 else tmp(x-1)

function type hints

  • 파이썬의 가장 큰 특징 : dynamic typing
    • 처음 함수를 사용하는 사용자가 interface를 알기어렵다는 단점이 있음
  • type hints
    • python 3.5 버전 이후 pep484에 기반하여 type hint 기능 제공
      def tmp(x : var_type) -> return_type:
          pass
      def tmp(x : int) -> int:
          return x + 5
    • type hints 장점
      • 사용자에게 인터페이스를 명확히 알려줄 수 있음
      • 함수 문서화 시 parameter에 대한 정보를 명확히 할 수 있음
      • mypy 또는 IDE, linter 등을 통해 코드에 발생 가능한 오류 사전에 확인 가능
      • 시스템 전체적인 안정성 확보
  • function docstring
    • 파이썬 함수에 대한 상세스펙을 사전에 작성
    • 세개의 따옴표로 docstring 영역 표시
      def f(x):
      """
      x : int ....
      """
    • vscode에서 python docstring generator를 통해 docstring format을 쉽게 만들 수 있음

함수 작성 가이드라인

  • 함수는 가능하면 짤게 작성(줄 수)
  • 함수 이름에 함수의 역할, 의도가 명확히 들어날 것
  • 하나의 함수에는 유사한 역할을 하는 코드만 작성
  • 인자로 받은 값 자체를 바꿔서 사용하지 말 것(복사하여 활용)
  • 함수 생성 시점
    • 공통적으로 사용되는 코드
    • 복잡한 수식 -> 식별 가능한 이름의 함수로 변환
    • 복잡한 조건 -> 식별 가능한 이름의 함수로 변환
  • 파이썬 코딩 컨벤션 기준
    • 가독성을 높이기 위한 코딩 규칙
    • flake8 module로 체크 가능(pep8 수준, 단순 확인)
    • black 모듈로 코드 수정(pep8 수준 준수)
      • 최근 black 모듈 많이 사용됨
profile
DL, NLP Engineer to be....

0개의 댓글