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
blog of SilNex
Python Language Concept
흔히 우리가 사용하는 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
from datetime import date
date.days : return day (int)
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
input : 1 23 2018
1 20 2018
output : 3
A Byte of Python에 대한 내용은 여기까지 이다.
이후 뒤에 함수에 대한 이야기와 lambda등 여러가지 이야기가 나오는데,
이는 A Byte of Python 보다 Wikidocs의 Jump to Python이 이해하기 변하기에 해당 링크를 달아둔다.
위키독스 링크 : https://wikidocs.net/32
기본적으로 파이선은 오류가 나면
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 구문을 빠져나가면 실행 시킬 코드를 적을 수 있다.
try:
f = open('test','w')
finally:
f.close()
> try안에서 open()을 통해 파일을 열었을 경우 try를 빠져나가면서 자동으로 close()해줄 수 있다.
with은에초에 파일을 닫기 위한 구문으로 f.close() 를 적어주지 않아도 with문을 빠져나가면 자동으로 close된다.
with open('test','w') as f:
for line in f:
print (line)
위 코드를 보면 f에서 EOF(End of File)을 만나게 되면 자동으로 with문을 나오면서 자동으로 파일이 닫기게된다.
input("출력할 문자열 > ")
라고 입력하면
출력할 문자열 > _
라고 출력되며 사용자의 입력을 기다린다.
f = open('파일이름', '권한')
로 입력하며
권한에는 ‘w : 쓰기 , r : 읽기’+’t: 텍스트형식, b: 바이트 형식 로 입력된다.
그리고 파일을 사용한후 f.close()
를 통해 파일을 닫아준다.
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] 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에 해대선 아래쪽에서 상세히 다룬다.)
클래스를 처음 생성할 때 초기화 시키는 메소드 이다.
class class_name:
def __init__(self, name):
self.name = name
위와 같이 정의하며, 사용할 때는 value = class_name("name string")
와 같이 사용한다.
클래스 변수 > 클래스 내부에서 자유롭게 사용가능한 함수며 클래스와 함께한다.(사라지지 않는다.)
객체 변수 > 메소드 내부에서 사용되는 변수로 메소드 밖으로 나가게 되면 사라지게 된다.
클래스 메소드는 일번적인 함수와 딱 한가지 다른 점이 바로 이 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):
위와 같이 상속 받을 수 있으며 부모 클래스의 코드를 재사용할 수 있다.
리스트란 “순서”대로 정리된 항목들을 담고 있는 자료 구조이다.
정의 방법은 []
를 사용해 정의하며, 각 항목들은 ,
로 구분한다.
튜플은 리스트와 비슷하지만, 리스트와 달리 “수정이 불가능”하다.
주로 문자열과 같은 정적 객체를 담을 때 사용된다.
정의 방법은 ()
를 사용해 정의하며, 각 항목들은 ,
로 구분된다.
사전은 Key와 Value가 한쌍을 이루는 구조로 Key를 통해 Value에 접근할 수 있다.
정의 방법은 dict = { key1 : value1 , key2 : value2 }
와 같은 key:value구조로 되어있으며 각각의 쌍은 ,
로 구분된다.
열거형은 리스트, 튜플. 문자열을 나타내는 것이고,
두가지 중요한 특징이 존재한다.
첫째로, 맴버십 테스트(in
과 not 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는 같은 객체를 “참조” 하고 있다는 뜻이다.
파이썬은 .py 확장자를 가진 파일 하나 하나가 모듈이다.
이를 묶어서 놓은게 패키지 이다.
모듈을 불러오는 과정이 많이 무거운 작업이기에, 파이썬은 *바이트 컴파일*시켜 컴퓨터가 빠르게 접근할 수 있도록 만들어져 있다.
매번 함수를 불러오기위해 import a.b; import a.c
할 필요없이
from a import b,c
이런 식으로 편리하게 사용가능하다.
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(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