파이썬 기초 문법

Python · 2022. 5. 24. 23:45

파이썬이란?

  • 인터프리터 언어
  • 간결한 문법

용도

  • 시스템 유틸리티 제작
  • GUI 프로그래밍
  • C/C++와의 결합
  • 웹 프로그래밍
  • 수치 연산 프로그래밍(NumPy)
  • 데이터베이스 프로그래밍(pickle)
  • 데이터 분석, 사물 인터넷(Pandas)

문법

  • 들여쓰기 필수
  • 중괄호 x
  • 대소문자 구분
  • // : 나눗셈 후 몫을 반환하는 연산자
  • str() → 문자열로 변환
  • 불린은 첫 글자 대문자 True/False
  • bool() → 불린으로 변환
  • type() → 타입 반환
  • id() → 객체 주솟값 반환
  • [a] is [b] → a,b 주솟값 동일한지 불린 반환
  • copy() → 객체 복사
  • a, b swap
>>> a = 3
>>> b = 5
>>> a, b = b, a
>>> a
5
>>> b
3
  • input() → 사용자 입력 받기
  • range(start, end) → start 포함 end 미포함 리스트 생성

문자열

  • 문자열 만드는 법

    • ‘문자열’
    • “문자열”
    • “””문자열“”” (multiline 만드는 데 사용 가능)
    • ‘’’문자열‘’’ (multiline 만드는 데 사용 가능)
  • 문자열 연산

    • “python” * 2 → “pythonpython”
    • print("=" * 3) → “===”
  • 문자열 길이 구하기

    • len()
  • 문자열 슬라이싱

      >>> a = "Life is too short, You need Python"
      >>> a[0:4]
      'Life'
  • 포맷팅

    • 왼쪽 정렬, 10 스페이스, %s

        >>> "%-10sjane." % 'hi'
        'hi        jane.'
    • 10 스페이스, 오른쪽 정렬, 소수점 네 번째자리

        >>> "%10.4f" % 3.42134234
        '    3.4213'
    • format함수 사용

      • 인덱스로 넣기

          >>> number = 10
          >>> day = "three"
          >>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
          'I ate 10 apples. so I was sick for three days.'
      • 이름으로 넣기

          >>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
          'I ate 10 apples. so I was sick for 3 days.'
      • 오른쪽 정렬

          >>> "{0:>10}".format("hi")
          '        hi'
      • 가운데 정렬

          >>> "{0:^10}".format("hi")
          '    hi    '
      • 공백 채우기

          >>> "{0:=^10}".format("hi")
          '====hi===='
          >>> "{0:!<10}".format("hi")
          'hi!!!!!!!!'
      • 소수점

          >>> y = 3.42134234
          >>> "{0:0.4f}".format(y)
          '3.4213'
    • f 문자열 포맷팅(≥ 3.6version )

        >>> name = '홍길동'
        >>> age = 30
        >>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
        '나의 이름은 홍길동입니다. 나이는 30입니다.'
      • 딕셔너리

          >>> d = {'name':'홍길동', 'age':30}
          >>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'
          '나의 이름은 홍길동입니다. 나이는 30입니다.'
  • 문자열 관련 함수들
    • .count() → 개수 세기
    • .find() → 위치 반환
    • .index() → 위치 반환(없으면 오류)
    • .join() → 문자열 삽입
    • .upper() → 대문자로 변환
    • .lower() → 소문자로 변환
    • .lstrip() → 왼쪽 공백 제거
    • .rstrip() → 오른쪽 공백 제거
    • .strip() → 양쪽 공백 제거
    • .replace(바뀔 문자열, 바꿀 문자열) → 값 치환
    • .split(구분자, optional) → 쪼개기

리스트

  • list() → 빈 배열 생성
  • 인덱싱, 슬라이싱, 연산 → 문자열과 동일
  • del() →- 들여쓰기 필수
  • 중괄호 x
  • 대소문자 구분
  • // : 나눗셈 후 몫을 반환하는 연산자
  • str() → 문자열로 변환
  • 불린은 첫 글자 대문자 True/False
  • bool() → 불린으로 변환
  • type() → 타입 반환
  • id() → 객체 주솟값 반환
  • [a] is [b] → a,b 주솟값 동일한지 불린 반환
  • copy() → 객체 복사
  • a, b swap
>>> a = 3
>>> b = 5
>>> a, b = b, a
>>> a
5
>>> b
3
  • input() → 사용자 입력 받기

  • range(start, end) → start 포함 end 미포함 리스트 생성 요소 삭제

      >>> a = [1, 2, 3]
      >>> del a[1]
      >>> a
      [1, 3]
      >>> a = [1, 2, 3, 4, 5]
      >>> del a[2:]
      >>> a
      [1, 2]
  • append() → 요소 추가

      >>> a.append([5,6])
      >>> a
      [1, 2, 3, 4, [5, 6]]
  • sort() → 정렬

  • reverse() → 뒤집기

  • index() → 위치 반환

  • insert(위치, 요소) → 위치에 요소 삽입

  • remove(x) → 첫번째 x 삭제

  • pop(위치) → 위치의 요소 꺼내기(mutate)

  • count(요소) → 요소 갯수 세기

  • extend(리스트) → 리스트 연결(concat)

튜플

  • ( )으로 둘러싼다.
  • 값을 바꿀 수 없다.
>>> t1 = ()
>>> t2 = (1,) //요소 1개면 콤마 필수
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3 //괄호 생략 가능
>>> t5 = ('a', 'b', ('ab', 'cd'))

딕셔너리

  • key-value 자료형
>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99
  • key에 리스트는 쓸 수 없지만 튜플은 쓸 수 있음 (변하지 않기에)
  • keys() → dict_keys 객체 반환
    • for k in a.keys(): → 처럼 순회 가능
  • values() → dict_values 객체 반환
  • items() → dict_items 객체 반환
  • clear() → 모든 요소 삭제
  • get(key) → value 얻기(없으면 None 반환)
    • get(key, ‘디폴트 값') → (없으면 디폴트 값 반환)
  • [key] in [딕셔너리] **** → 있는지 불린 반환

set

  • 중복 허용 x
  • 순서 x
  • s1.intersection(s2) / s1 & s2 → s1과 s2의 교집합
  • s1.union(s2) / s1 | s2 → s1과 s2의 합집합
  • s1.difference(s2) / s1 - s2 → s1에서 s2 뺀 차집합
  • add() → 값 추가
  • update() → 여러 값 추가
  • remove() → 값 제거

조건문

  • or → || (js)

  • and → && (js)

  • not → ! (js)

  • [요소] in / not in [리스트, 튜플, 문자열] → 요소가 해당 자료형에 있는지

  • pass → 암것도 안 함

  • elif → else if(js)

  • 조건부 표현식

      message = "success" if score >= 60 else "failure"
  • for, range()

      marks = [90, 25, 67, 45, 80]
      for number in range(len(marks)):
          if marks[number] < 60: 
              continue
          print("%d번 학생 축하합니다. 합격입니다." % (number+1))
  • 리스트 내포

      >>> a = [1,2,3,4]
      >>> result = [num * 3 for num in a]
      >>> print(result)
      [3, 6, 9, 12]
      >>> a = [1,2,3,4]
      >>> result = [num * 3 for num in a if num % 2 == 0]
      >>> print(result)
      [6, 12]

함수

  • *args → 여러 개의 입력값을 받는 함수

      >>> def add_many(*args): 
      ...     result = 0 
      ...     for i in args: 
      ...         result = result + i 
      ...     return result 
      ... 
      >>>
      >>> def add_mul(choice, *args): 
      ...     if choice == "add": 
      ...         result = 0 
      ...         for i in args: 
      ...             result = result + i 
      ...     elif choice == "mul": 
      ...         result = 1 
      ...         for i in args: 
      ...             result = result * i 
      ...     return result 
      ... 
      >>>
  • **kwargs → keyword arguments

    딕셔서리로 저장

      >>> print_kwargs(a=1)
      {'a': 1}
      >>> print_kwargs(name='foo', age=3)
      {'age': 3, 'name': 'foo'}
  • global → 전역 변수 사용

  • lambda → def보다 간결

      >>> add = lambda a, b: a+b
      >>> result = add(3, 4)
      >>> print(result)
      7

클래스

  • self → 메서드의 첫 번째 매개변수명(컨벤션)
  • __init__ → 생성자 메서드
  • class 클래스 이름(상속할 클래스 이름) → 상속 클래스 생성

모듈

  • import [모듈(파일명)][모듈].함수 로 모듈 내 함수 사용
  • from [모듈명] import [모듈함수] → 바로 함수명으로 사용
  • if __name__ == "__main__"import [모듈] 하면 [모듈].__name__에 모듈명이 할당됨. 하지만 직접 파일 실행 시 __name__ 변수에는 __main__ 이 저장됨
  • 다른 파일에서 모듈 불러올 때
    • sys.path.append(모듈 저장한 디렉토리)
    • PYTHONPATH 환경 변수 사용 → set PYTHONPATH=[모듈 저장한 디렉토리]

패키지

  • __init__.py → 해당 디렉토리가 패키지의 일부임을 알려주는 역할
  • __all__ → 특정 디렉터리의 모듈을 *를 사용하여 import할 때에는 해당 디렉터리의 __init__.py 파일에 __all__ 변수를 설정하고 import할 수 있는 모듈을 정의해 주어야 한다.
  • from ..sound.echo import echo_test 처럼 relative하게 import 가능

예외 처리

  • try, except문

      try:
          ...
      except [발생 오류[as 오류 메시지 변수]]:
          ...

    [] 는 괄호 안의 내용이 optional이라는 뜻

    • 예시

        try:
            4 / 0
        except ZeroDivisionError as e:
            print(e)
    • 여러 개도 사용 가능

        try:
            a = [1,2]
            print(a[3])
            4/0
        except ZeroDivisionError:
            print("0으로 나눌 수 없습니다.")
        except IndexError:
            print("인덱싱 할 수 없습니다.")
  • try.. finally

      f = open('foo.txt', 'w')
      try:
          # 무언가를 수행한다.
      finally:
          f.close()
  • try… else

      try:
          age=int(input('나이를 입력하세요: '))
      except:
          print('입력이 정확하지 않습니다.')
      else: 
          if age <= 18:
              print('미성년자는 출입금지입니다.')
          else:
              print('환영합니다.')
  • raise → 오류 발생시키기

    • Bird 클래스를 상속받는 자식 클래스는 반드시 fly라는 함수를 구현하도록 만들고 싶은 경우

        class Bird:
            def fly(self):
                raise NotImplementedError
  • Expection 클래스 상속 → 직접 예외 만들기

      class MyError(Exception):
          pass
      def say_nick(nick):
          if nick == '바보':
              raise MyError()
          print(nick)
    • __str__ 메서드 → 오류 메시지 출력

        class MyError(Exception):
            def __str__(self):
                return "허용되지 않는 별명입니다."

참고:
점프투파이썬