[python] if else one line (3항 연산자)

python에서 if else 문을 한줄에 쓰는 법


흔히 우리가 사용하는 3항 연산자 
a>b ? a:b 
=> condition ? True_Code : False_Code

python에서 3항 연산자, 혹은 one line if-else은 아래와 같다

a if a>b else b
=> True_code if condition else False_code

[date] python 날짜 계산(d-day 계산)

Liberay

from datetime import date

date.days : return day (int)

Code

from datetime import date

end_date = input().split()
start_date = input().split()

end = date(int(end_date[2]), int(end_date[1]), int(end_date[0]))
start = date(int(start_date[2]), int(start_date[1]), int(start_date[0]))
resl = (end - start).days 

Ex)

input : 1 23 2018
              1 20 2018 

output : 3

[A Byte of Python] End of Python

[A Byte of Python]
End of Python


A Byte of Python에 대한 내용은 여기까지 이다.

이후 뒤에 함수에 대한 이야기와 lambda등 여러가지 이야기가 나오는데,
이는 A Byte of Python 보다 Wikidocs의 Jump to Python이 이해하기 변하기에 해당 링크를 달아둔다.

위키독스 링크 : https://wikidocs.net/32

[A Byte of Python] 14장 예외 처리

[A Byte of Python]
14장 예외 처리


오류 처리

기본적으로 파이선은 오류가 나면

SyntaxError: (구문 오류)를 출력하고 발생 위치를 표시한다.

예외 처리

try … except … else 같은 형식이고

try:
    "코드"
except "에러 이름":
    "에러처리"

else:
    "코드"

위와 같은 형식을 사용하며 try아래 코드에서 에러가 발생하면 except문을 찾아 들어가는 형식이다.

임의로 예외 발생 시키기

raise 를 사용해 예외를 임의적으로 예외를 발생 시킬 수 있다.

예제

class MyError(Exception): #Exception 클래스를 상속 받아야 한다.
    pass

try:
    raise MyError
except Myerror:
    print("My Error Raised")
else:
    pinrt('noerror')

저렇게 하면 try아래에서 강제적으로 MyError가 raise되면서 “My Error Raised”를 출력하게 된다.

try … Finally 문

예외의 발생 여부와 관계 없이 항상 try 구문을 빠져나가면 실행 시킬 코드를 적을 수 있다.

try:
    f = open('test','w')
finally:
    f.close()

> try안에서 open()을 통해 파일을 열었을 경우 try를 빠져나가면서 자동으로 close()해줄 수 있다.

With 문

with은에초에 파일을 닫기 위한 구문으로 f.close() 를 적어주지 않아도 with문을 빠져나가면 자동으로 close된다.

with open('test','w') as f:
    for line in f:
        print (line)

위 코드를 보면 f에서 EOF(End of File)을 만나게 되면 자동으로 with문을 나오면서 자동으로 파일이 닫기게된다.

[A Byte of Python] 13장 입출력

[A Byte of Python]
13장 입출력


사용자로 부터 입력 받기

input("출력할 문자열 > ") 라고 입력하면
출력할 문자열 > _ 라고 출력되며 사용자의 입력을 기다린다.

파일 입출력

f = open('파일이름', '권한')  로 입력하며 
권한에는 ‘w : 쓰기 , r : 읽기’+’t: 텍스트형식, b: 바이트 형식 로 입력된다.

그리고 파일을 사용한후 f.close()를 통해 파일을 닫아준다.

Pickle

Pickle은 파이썬 기본 모듈인데, 어떤 파이썬 객체든지 파일로 저장해 두었다가 불러와 사용할 수 있게 하는 모듈이다.

예제

import pickle
test_list = [1, 2, 3, 4] 

f = open('test.data', 'wb') #pickle은 b형식으로 저장한다.
pickle.dump(test_list, f)
f.close()

f = open('test.data', 'rb')
read_list = pickle.load(f) #파일로 부터 list를 읽어 들인다.
f.close()

test_list를 파일로 저장한 한뒤 다시 읽어들여 read_list에 넣는 예제이다.
print()를 통해 보면 test_list와 read_list와 같다는 걸 알 수 있다.

[A Byte of Python] 12장 객체

[A Byte of Python]
12장 객체

[A Byte of Python] 11장 실생활 문제 해결


클래스

class class_name:
    pass

와 같은 형식으로 사용된며 사용할 때는 value = class_name() 이렇게 사용한다.

메소드

클래스에 속해있는 함수를 의미하는데

class class_name:
    def method1(self):
        pass
    def method2(self):
        pass

이렇게 정의되며 사용될 때는 class_name.method1() 이나 할당 시킨 value에 value.method2()
와 같은 방법으로 사용할 수 있다. (Self에 해대선 아래쪽에서 상세히 다룬다.)

init 메소드

클래스를 처음 생성할 때 초기화 시키는 메소드 이다.

class class_name:
    def __init__(self, name):
        self.name = name

위와 같이 정의하며, 사용할 때는 value = class_name("name string")와 같이 사용한다.

클래스 변수와 객체 변수

클래스 변수 > 클래스 내부에서 자유롭게 사용가능한 함수며 클래스와 함께한다.(사라지지 않는다.)
객체 변수 > 메소드 내부에서 사용되는 변수로 메소드 밖으로 나가게 되면 사라지게 된다.

Self에 대하여

클래스 메소드는 일번적인 함수와 딱 한가지 다른 점이 바로 이 self이다.
메소드의 경우 매개 변수의 목록 맨 앞에 추가해야 한다.
해당 self는 파이썬이 자동으로 판별해 넣어줘 메소드를 사용하면서 우리가 따로 입력 할 필요는 없다.

self가 있는 메소드와 없는 메소드의 차이  ++추가설명

class self_test:
    def test1(self, str):
        print(str)
    def test2(str):
        print(str)

t = self_test()
t.test1("test string")
t.test2("test string")

위와 같은 코드가 있을때,
8번째 줄의 test1 메소드는 정상적으로 작동하지만,
9번째 줄의 test2 메소드는 작동하지 않고 오류를 출력한다.

즉 class에서 self 매개 변수는 value.method(arg) 와같은 형식으로 접근이 가능하게 하는 것이다.
이를 통해 self가 의미하는 바를 알 수 있는데 바로 value로 “자기 자신(self)”을 가르킨다는 것을 알 수 있다.

상속

객체 지향 프로그래밍에 있어서 상속을 빼먹을 수 없다.

부모 클래스로 부터 코드를 받아 재사용이 가능하다.

class child_class(parent_class):

위와 같이 상속 받을 수 있으며 부모 클래스의 코드를 재사용할 수 있다.

 

[A Byte of Python] 10장 자료구조

[A Byte of Python]
10장 자료구조


리스트 (list)

리스트란 “순서”대로 정리된 항목들을 담고 있는 자료 구조이다.
정의 방법은 [] 를 사용해 정의하며, 각 항목들은 , 로 구분한다.

튜플 (tuple)

튜플은 리스트와 비슷하지만, 리스트와 달리 “수정이 불가능”하다.
주로 문자열과 같은 정적 객체를 담을 때 사용된다.
정의 방법은 ()를 사용해 정의하며, 각 항목들은 , 로 구분된다.

사전 (dict)

사전은 Key와 Value가 한쌍을 이루는 구조로 Key를 통해 Value에 접근할 수 있다.
정의 방법은 dict = { key1 : value1 , key2 : value2 }와 같은 key:value구조로 되어있으며 각각의 쌍은 , 로 구분된다.


열거형

열거형은 리스트, 튜플. 문자열을 나타내는 것이고,
두가지 중요한 특징이 존재한다.

첫째로, 맴버십 테스트(innot in 연산).

둘째로, 특정 항목을 가져올 수 있는 인덱싱 연산이다.

또한 열거형은 슬라이스 연산 기능이 존재하는데, 열거형의 일부분을 잘라낸것을 만환 하는 연산이다.

예제

shoplist = ['apple', 'mango', 'carrot', 'banana']
name = 'swaroop'
# Indexing or 'Subscription' operation #
print 'Item 0 is', shoplist[0]
print 'Item 1 is', shoplist[1]
print 'Item 2 is', shoplist[2]
print 'Item 3 is', shoplist[3]
print 'Item -1 is', shoplist[-1]
print 'Item -2 is', shoplist[-2]
print 'Character 0 is', name[0]
# Slicing on a list #
print 'Item 1 to 3 is', shoplist[1:3]
print 'Item 2 to end is', shoplist[2:]
print 'Item 1 to -1 is', shoplist[1:-1]
print 'Item start to end is', shoplist[:]
# Slicing on a string #
print 'characters 1 to 3 is', name[1:3]
print 'characters 2 to end is', name[2:]
print 'characters 1 to -1 is', name[1:-1]
print 'characters start to end is', name[:]

 

집합

집합은 정렬되지 않은 단순한 객체의 묶음을 의미한다.
다만 집합은 집합론에 “사용하는 연산”을 사용할 수 있다.
정의 방법은 {}를 사용하며 , 로 각 항을 구분한다.

 

참조

객체를 생성하고 변수에 할당해 줄 때, 객체가 변수에 할당 되는 것이 아닌 “참조“만 할 뿐이다.

예를 들어,

a = [ 1, 2, 3 ]
b = a
a.append(10)

위와 같은 코드가 있을 때,
a와 b의 값은 [ 1, 2, 3, 10 ]으로 동일하다.
즉, a와 b는 같은 객체를 “참조” 하고 있다는 뜻이다.

 

[A Byte of Python] 9장 모듈

A Byte of Python 
9장 모듈(Module)


Python 모듈

파이썬은 .py 확장자를 가진 파일 하나 하나가 모듈이다.
이를 묶어서 놓은게 패키지 이다.

바이트 컴파일된 .pyc 파일

모듈을 불러오는 과정이 많이 무거운 작업이기에, 파이썬은 *바이트 컴파일*시켜 컴퓨터가 빠르게 접근할 수 있도록 만들어져 있다.

from … improt 문

매번 함수를 불러오기위해 import a.b; import a.c할 필요없이
from a import b,c 이런 식으로 편리하게 사용가능하다.

모듈 name 속성

if __name__ == '__main__':
    print ('This program is being run by itself')
else:
    print ('I am being imported from another module')

모든 파이썬 모듈은 name 속성을 가지고 있다.

이러한 특징을 가지고 모듈로써 불러졌는지 main에서 실행 되는지 알 수 있다.

새로운 모듈 작성하기

파이썬 파일(.py)을 만들고 같은 폴더에서 import를 통해 사용할 수 있다.

다만, import mymodule은 해당 파일에 있는 모든 데이터를 가져오지만,
from mymodule import * 와 같은 경우엔 __test__ 와 같은 믿줄 2개로 시작하는 변수는 가져오지 않는다.

dir() 내장 함수

dir 내장 함수를 통해 객체에 정의 되어 있는 식별자들의 목록을 불러 올 수 있다.

dir(sys) 이렇게 실행하면 sys내의 있는 식별자들을 모두 보여준다.
만약 dir() 아무 문자열 없이 실행하면 현재 모듈에 선언된 식별자들을 보여준다.

패키지

만약 world 란 폴더안에 asia, africa 란 폴더를 넣는 식의 계층적으로 모듈을 관리할 수 있게 편의상 구성하는 것이다.

- <some folder present in the sys.path>/
    - world/
        - __init__.py
        - asia/
            - __init__.py
            - india/
                - __init__.py
                    - foo.py
        - africa/
            - __init__.py
            - madagascar/
                - __init__.py
                - bar.py