2023/08/15 개발일지(파이썬 기초문법-2)

장현웅·2023년 8월 15일
0

파일 불러오기

  • main_func.py
def say_hi():
    print('안녕!')

def say_hi_to(name):
    # print('영수님 안녕하세요')
    print(f'{name}님 안녕하세요')
  • main_test.py
from main_func import * # *은 파일명에 있는 모든 함수들을 가져옴.

say_hi()
say_hi_to('영수')

# 안녕!
# 영수님 안녕하세요!

from main_func import say_hi_to

say_hi()
say_hi_to('영수')

# NameError: name 'say_hi' is not defined

식을 한 줄로 축약하기

1) if문 - 삼항연산자

num = 3

if num%2 == 0:
	# print('짝수')
    result = '짝수'
else:
	# print('홀수')
    result = '홀수'

print(f"{num}은 {result}입니다.")

# 3은 홀수입니다

이것을 한 줄에 적는 것이 파이썬의 유일한 삼항연산자인 조건식이다.

result = ('짝수' if num % 2 == 0 else '홀수')
# '짝수'라고 해라. 만약에 num을 2로 나눈 나머지가 0이면. 그게 아니면 '홀수'라고 해라.

🙂 (참일 때 값) if (조건) else (거짓일 때 값)으로 항이 3개라 삼항 연산자이다.

2) for문 - 한방에 써버리기

a_list  = [1, 3, 2, 5, 1, 2]
# 각 요소에 *2한 리스트를 만들고 싶다.
b_list = []
for a in a_list:
    b_list.append(a*2) # a_list를 돌면서 *2한 것을 b_list에 하나씩 추가해라.

print(b_list)

# [2, 6, 4, 10, 2, 4]

이것을 한 번에 쓸 수 있는 방법

b_list = [a*2 for a in a_list]
# a를 *2를 해라. a를 돌려라. a_list에 있는. 그리고 걔들을 다 리스트로 묶어라.

map, filter, lambda식

1) map - 리스트의 모든 원소를 조작하기

  • 리스트의 요소를 지정한 함수로 처리
  • map 객체를 리턴하므로 list형태로 바꿔서 프린트해야 함.
people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]
  • 1차 조작(map - map(함수, 리스트))
def check_adult(person):
    if person['age'] > 20:
        return '성인'
    else:
        return '청소년'

result = map(check_adult, people) # people을 하나하나 돌면서 check_adult에 넣어라.
print(result)

# <map object at 0x000001F7157B8FD0>
print(list(result))

# ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인'] 리스트로 묶어줘야 결과값이보인다.
  • 2차 조작(반복문 축약)
def check_adult(person):
    return '성인' if person['age'] > 20 else '청소년'
# '성인'이라고 하자. 만약에 person의 'age'가 20보다 크면. 그게 아니면 '청소년'이라고 하자.

result = map(check_adult, people)
print(list(result))
  • 3차 조작 ((lambda 매개변수 : 표현식) : 함수를 하나의 식으로 표현한 것)
result = map(check_adult, people)
result = map(lambda x: x, list) 
# list를 돌면서 x에 값(x)을 넣음. lambda식은 매개변수를 보통 x로 쓴다.
result = map(lambda person: ('성인' if person['age'] > 20 else '청소년'), people)
# people을 돌면서 person에 '성인' if person['age'] > 20 else '청소년'의 값을 넣음.

2) filter - 리스트의 모든 원소 중 특별한 것(True인 것들)만 뽑기

result = filter(lambda x: x['age'] > 20, people)
# people의 요소를 하나하나 x에 넣고 그 x의 'age'값이 20보다 크면 걔들만 뽑아라.
print(list(result))

# 
[{'name': 'carry', 'age': 38}, 
{'name': 'ben', 'age': 27}, 
{'name': 'bobby', 'age': 57}, 
{'name': 'red', 'age': 32}, 
{'name': 'queen', 'age': 25}]

함수의 매개변수

1) 함수에 인수를 넣을 때, 어떤 매개변수에 어떤 값을 넣을지 정해줄 수 있다. 순서 상관 없음!

def cal(a, b):
    return a + 2 * b

result = cal(1,2)
print(result) # 5

result = cal(2,1)
print(result) # 4

result = cal(a=2, b=3)
print(result) # 8

result = cal(b=3, a=2)
print(result) # 8

# 매개변수에 직접 값을 지정해주면 순서를 맞추지 않아도 된다.

2) 특정 매개변수에 디폴트 값을 지정해줄 수 있다.

def cal(a, b=2): # b의 값을 2로 고정
    return a + 2 * b

result = cal(1) # b값을 안 넣어줬지만 디폴트값이 있어서 넣었다고 인식함.
print(result) # 5 

result = cal(1,3) # 따로 값을 넣어주지 않으면 디폴트 값이 기본값으로 적용되고 직접 넣어줬을 경우 넣어준 값으로 적용됨.
print(result) # 7 

3) 입력값의 개수를 지정하지 않고 모두 받는 방법(args : arguments)

def cal(*args): # 변수인자를 무제한으로 넣을 수 있다. 그것을 리스트로 받아서 쓸 수 있다.
	for name in args:
        print(f'{name}야 밥먹어라~')

cal('철수','영수','희재')

#
철수야 밥먹어라~
영수야 밥먹어라~
희재야 밥먹어라~

4) 키워드 인수를 여러 개 받는 방법(**kwargs : 딕셔너리 형태로 만들어서 쓸 수 있음)

def cal(**kwargs):
	print(kwargs)

cal(name='bob',age=30)
cal(height=180)
# 
{'name': 'bob', 'age': 30}
{'height': 180}

클래스

1) 언제 사용하는지가 중요하다.

예를 들어, 아주 많은 몬스터들의 HP를 관리해야 하면?

방법 1. 리스트의 순서를 잘 지켜서 각 몬스터들의 hp를 잘 적어둔다. (중앙 한 곳에 모아서 관리)

방법 2. 몬스터마다 각자의 hp를 가질 수 있게 한다.

만약 뱀이 100마리 1000마리라면 뱀의 HP를 각각 자체적으로 관리해주는 것이 효율적이고 직관적임. -> 객체지향적

  • 객체지향
    각 객체에 그것들에 관련된 속성들을 넣어두고 컨트롤 할 수 있는 함수들을 넣어둔 후 한 곳에서 함수들만 불러서 각 객체들을 제어하는 것

2) 어떻게 쓰는가?

class Monster():
    hp = 100
    alive = True

    def damage(self, attack): # self는 내가 받은 attack은 내가 받은 데미지
        self.hp = self.hp - attack
        if self.hp < 0:
            self.alive = False
            
    def status_check(self): # 죽었는지 살았는지
        if self.alive( == True):
            print('살아있다')
        else:
            print('죽었다')
            
m1 = Monster()
m1.damage(150)
m1.status_check() # 죽었다.

m2 = Monster()
m2.damage(90)
m2.status_check() # 살았다.

# 자체적으로 관리가 가능
# m1, m2는 인스턴스
  • 인스턴스(instance)
    같은 클래스에 속하는 개개의 객체로, 하나의 클래스에서 생성된 객체
    즉 클래스가 구체화되어, 클래스에서 정의된 속성과 성질을 가진 실제적인 객체로 표현된 것을 의미


출처: 네이버 지식백과

0개의 댓글