[내일배움캠프_TIL]2023.03.21_7일차

yell·2023년 3월 21일
1

NBCAMP

목록 보기
8/17

Today

#🔚Python 문법 기초 강의 수강

#🔛Python 문법 심화 강의 수강


오늘공부한 내용📝

  • 가상 환경(virtual environment)
    : pip라는 패키지 인스톨러를 사용해 패키지들을 설치하고 관리할 때, 가상환경을 활용하여 각 프로젝트마다 독립적인 환경을 구성해주므로써 호환성 문제를 최소화 시킬 수 있다.

  • 코드 컨벤션
    : 스타일을 통일하자는 "약속"

    파이썬 컨벤션 가이드 PEP-8

    • 코드 컨벤션은 언어에 따라 요구하는 내용이 다름.

    • 파이썬에서는 네이밍 컨벤션으로
      변수/함수를 네이밍할 때는 Snake 표기법을, Class를 네이밍할 때는 Pascal 표기법을 사용

    • 네이밍 컨벤션
      : 대표적으로 Pascal, Snake, Camel 표기법이 존재

      • Pascal : PythonIsVeryGood ;각 단어를 대문자로 구별
      • Camel : pythonIsVeryGood ;Pascal과 동일하지만, 첫 문자가 소문자로 시작
      • Snake : pythonis_very_good ;각 단어를 언더바( )로 구분
  • 변수 유효 범위(variable scope)

    • 변수 유효 범위
      : 변수가 선언된 위치나 키워드에 따라 변수를 사용할 수 있는 범위가 달라지게 되는데, 이를 변수 유효 범위 혹은 variable scope라고 부른다.
      유효 범위에 따라 지역 변수(local variable)와
      전역 변수(global variable)로 나뉜다.

    • 지역 변수(local variable); 함수 내부에서 선언되며 다른 함수에 영향X. global 키워드를 사용해 전역 변수로 재선언할 수 있음.

           def func1():
               number = 10 # 함수 내에서 number라는 지역 변수를 선언
               
           def func2():
               print(number) # func1에서 생성된 지역 변수는 funt2에서 접근할 수 없다.
               
           func1()
           func2()
           
           """
           Traceback (most recent call last):
             File "sample.py", line 8, in <module>
               func2()
             File "sample.py", line 5, in function2
               print(number)
           NameError: name 'number' is not defined
           """
    • 전역 변수(global variable); 함수 밖에서 선언되며 어디서든 접근가능.

           number = 10 # 함수 밖에서 number라는 전역 변수 생성
           
           def func():
               print(number) # 전역 변수는 자유롭게 접근할 수 있다.
               
           func() # 함수를 실행하면 10이 정상적으로 출력된다.

      *전역 변수를 권장하지 않음.
      : 코드가 길어질수록 전역 변수로 선언 된 값은 어디서 값이 변했는지 추적하기 어렵고, 문제가 생겼을 때 디버깅을 하기 어려워짐. 참고) stackoverflow의 글

            #이런 방식으로 하기
            test = 123
      
            def func():
                return 456
      
            def func2(value):
                print(value)
      
            result = func()
            func2(result)

- 자주 사용되는 모듈 및 패턴

  • 조건문 심화

    • 다양한 비교 연산자들을 사용해 값을 비교하고, 결과가 True인지 False인지 판단
         # == ;값이 일치하는지 비교
          "a" == "a" # True
          "a" == "b" # False
          1 == "1" # False, 값은 동일하지만 자료형이 다르기 때문
          
          # != ;값이 일치하지 않는지 비교
          0 != 1 # True
          0 != 0 # False
          
          # >, < ;값이 큰지 작은지 비교
          5 > 2 # True
          1 < 0 # False
          1 > 1 # False
          
          # >=, <= ;값이 크거나 같은지, 작거나 같은지 비교
          1 >= 1 # True
          
          # in ;특정 값이 list / tuple / set에 포함되어 있는지 확인
          4 in [1, 2, 3] # False
          1 in (1, 2, 3) # True
          
          # 모든 비교 연산자의 결과는 print()로 확인할 수 있다
          print(1 == 1) # True
    • 특정 비교 결과 혹은 값이 True 혹은 False일 경우 실행 될 로직을 정의
      if condition: # 조건이 True일 경우
          # some code
      
      # not 키워드를 사용할 경우 조건이 False일 때 실행
      elif not condition: # 조건이 False일 경우
          # some code
      
      else: # 위 조건들 중 만족하는게 없을 경우
          # some code
    • and, or을 사용해 2개 이상의 조건을 복합적으로 사용
      if condition1 and condition2: # 두 조건을 모두 만족할 경우
          # some code
      
      elif condition or condition: # 두 조건 중 하나라도 만족할 경우
          # some code
      
      else: 
          # some code
    • 비어있는 string, list 등은 분기문에서 False로 판단
          empty_string = ""
          empty_list = []
          
          if not empty_string:
              print("string is empty!!")
          
          if not empty_list:
              print("list is empty!!")
    • 특정 값이 True인지 False인지는 bool() 함수를 사용해 확인
      print(bool(""))
      print(bool(0))
      print(bool([]))
      
      print(bool("sample"))
      print(bool([1, 2]))
      print(bool(1))
      print(bool(-1)) # 0이 아닌 숫자는 True로 판단
      
      # sample result
      """
      False
      False
      False
      
      True
      True
      True
      True
      """
    • any() 혹은 all() 함수를 사용해 여러 값들에 대한 조건을 판단
      # all() : 요소들이 모두 True일 경우 True 리턴
      if all([True, True, True, False, True]):
          print("통과!") # False가 존재하기 때문에 분기문을 통과하지 못함
      
      # any() : 요소들 중 하나라도 True일 경우 True 리턴
      if any([False, False, False, True, False]):
          print("통과!") # True가 1개 이상 존재하기 때문에 분기문을 통과함
  • 함수의 인자와 리턴 타입

    • 리턴 타입에 따른 활용 방법
      : 함수들마다 사용법과 리턴 타입들이 다르다. 그렇기 때문에 특정 기능을 사용할 때 해당 기능의 결과물이 어떤 데이터를 리턴해 주는지 알아야 한다.

    • 사용하는 코드의 리턴 타입을 확인하는 방법

        1. 검색
          google에 python 함수명과 같은 형태로 검색해서 해당 기능을 어떻게 사용해야 하는지 확인. 영어로 검색 권장
        1. docstring 확인
          함수를 작성할 때 docstring을 활용하면 사용하려는 함수가 어떤 역할을 하는지, 어떤 값을 인자로 받는지, 어떤 값을 리턴해주는지 확인할 수 있다.
        1. 함수 구현 코드 확인
          내장함수의 경우 c언어로 컴파일 되어 있는 경우가 많아 때문에 해당하지 않을 수 있지만, 특히 외부 라이브러리를 import 해서 사용할 때는 구현부의 코드를 보고 사용 방법을 익히는 것도 좋은 방법이다. vscode에서 사용하는 함수를 ctrl + click 하면 구현 코드를 확인할 수 있다.
  • try / exception을 활용한 에러 처리

    • try / except 문법을 사용해 에러가 발생했을 때 처리
      number = "num"
      
      try: # try 구문 안에서 에러가 발생할 경우 except로 넘어감
          number = int(number) # "num"을 숫자로 바꾸는 과정에서 에러 발생
      except: # 에러가 발생했을 때 처리
          print(f"{number}은(는) 숫자가 아닙니다.")
    • 에러 종류에 따라 다른 로직 처리
      number = input()
      
      try:
          int(number)
          10 / number
      
      except ValueError: # int로 변환하는 과정에서 에러가 발생했을 떄
          print(f"{number}은(는) 숫자가 아닙니다.")
          
      except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
          print("0으로는 나눌수 없습니다.")
          
      except Exception as e: # 위에서 정의하지 않은 에러가 발생했을 때(권장하지 않음)
          print(f"예상하지 못한 에러가 발생했습니다. error : {e}")
      
      # except 문법 또한 if / elif와 같이 연달아서 작성할 수 있음.
  • 패킹과 언패킹
    : 패킹(packing)과 언패킹(unpacking)은 단어의 뜻 그대로 요소들을 묶어주거나 풀어주 것의 의미. list 혹은 dictionary의 값을 함수에 입력할 때 주로 사용.

    • list에서의 활용

      def add(*args):
          result = 0
          for i in args:
              result += i
              
          return result
      
      numbers = [1, 2, 3, 4]
      
      print(add(*numbers))
      """ 아래 코드와 동일
      print(add(1, 2, 3, 4))
      """
      
      # result output
      """
      10
      """
      
    • dictionary에서의 활용

      def set_profile(**kwargs):
          profile = {}
          profile["name"] = kwargs.get("name", "-")
          profile["gender"] = kwargs.get("gender", "-")
          profile["birthday"] = kwargs.get("birthday", "-")
          profile["age"] = kwargs.get("age", "-")
          profile["phone"] = kwargs.get("phone", "-")
          profile["email"] = kwargs.get("email", "-")
          
          return profile
      
      user_profile = {
          "name": "lee",
          "gender": "man",
          "age": 32,
          "birthday": "01/01",
          "email": "python@sparta.com",
      }
      
      print(set_profile(**user_profile))
      """ 아래 코드와 동일
      profile = set_profile(
          name="lee",
          gender="man",
          age=32,
          birthday="01/01",
          email="python@sparta.com",
      )
      """
      
      # result print
      """
      {
          'name': 'lee',
          'gender': 'man',
          'birthday': '01/01',
          'age': 32,
          'phone': '-',
          'email': 'python@sparta.com'
      }
      """
profile
...

0개의 댓글