반응형

 

 

 

 

이틀동안 파이썬 기초를 마무리하였습니다 !! 

아직 완전히 자유롭게 쓰는 것은 아니기 때문에 종종 참고하러 와야 할 듯 합니다.

 

마무리하기 전에 중간에 나왔던 map 함수가 어떤 기능을 하는지 궁금해서 찾아보았습니다.

map 함수

  • map은 리스트의 요소를 지정된 함수로 처리한다.
  • 보통 여러 개의 데이터를 한번에 다른 형태로 바꾸기 위해 사용한다.

 

 

리스트에 map 사용하기

>>> a = [1.2, 2.5, 3.7, 4.6]
>>> a = list(map(int, a))
>>> a
[1, 2, 3, 4]
>>> a = list(map(str, range(10)))
>>> a
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

 

map(함수, 리스트) 이렇게 넣어주면 리스트에 함수를 적용해주는 것 같습니다 !!

 

 

 

input().split() 에 map 사용하기

a, b = map(int, input().split())
print(a, b)

이렇게하면 여러 개의 값을 한 줄로 받아올 수 있습니다.

 

 

일반 함수에 map 사용하기

>>> users = [{'mail': 'gregorythomas@gmail.com', 'name': 'Brett Holland', 'sex': 'M'},
...  {'mail': 'hintoncynthia@hotmail.com', 'name': 'Madison Martinez', 'sex': 'F'},
...  {'mail': 'wwagner@gmail.com', 'name': 'Michael Jenkins', 'sex': 'M'},
...  {'mail': 'daniel79@gmail.com', 'name': 'Karen Rodriguez', 'sex': 'F'},
...  {'mail': 'ujackson@gmail.com', 'name': 'Amber Rhodes', 'sex': 'F'}]
>>> def conver_to_name(user):
...     first, last = user["name"].split()
...     return {"first": first, "last": last}
...
>>> for name in map(conver_to_name, users):
...     print(name)
...
{'first': 'Brett', 'last': 'Holland'}
{'first': 'Madison', 'last': 'Martinez'}
{'first': 'Michael', 'last': 'Jenkins'}
{'first': 'Karen', 'last': 'Rodriguez'}
{'first': 'Amber', 'last': 'Rhodes'}

 

 

 

그리고....람다 함수도 있지만, 아직 받아들일 준비가 안되어서....이만,,,,,

 

 

 

반응형
반응형

 

 

 

 

datetime

datetime 모듈

  • 날짜와 시간을 사용하게 해주는 라이브러리

 

import datetime

christmas_2016 = datetime.datetime(2016,12,25)

print(christmas_2016)
2016-12-25 00:00:00

 

 

 

datetime과 date

from _datetime import date, datetime

print(date.today())
print(datetime.now())

 

date 모듈은 from _datetime을 붙여주어야 실행이 되네요 !

datetime 모듈은 from _datetime을 붙여주니 datetime.datetime.now() -> datetime.now() 로 한 번만 써도 되게 합니다 !

왜 앞에 '_'를 붙여야 되는지는 모르겠지만....?

 

 

 

 

timedelta

timedelta 클래스

  • 시간의 연산을 가능하게 해주는 클래스

 

현재로부터 100일 후 9시의 시간을 반환하는 예제 )

import datetime

hundred_after = datetime.datetime.now().replace(hour=9, minute=0, second=0) + datetime.timedelta(days = 100)

print("{}/{}/{}  {}:{}:{}".format(hundred_after.year,hundred_after.month, hundred_after.day, hundred_after.hour, hundred_after.minute, hundred_after.second))

 

 

 

반응형
반응형

 

 

 

 

List

List Comprehension

  • 파이썬의 유용한 도구
    • 예1 [ i*i for i in range(1,11) ] # [ 계산식 for문 ]
    • 예2 [ i*i for i in range(1,11) if i % 2 == 0 ] # [ 계산식 for문 조건문 ]
    • 예3 [ ( x, y ) for x in range(15) for y in range(15) ] # [ 계산식 for문 for문 ]

 

예시 )

list1 = [ i for i in range(1,101) if i % 8 == 0]

print("list1 : ", list1)
list1 :  [8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96]

 

 

 

 

Dictionary

Dictionary Comprehension

  • 파이썬의 유용한 도구
  • 예시
    • { "{}번".format(number):name for number, name in enumerate(students) } # [ 형식 for문 ]
    • {student:score for student, score in zip(students, scores)}

 

예시 )

product_list = ["풀", "가위", "크래파스"]
price_list = [800, 2500, 5000]
product_dict = { x : y for x, y in zip(product_list, price_list) }

print(product_dict)
{'풀': 800, '가위': 2500, '크래파스': 5000}

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

상속(Inheritance)

  • 상속하는 클래스를 부모 클래스
  • 상속받는 클래스를 자식 클래스
  • 자식 클래스가 부모 클래스의 내용을 가져다 쓸 수 있는 것

 

class Animal( ):
    def walk( self ):
        print( "걷는다" )

    def eat( self ):
        print( "먹는다" )

class Human( Animal ):
    def wave( self ):
        print( "손을 흔든다" )

class Dog( Animal ):
    def wag( self ):
        print( "꼬리를 흔든다" )

 

 

궁금한 점 !

두 개 이상의 클래스를 상속받을 수는 없나요?

# 다중 상속
class Person():
    def walk(self):
        print("걷는다")
    def eat(self):
        print("먹는다")

class Student():
    def study(self):
        print("공부한다")

class Me(Person, Student):
    def grow(self):
        print("자란다")

 

이렇게 두 개의 클래스를 작성하면 된다.

 

 

 

 

 

단순 오버라이드

오버라이드(Override)

  • 같은 이름을 가진 메소드를 덮어 쓴다는 의미
class Animal( ):
    def greet( self ):
        print( "인사한다" )

class Human( Animal ):
    def greet( self ):
        print( "손을 흔든다" )

class Dog( Animal ):
    def greet( self ):
        print( "꼬리를 흔든다" )

 

예시 )

class Car():
    
    def run(self):
        print("차가 달립니다.")


class Truck(Car):
    
    def load(self):
        print("짐을 실었습니다.")
    # 이 아래에서 run 메소드를 오버라이드 하세요.
    def run(self):
        print("트럭이 달립니다.")
    
truck = Truck()
truck.run()
트럭이 달립니다.

 

 

 

 

super()

  • 자식클래스에서 부모클래스의 내용을 사용하고 싶은 경우
  • super().부모클래스내용
class Animal( ):
    def __init__( self, name ):
        self.name = name

class Human( Animal ):
    def __init__( self, name, hand ):
        super().__init__( name ) # 부모클래스의 __init__ 메소드 호출
        self.hand = hand

person = Human( "사람", "오른손" )

 

 

 

 

 

내 예외 만들기

예외 정의

  • 사용자가 직접 예외처리를 하면 코드의 직관성을 높일 수 있다.
  • 파일을 하나 만들어 예외를 정의
  • Exception 클래스를 상속받아 만든다

 

# 이 아래에 Exception을 상속 받는 MyException클래스를 정의하세요.
class MyException(Exception):
    """아무꺼나"""
    
    
shops = {
    "송일문방구": {"가위": 500, "크레파스": 3000},
    "알파문구": {"풀": 800, "도화지": 300, "A4용지": 8000},
    "다이소": {"풀": 500, "목공본드": 2000, "화분": 3000}
}


try:
    for shop, products in shops.items():
        for product, price in products.items():
            if product == '풀':
                print("{}: {}원".format(shop, price))
                raise MyException
except MyException:
    print("풀을 찾았습니다.")

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

모델링(modeling)

  • 클래스로 현실의 개념을 표현하는 것

 

 

메소드(Method)

  • 메소드는 함수와 비슷하다.
  • 클래스에 묶여서 클래스의 인스턴스와 관계되는 일을 하는 함수

클래스 내부에 함수를 포함시킨 예

class Human( ):
    '''인간'''
    def create( name, weight ): # 다음 강의에서 자세히 설명
        person = Human()
        person.name = name
        person.weight = weight
        return person

    def eat( self ):
        self.weight += 0.1
        print("{}가 먹어서 {}kg이 되었습니다".format(self.name, self.weight))

    def walk( self ):
        self.weight -= 0.1
        print("{}가 걸어서 {}kg이 되었습니다".format(self.name, self.weight))

person = Human.create("철수", 60.5)
person.eat()

 

self

  • 메소드의 첫번째 인자
  • 인스턴스의 매개변수를 전달 할 때는 self 매개변수는 생략하고 전달
class Car():
    '''자동차'''
    def run( self ):
        print("{}가 달립니다.".format(self.name))


taxi = Car()
taxi.name = "택시"
taxi.run()

 

 

 

 

 

 

특수한 메소드

초기화 함수

  • __init__ : 인스턴스를 만들 때 실행되는 함수

문자열화 함수

  • __str__ : 인스턴스 자체를 출력 할 때의 형식을 지정해주는 함수
class Human( ):
    '''인간'''
    def __init__( self, name, weight ):
        '''초기화 함수'''
        self.name = name
        self.weight = weight

    def __str__( self )
        '''문자열화 함수
        return "{} ( 몸무게 {}kg )".format( self.name, self.weight )

person = Human( "사람", 60.5 ) # 초기화 함수 사용
print( person ) # 문자열화 함수 사용

 

예시 )

class Human():
    
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight
    
    def __str__(self):
        return "{} (몸무게 {}kg)".format(self.name, self.weight)
    
    def eat(self):
        self.weight += 0.1
        print("{}가 먹어서 {}kg이 되었습니다.".format(self.name, self.weight))
    
    def walk(self):
        self.weight -= 0.1
        print("{}가 걸어서 {}kg이 되었습니다.".format(self.name, self.weight))

# 아래에서 person을 이름과 몸무게를 가지는 Human클래스의 인스턴스로 만들어보세요.
person = Human("두리", 3.2)
person.walk()
person.walk()
person.eat()

print(person)

 

 

 

 

반응형
반응형

 

 

 

자료형 다루기

자료형

  • type( a ) # type( 변수명 ) : 자료형
  • isinstance( 42, int ) # isinstance( 값, 자료형 ) : 자료형 검사

 

my_list = [1, 2, 3]
my_dict = {"풀": 800, "색연필": 3000}
my_tuple = (1, 2, 3)
number = 10
real_number = 3.141592

print(type(my_list))
print(type(my_dict))
print(type(my_tuple))
print(type(number))
print(type(real_number))
<class 'list'>
<class 'dict'>
<class 'tuple'>
<class 'int'>
<class 'float'>

 

 

 

 

인스턴스 이해

클래스

  • 함수나 변수들을 모아 놓은 집합체

인스턴스

  • 클래스에 의해 생성된 객체
  • 인스턴스 각자 자신의 값을 가지고 있다.

 

 

list1과 list2의 값은 같지만, 다른 인스턴스이다.

list1 = [1, 2, 3]
list2 = [1, 2, 3]

if list1 is list1:
    print("당연히 list1과 list1은 같은 인스턴스입니다.")

if list1 == list2:
    print("list1과 list2의 값은 같습니다.")
    if list1 is list2:
        print("그리고 list1과 list2는 같은 인스턴스입니다.")
    else:
        print("하지만 list1과 list2는 다른 인스턴스입니다.")
당연히 list1과 list1은 같은 인스턴스입니다.
list1과 list2의 값은 같습니다.
하지만 list1과 list2는 다른 인스턴스입니다.

 

 

list1과 list2 모두 list 클래스의 인스턴스이다.

list1 = list(range(10))
list2 = [1, 2, 3]

if isinstance( list1, list) and isinstance( list2, list):
    print("list1과 list2는 둘 다 list클래스 입니다.")

 

 

 

 

클래스 만들기

클래스 선언

class Human( ):
    '''사람'''

인스턴스 생성

person1 = Human( )
person2 = Human( )

 

  • 클래스와 인스턴스를 이용하면 데이터와 코드를 사람이 이해하기 쉽게 포장할 수 있다.
class Car():
    '''자동차'''

taxi = Car()

# taxi.name에 "택시"라는 값을 저장하세요.
taxi.name = "택시"

 

 

 

반응형

+ Recent posts