Language/python

python

TimeSave 2023. 5. 13. 23:17

ref)

1. 점프 투 파이썬(강추)

https://wikidocs.net/book/1 

2.왕초보를 위한 Python: 쉽게 풀어 쓴 기초 문법과 실습

https://wikidocs.net/book/2


 

목차


    0. python이란

    파이썬(Python)은 1990년 암스테르담의 귀도 반 로섬(Guido Van Rossum)이 개발한 인터프리터 언어이다.

    귀도는 파이썬이라는 이름을 자신이 좋아하는 코미디 쇼인 "몬티 파이썬의 날아다니는 서커스(Monty Python’s Flying Circus)"에서 따왔다고 한다.

    • 인터프리터 언어란 한 줄씩 소스 코드를 해석해서 그때그때 실행해 결과를 바로 확인할 수 있는 언어
    • 파이썬의 사전적 의미는 고대 신화에 나오는 파르나소스 산의 동굴에 살던 큰 뱀

    1. python 특징

    • 간결하다 : 문제 해결을 위해 가장 좋은 방법 1가지만 사용하는 것을 선호
    • 가독성 : 들여쓰기가 강제되어,  들여쓰기를 하지 않으면 프로그램이 실행되지 않는다.
      • 콜론(:)을 사용하여 들여쓰기(indentation)를 하도록 만들었다
    • 접착(glue) 언어 : 다른 언어와 잘 어울려 결합해서 사용가능하다. 특히 C/C++
    • EAFP 언어이다(TRY~Exception) : “It’s Easier to Ask Forgiveness than Permission”
      • LBYL 언어(IF): “Look Before You Leap”

     

     

    2. 파이썬 작업

    2.1 파이썬 대화형 인터프리터 : 파이썬 셸(Python shell) 

    • 파이썬 대화형 인터프리터를 간단히 파이썬 셸(Python shell)이라고도 부른다.
    • 3개의 꺾은 괄호(>>>)는 프롬프트(prompt)라고 한다.

    2.2 파이썬 에디터 : 파이썬 IDLE(Integrated Development and Learning Environment)

    에디터 = 소스 코드를 편집할 수 있는 프로그래밍 툴

    • IDLE 셸 창(Shell Window) - IDLE 에디터에서 실행한 프로그램의 결과가 표시되는 창으로서 파이썬 셸과 동일한 기능을 수행한다. IDLE을 실행하면 가장 먼저 나타나는 창이다.
    • IDLE 에디터 창(Editor Window) - IDLE 에디터가 실행되는 창이다.

    2.3 전문 에디터

    • 비주얼 스튜디오 코드
    • 파이참

     

    3. 자료형(Number, String)

    3.1 숫자형

    Integer- 정수 123, -345, 0
    Floating-point - 실수 123.45, -1234.5, 3.4e10(컴퓨터식 지수표현 방식, e와 E 구별 없음)
    Octal - 8진수(0+'O' or 'o') 0o34, 0o25
    Hexadecimal - 16진수(0+'x') 0x2A, 0xFF

    3.2 문자열(String)

    • 선언방법
      • 한 줄
        • 큰따옴표(")로 양쪽 둘러싸기 "Hello World"
        • 작은따옴표(')로 양쪽 둘러싸기 'Python is fun'
      • 여러줄
        • 큰따옴표 3개를 연속(""")으로 써서 양쪽 둘러싸기 """Life is too short, You need python"""
        • 작은따옴표 3개를 연속(''')으로 써서 양쪽 둘러싸기 '''Life is too short, You need python'''
    •  작은따옴표나 큰따옴표를 포함시키고 싶을 때
      • 작은따옴표 -> 큰걸로 싸기 : "Python's favorite food is perl" :
      • 큰따옴표 -> 작은걸로 싸기 '"Python is very easy." he says.'
      • 백슬래시 사용 : 'Python\'s favorite food is perl'

    3.3 리스트

    3.4 튜플

    3.5 딕셔너리

    3.6 집합

    3.7 불

    3.8 변수

    4. 연산

    4.1 숫자

    • 사칙연산 : +, -, *, /
    • 제곱 : **  ex) a^b == a **b
    • 나머지 : %
    • 몫 : // ex) 7//4  =1

    4.2 문자열 연산

    • 문자열 반복 : * , ex) print("=" * 50) => "=================...."
    • 문자열 길이 : len()
    • indexing : [번호], a[0]
    • slicing : 자르기,  ex) a[0:4] 0부터 4까지, 0<= a < 4
      • -기호 :  ex) a[19:-7] a[19]에서부터 a[19-8] 까지, 11< a <= 19
    • 문자열 연결 : 큰따옴표(")로 둘러싸인 문자열은 + 연산과 동일하다
      • print("life" "is" "too short") = print("life"+"is"+"too short")
    • 띄어쓰기 : 콤마로 한다
      • print("life", "is", "too short") = life is too short
    • formatting 
      • 정수(Integer) %d : ex) "I eat %s apples." % "five
      • 문자열(String) %s : ex) "I eat %d apples." % 3
        • %s는 자동으로 % 뒤에 있는 값을 문자열로 바꿈
      • 문자 1개(character) %c : 
      • 부동소수(floating-point) %f :
      • 8진수 %o
      • 16진수 %x
      • Literal % '%' 표현 : %%
        • "Error is %d%%." % 98 ->  'Error is 98%.'
      • 두개이상 : ex) I ate %d apples. so I was sick for %s days." % (number, day)
      • format함수
        • 문자열의 {0}, {1}과 같은 인덱스 항목이 format 함수의 입력값으로 순서에 맞게 바뀐다.
        • name 형태도 가능
        • index 방식 : "I ate {0} apples. so I was sick for {1} days.".format(number, day)
        • name 방식 : "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
    • count : 문자 갯수 세기 ex) a = "hobby", a.count('b') = 2
    • find : 문자가 처음 나온 위치(index) 반환
    • index : find와 동일하나, 해당 문자가 없을 시 오류 반환
    • join : 문자열 삽입 ex)  ",".join('abcd')  = 'a,b,c,d'
      • 리스트나 튜플도 입력으로 사용가능
    • upper/lower/lstring/rstrip/strip/replace/split

    4.3 비교연산

    x < y x가 y보다 작다
    x > y x가 y보다 크다
    x == y x와 y가 같다
    x != y x와 y가 같지 않다
    x >= y x가 y보다 크거나 같다
    x <= y x가 y보다 작거나 같다

    4.4 논리연산

    x or y x와 y 둘중에 하나만 참이어도 참이다
    x and y x와 y 모두 참이어야 참이다
    not x x가 거짓이면 참이다

    4.5 집합 연산

    in(안에 있다) not in(안에 없다)
    x in 리스트 x not in 리스트
    x in 튜플 x not in 튜플
    x in 문자열 x not in 문자열

    5. 조건

    5.1 if

    if 조건문:
        수행할 문장1
        수행할 문장2
        ...
    else:
        수행할 문장A
        수행할 문장B
        ...
    

    5.2 elf : 다중 조건 판단, 이전 조건문이 거짓일 때 수행

    5.3 조건부 표현식 : ex ) message = "success" if score >= 60else"failure"

    5.4 pass : 아무것도 안하게 하는 명령

    5.5 match - case : switch-case

    6. 반복

    6.1 while

    while <조건문>:
        <수행할 문장1>
        <수행할 문장2>
        <수행할 문장3>
        ...
    

    while - else

     

    6.2 for

    for 변수 in 리스트(또는 튜플, 문자열):
        수행할 문장1
        수행할 문장2
        ...
    

    ex1) 리스트의 요솟값이 튜플이기 때문에 각각의 요소가 자동으로 (first, last) 변수에 대입된다.

    >>> a = [(1,2), (3,4), (5,6)]
    >>> for (first, last) in a:
    ...     print(first + last)
    ...
    3
    7
    11
    

    for - else

     

    6.3 break : 탈출

    6.4 continue : 현재 반복회차 skip

    6.5 range 함수 : 숫자리스트를 자동으로 만들어 줌

    >>> add = 0 
    >>> for i in range(1, 11): 
    ...     add = add + i 
    ... 
    >>> print(add)
    55
    

    6.6 List comprehension

    [표현식 for 항목 in 반복가능객체 if 조건문]
    

     for문을 2개 이상 사용하는 것도 가능

     

    ex1) 

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

     

    ex2)

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

    7. 함수

    예약어 def를 선언해서 생성

    def 함수명(매개변수):
        <수행할 문장1>
        <수행할 문장2>
        ...
    

    7.1 함수의 영향범위

    ex) print는 1이 나온다

    a = 1
    def vartest(a):
        a = a +1
    
    vartest(a)
    print(a)
    • 함수 안에서 함수 밖의 변수를 변경하는 방법
      • return 사용하기(O)
      • global 명령어 사용하기(X)
    # vartest_return.py
    a = 1 
    def vartest(a): 
        a = a +1 
        return a
    
    a = vartest(a)
    print(a)
    

    7.2 반환 : return 명령하기

    리턴값은 언제나 하나이다.

    • 튜플리턴
    >>> def add_and_mul(a,b): 
    ...     return a+b, a*b
    
    result = (7, 12)
    

     

     

    >>> result1, result2 = add_and_mul(3, 4)
    

    result1, result2 = (7, 12)가 되어 result1은 7이 되고 result2는 12가 된다.

     

     

    7.3 매개변수 지정 호출

    >>> def sub(a, b):
    ...     return a - b
    ... 
    
    >>> result = sub(a=7, b=3)  # a에 7, b에 3을 전달
    >>> print(result)
    4
    

    7.4 매개변수 갯수 랜덤

    def 함수이름(*매개변수): 
        <수행할 문장>
        ...
    

    ex1)

    >>> def add_many(*args): 
    ...     result = 0 
    ...     for i in args: 
    ...         result = result + i 
    ...     return result 
    ... 
    >>>
    
    >>> result = add_many(1,2,3)
    >>> print(result)
    6
    >>> result = add_many(1,2,3,4,5,6,7,8,9,10)
    >>> print(result)
    55
    

    ex2) 혼용하기

    >>> 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 
    ... 
    >>>
    

    7.5 kwargs 키워드 매개변수

    key=value 형태의 입력값이 딕셔너리 형태로 저장 후 반환된다.

    >>> def print_kwargs(**kwargs):
    ...     print(kwargs)
    ...
    
    >>> print_kwargs(a=1)
    {'a': 1}
    >>> print_kwargs(name='foo', age=3)
    {'age': 3, 'name': 'foo'}
    

    7.6 매개변수 초기화

    매개변수(age)는 초깃값이 있는 매개변수(man) 뒤에 사용할 수 없다.

    항상 뒤쪽에 놓아야 한다.

    (name, age, man=True)는 되지만 (name, man=True, age)는 안 된다

    def say_myself(name, age, man=True): 
        print("나의 이름은 %s 입니다." % name) 
        print("나이는 %d살입니다." % age) 
        if man: 
            print("남자입니다.")
        else: 
            print("여자입니다.")
    

     

    7.7 lambda

    lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다. def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다.

    • lambda로 만든 함수는 return 명령어가 없어도 표현식의 결괏값을 리턴한다.
    >>> add = lambda a, b: a+b
    >>> result = add(3, 4)
    >>> print(result)
    7
    

    8. 입출력

    8.1 파일

    • 파일경로 역슬래시 입력
      • 역슬래시를 2개 사용하거나 r"C:\doit\새파일.txt"와 같이 문자열 앞에 r 문자(Raw String)를 덧붙여 사용
        • ( \n과 같은 이스케이프 문자가 있을 경우 줄바꿈 문자로 해석)
        • ex1) r"C:\doit\새파일.txt"
        • ex2) "C:\\doit\\새파일.txt" 
    • 파일 열기
      • open 함수 : 파일 객체 = open(파일 이름, 파일 열기 모드)
        • r : 읽기모드 - 파일을 읽기만 할 때 사용
        • w : 쓰기모드 - 파일에 내용을 쓸 때 사용
        • a : 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용
        • f.close() :  생략가능 but 닫아주는 것이 좋다. 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생한다. 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아 줌.
    • 파일 읽기 
      • readline 함수 : 한 줄씩 읽는다. 읽을 줄이 없을 경우 빈 문자열('')을 리턴
      • readlines 함수 : 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트를 리턴
      • read 함수 : 파일의 내용 전체를 문자열로 리턴
    • 줄바꿈 문자(\n)제거 : line.strip()
    • with 문 : 파일을 열고(open) 닫는 것(close)을 자동으로 처리,  with 블록(with 문에 속해있는 문장)을 벗어나는 순간 열린 파일 객체 f가 자동으로 close

    8.2 프로그램

    sys 모듈을 사용하여 프로그램에 인수를 전달

     argv[0]은 파일 이름 sys1.py가 되고 argv[1]부터는 뒤에 따라오는 인수가 차례로 argv의 요소

    #sys1.py
    import sys
    
    args = sys.argv[1:]
    for i in args:
        print(i)
    

     

     

    9.구조

    9.1 클래스

    class Calculator:
        def __init__(self):
            self.result = 0
    
        def add(self, num):
            self.result += num
            return self.result
    
    cal1 = Calculator()
    cal2 = Calculator()
    
    print(cal1.add(3))
    print(cal1.add(4))
    print(cal2.add(3))
    print(cal2.add(7))
    
    • type : 파이썬이 자체로 가지고 있는 내장 함수로 객체의 타입을 출력한다. ex) <class '__main__.FourCal'>
    • 메서드 : 클래스 안에 구현된 함수
      • 매개변수 self :  self에는 메서드를 호출한 객체가 자동으로 전달(매개변수에서 생략)
        • ex) def setdata(self, first, second): -> a.setdata(4, 2) -> (a,4,2)가 전달
          • a 객체에 객체변수 first가 자동 생성되고 4라는 값이 저장된다
          • a 객체에 객체변수 second 가 자동 생성되고 2라는 값이 저장된다
      • 클래스 통해 메서드 호출 : self에 해당하는 객체를 꼭 전달
        • a = FourCal() ->  FourCal.setdata(a, 4, 2)
    • 생성자 : 메서드 이름으로 "__init__"를 사용하면 생성자 메서드가 된다. 객체 생성시점에 자동 호출
      • def __init__(self, first, second):
        • self.first = first
        • self.second = second
    • 상속 : class 클래스 이름(상속할 클래스 이름)
      • ex) class MoreFourCal(FourCal):
      • 메서드 오버라이드 : 메서드를 동일한 이름으로 다시 작성
    • 클래스 변수 : 클래스 안에 변수를 선언하여 생성한다.
      • class Family: lastname = "김"
      • 클래스이름.클래스변수로 사용할 수 있다.
      • 클래스 변수는 클래스로 만든 모든 객체에 공유된다
      • a.lastname = "최"
        • 객체변수는 클래스 변수와 동일한 이름으로 생성가능하다

    9.2 모듈 : 함수나 변수 또는 클래스를 모아 놓은 파이썬 파일

      • import : 모듈 전체 읽기, 클래스나 변수 등 포함
      • 특정 함수만 : from 모듈이름 import 모듈함수
      • if __name__ == "__main__": 의 의미
        • if __name__ == "__main__"을 사용하면
        • C:\doit>python mod1.py처럼
        • 직접 이 파일을 실행했을 때는 __name__ == "__main__"이 참이 되어 if문 다음 문장이 수행된다.
        • 반대로 대화형 인터프리터나 다른 파일에서 이 모듈을 불러서 사용할 때는 __name__ == "__main__"이 거짓이 되어 if문 다음 문장이 수행되지 않는다.
      • __name__ 변수
        • 파이썬이 내부적으로 사용하는 특별한 변수 이름이다.
        • 만약 C:\doit>python mod1.py처럼 직접 mod1.py 파일을 실행할 경우
        • mod1.py의 __name__ 변수에는 __main__ 값이 저장된다.
        • 하지만 파이썬 셸이나 다른 파이썬 모듈에서 mod1을 import 할 경우
        • mod1.py의 __name__ 변수에는 mod1.py의 모듈 이름 값 mod1이 저장된다.
      • 이동하지 않고, 모듈 import 하기
        • sys변수 추가 : sys.path.append("C:/doit/mymod")
        • PYTHONPATH 환경변수 : set PYTHONPATH=C:\doit\mymod
          • 맥이나 유닉스 환경에서는 set 대신 export 명령
        • 도트 연산자(.)를 사용해서 import a.b.c처럼 import할 때 가장 마지막 항목인 c는 반드시 모듈 또는 패키지여야만 한다.

    9.3 패키지

    • __init__.py 
      •  해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다. 만약 디렉터리에 __init__.py 파일이 없다면 패키지로 인식되지 않는다.
      • python3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식한다(PEP 420). 하지만 하위 버전 호환을 위해 __init__.py 파일을 생성하는 것이 안전한 방법이다.
      • __init__.py 파일은 패키지와 관련된 설정이나 초기화 코드를 포함할 수 있다
        • 패키지 변수 및 함수 정의
          • ex) __init__.py에 VERSION = 3.5
        • 패키지 내 모듈을 미리 import
          • ex) __init__.py에 from .graphic.render import render_test
        • 패키지 초기화 : 패키지가 처음 불러와질 때 실행되어야 하는 코드를 작성
          •  패키지가 처음 import 될 때 __init__.py의 명령 코드(초기화코드)가 실행
          • 초기화 코드는 import 할 때 처음 한번만 실행된다.
          • print("Initializing game ...")
        • __all__
          • 특정 디렉터리의 모듈을 *를 사용하여 import할 때는 해당 디렉터리의 __init__.py 파일에 __all__ 변수를 설정하고 import할 수 있는 모듈을 정의해 주어야 한다.
            •  __all__ = ['echo']
              •  __all__이 의미하는 것은 디렉터리에서 * 기호를 사용하여 import할 경우 이곳에 정의된 echo 모듈만 import된다는 의미이다.
              • __all__과 상관없이 무조건 import되는 경우는 from a.b.c import * 에서 from의 마지막 항목인 c가 모듈인 경우
        • relative 패키지
          • .. – 부모 디렉터리
            . – 현재 디렉터리

    9.4 exception

    • try, except문(+ else)
    • try .. finally
    • 예외 만들기
      • ex) class MyError(Exception):

     

    9.5 내장함수 : https://wikidocs.net/32

    • print
      • 끝문자 지정 : print(i, end=' ')
    • input() : 사용자 입력 받기
      • 입력되는 모든 것을 문자열로 취급

     

    9.6 표준라이브러리 : https://wikidocs.net/33

    9.7 외부라이브러리 : https://wikidocs.net/180538

    • pip : pip은 파이썬 모듈이나 패키지를 쉽게 설치할 수 있도록 도와주는 도구
      • pip으로 파이썬 프로그램을 설치하면 의존성 있는 모듈이나 패키지를 함께 설치해 줌
        • 예를 들어 B라는 파이썬 패키지를 설치하려면 A라는 패키지가 먼저 설치되어야 하는 규칙이 있다고 할 때 pip을 이용하면 B 패키지를 설치할 때 A 패키지도 자동으로 함께 설치된다.
    • PyPI(Python Package Index) :  파이썬 소프트웨어가 모인 저장 공간
    • pip install : pip install SomePackage
      • pip install SomePackage==1.0.4 : 특정 버전으로 설치하기
      • pip install --upgrade SomePackage : 최신 버전으로 업그레이드하기
    •  pip uninstall : pip uninstall SomePackage
    • pip list :설치된 패키지 확인하기

    10. 테스트

    • unittest.TestCase를 상속하는 클래스 생성 : ex) class TestLeapYear(unittest.TestCase):
    • unittest.main() 실행