Python 심화 학습2

CheolSoonKang·2024년 2월 22일

개념정리

목록 보기
12/18

조건문 심화

다양한 비교 연산자들을 사용해 값을 비교하고, 결과가 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

and, or을 사용해 2개 이상의 조건을 복합적으로 사용할 수 있습니다.

if condition1 and condition2: # 두 조건을 모두 만족할 경우
    # some code
elif condition or condition: # 두 조건 중 하나라도 만족할 경우
    # some code
else: 
    # some code

bool() 함수를 사용해 값이 True인지 False인지는 확인할 수 있다.

print(bool("")) # False
print(bool(0))  # False
print(bool([])) # False
print(bool("sample"))  #True
print(bool([1, 2]))    #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개 이상 존재하기 때문에 분기문을 통과함

함수의 인자와 리턴 타입

python에서 사용되는 함수들은 비슷해 보여도 사용 방법이나 리턴 타입들이 다를 수 있다.
해당 기능의 결과물이 어떤 데이터를 리턴해 주는지 알아야 한다.

# sort
sample_list = [3, 2, 4, 1, 5]
sample_list.sort() # return data 없이 list 자체를 정렬
print(sample_list) # [1, 2, 3, 4, 5]
#
# sorted
sample_list = [3, 2, 4, 1, 5]
sorted_list = sorted(sample_list) # 정렬 된 list를 return
#
print(sorted_list) # [1, 2, 3, 4, 5]

try ~ exception을 활용한 에러 처리

number = input()
try:
    int(number)
    10 / number
#
except ValueError: # int로 변환하는 과정에서 에러가 발생했을 떄
    print(f"{number}은(는) 숫자가 아닙니다.")
# 
except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
    print("0으로는 나눌수 없습니다.")
#    
except Exception as e: # 위에서 정의하지 않은 에러가 발생했을 때(권장 X)
    print(f"예상하지 못한 에러가 발생했습니다. error : {e}")
# except 문법 또한 if / elif와 같이 연달아서 작성할 수 있다.

패킹과 언패킹

  • 어의 뜻 그대로 요소들을 묶어주거나 풀어주는 것을 의미
  • list 혹은 dictionary의 값을 함수에 입력할 때 주로 사용
  • 리스트에서의 패킹과 언패킹

    python

def add(*args):#unpacking
    result = 0
    for i in args:
        result += i 
    return result
numbers = [1, 2, 3, 4]
print(add(*numbers))#packing
  • 딕셔너리에서의 패킹과 언패킹

    python

def set_profile(**kwargs):#unpacking
    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))#packing

Class 심화

init 함수

인스턴스(객체) 생성 시 한 번 실행되는 함수

# class에 __init__메소드를 사용할 경우 인스턴스 생성 시 해당 메소드가 실행된다.
class CookieFrame():
    def __init__(self, name):
        print(f"생성 된 과자의 이름은 {name} 입니다!")
        self.name = name
cookie1 = CookieFrame("cookie1") # 생성 된 과자의 이름은 cookie1 입니다!
cookie2 = CookieFrame("cookie2") # 생성 된 과자의 이름은 cookie2 입니다!

상속

  • 다른 클래스에 선언된 변수, 메소드 등의 기능들을 가져와 사용할 수 있도록 해주는 기능
  • 이 때 상속 해주는 클래스를 부모(parents) 혹은 슈퍼(super) 클래스라 부르며, 상속 받는 클래스를 자식(child) 혹은 서브(sub) 클래스 라고 부른다
class Monster():
    def __init__(self, hp):
        self.hp = hp
    def attack(self, damage):
        self.hp -= damage
    def status_check(self):
        print(f"monster's hp : {self.hp}")

부모 클래스인 Monster() 클래스를 만들었다.
이를 상속받을 자식 클래스를 만들어보겠다.

class FireMonster(Monster):
    def __init__(self, hp):
        self.attribute = "fire"
        # super()를 사용하면 부모 클래스의 코드를 그대로 사용할 수 있습니다.
        # 해당 코드는 self.hp = hp 코드를 실행시키는 것과 동일합니다.
        super().__init__(hp)   
    # 부모 클래스에 존재하는 status_check 메소드를 overriding 합니다.
    def status_check(self):
        print(f"fire monster's hp : {self.hp}")

불 속성을 가진 FireMonster()를 만들었다.
부모 클래스인 Monster()의 함수를 사용하기 위해서는 super()를 사용해주면 되겠다.

class IceMonster(Monster):
    def __init__(self, hp):
        self.attribute = "ice"
        super().__init__(hp)
    def status_check(self):
        print(f"ice monster's hp : {self.hp}")
fire_monster = FireMonster(hp=100)
# FireMonster 클래스에는 attack 메소드가 없지만
# 부모 클래스에서 상속받았기 때문에 별도의 선언 없이 사용 가능합니다.
fire_monster.attack(20)
fire_monster.status_check()
ice_monster = IceMonster(hp=200)
ice_monster.attack(50)
ice_monster.status_check()
profile
소통하며 성장하는 늦깎이 개발자

0개의 댓글