오랜만이다. 한 3일 만에 글을 쓰는 것 같은데 바쁜 현생을 살고 왔다. 이번 시간에는 Python에 존재하는 여러 가지 예약어에 대해서 알아보도록 하자. 이미 우리가 배운 것도 많이 있으며 어? 이건 새로 보는 건데? 하는 건 사용법으로 알아보자.
※ 주의 ※ 이번글은 굳이 다 읽은 필요가 없다.
and
논리연산 and, 2개의 bool값을 받아 둘 다 참이면 True, 하나라도 False인 경우 False 가 된다.
>>> a = 3
>>> b = 5
>>> print(a>2 and b>4)
True
## a>2와 b>4는 둘다 True라 둘을 and 한 결과도 True이다.
>>> print(a<2 and b>4)
False
## a<2가 거짓이기 때문에 비록 b>4가 True더라도 and의 결과는 False이다.
as
별칭을 지정한다. f객체를 open하며 사용하거나, import 되는 모듈의 이름을 별칭으로 만들기도 한다.
import random as r
print(r.randrange(0,10))
with open("filename.txt","r") as f:
print(f.read())
assert
가정설정문, 특별한 경우를 지정하여 Exception을 발생시킨다.(값 검증에 사용된다.) 여기서 발생되는 Exception은 AssertionError라고 한다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
loc = int(input("몇 번째 과일을 출력하시겠습니까? : "))
try :
assert len(fruits)>loc-1, "배열초과"
print(fruits[loc])
except AssertionError :
print("올바른 값을 입력")
## 실행 :
몇 번째 과일을 출력하시겠습니까? : 2
strawberry
## 재실행 :
몇 번째 과일을 출력하시겠습니까? : 5
올바른 값을 입력
async - await
import asyncio와 같이 사용되며, 비동기 처리방식을 만들 때 사용된다. 함수를 정의할 때 async를 지정하여 네이티브 코 루틴을 생성할 수 있고, await로 해당 코 루틴이 끝나는 것을 기다릴 수 있다.(추후에 자세한 내용 포스팅)
## 코드 :
import asyncio
async def add_five(val) :
print(val,"is val")
await asyncio.sleep(1.0)
return val+5
async def add_print(val) :
print(await add_five(val))
loop = asyncio.get_event_loop()
loop.run_until_complete(add_print(4))
loop.close()
## 출력 : 9는 1초후에 출력된다.
4 is val
9
break
가장가까운 반복문을 중단한다
## 코드 :
for i in range(10) :
if(i>2) :
break
print("HELLO",i)
## 출력 :
HELLO 0
HELLO 1
HELLO 2
class
클래스를 정의한다.(성의 없다.)
class dog :
name = ""
owner = ""
continue
가장 가까운 반복문을 다음 step으로 강제 이동시킨다.
## 코드 :
for i in range(5) :
print("loop is not end")
if(i>2) :
continue
print("HELLO",i)
## 출력 :
loop is not end
HELLO 0
loop is not end
HELLO 1
loop is not end
HELLO 2
loop is not end
loop is not end
def
함수를 정의한다.(성의 없다.)
def my_foo(value):
print(value)
del
변수 / 객체를 삭제한다. 삭제된 변수 / 객체는 접근할 수 없다.(원칙상 그렇다. 취약점으로 접근하는 경우는 논외로 하자)
## 코드 :
a=3
print(a)
del a
print(a)
## 출력 :
3
Traceback (most recent call last):
File "C:/Users/82109/Desktop/123.py", line 5, in <module>
print(a)
NameError: name 'a' is not defined
finally - else
try - except과 같이 사용되며, finally 예약어는 try 나 except에서 실행되고 실행될 블록을, else는 try에서 에러가 검출되지 않을때 실행될 블럭을 지시한다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
try :
print(fruits[3])
except IndexError:
print("인덱스 에러입니다.")
else :
print("인덱스 에러가 아닙니다.")
finally :
print("2케2케해서 출력은 끝입니다.")
## else - finally 중 하나만 써도 되지만, 둘다 쓴다면
## else 다음 finally가 나와야한다.
## 출력 :
kiwi
인덱스 에러가 아닙니다.
2케2케해서 출력은 끝입니다.
from - import
다른 모듈을 import 한다. from과 같이 사용하여 대상을 지정할 수 있고, 이렇게 가져온 모듈은 앞의 클래스 명의 생략이 가능하다.
## 코드 :
import random
print(random.randrange(0,10))
from random import *
print(randrange(0,10))
from random import randrange
print(randrange(0,10))
## 출력 :
3
8
8
for
반복을 지시하는 예약어, iteratable 한 객채를 대상으로 반복자를 지정하여 반복한다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
print("일반적인 for문")
for i in range(len(fruits)) :
print(fruits[i])
print("\nAdvanced for문")
for fruit in fruits :
print(fruit)
## 출력 :
일반적인 for문
apple
orange
strawberry
kiwi
Advanced for문
apple
orange
strawberry
kiwi
global
변수를 전역 변수로 지정한다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
def print_fruits() :
global fruits
print(fruits)
print_fruits()
## 실행 :
['apple', 'orange', 'strawberry', 'kiwi']
if - elif - else
프로그램 제어문으로 프로그램의 분기를 생성한다.
## 코드 :
value = int(input("값을 입력하세요 : "))
if(value>50) :
print("50이상의 값")
elif(value>30) :
print("30이상의 값")
else :
print("뭐죠")
## 실행 :
값을 입력하세요 : 60
50이상의 값
## 재실행
값을 입력하세요 : 40
30이상의 값
## 재실행
값을 입력하세요 : 20
뭐죠
in
포함을 검사하는 예약어. [원소] in [자료구조]로 사용하여 bool값(True, False)을 반환한다. not과 같이 사용하여 not in으로 사용할 수 있다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
if("apple" in fruits) :
print("apple은 있다")
if("app" in fruits[fruits.index("apple")]) :
print("물론 app도 있다")
## 출력 :
apple은 있다
물론 app도 있다
is
동등함을 검사하는 예약어 == 과 다른 점은 같은 값을 가리키느냐(==), 객채를 가리키느냐(is) 차이이다. not과 같이 사용하여 is not으로 쓸 수 있다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
if("apple" is fruits[0]) :
print("그렇죠 같습니다")
## 출력 :
그렇죠 같습니다
lambda
Python에서 익명 함수를 생성하는 예약어이다. (자세한 사용법은 포스팅 예정)
my_foo = lambda x:x+3
print(my_foo(3))
None
값이 없다는 의미이다. NoneType이라는 자료형에 하위 객체인데, 다른 언어의 null처럼 사용된다
nonlocal
인라인 함수에서(Nested Function) 자기 위에 존재하는 변수를 지정할 때 사용된다.(추후 자세한 내용 포스팅)
## 코드 :
def outer_fun(crit) :
data = "outer_fun_data"
def inter_fun() :
nonlocal data
data = "inter_fun_data"
print(data)
if(crit == 1) :
inter_fun()
print(data)
crit = int(input())
outer_fun(crit)
## 실행 :
기준을 입력하세요(1:nonlocal) : 0
outer_fun_data
## 재실행 :
기준을 입력하세요(1:nonlocal) : 1
inter_fun_data
inter_fun_data
not
논리 연산 not, 2개의 bool값을 받아 True - False를 반전 시킨다.
>>> a=3
>>> a>3
False
>>> not a>3
True
## not의 결과는 반전이다.
or
논리연산 or, 2개의 bool값을 받아 둘 중 하나라도 True인 경우 True, 나머지는 False가 된다.
>> a = 3
>> b = 5
>> print(a>2 or b>4)
True
## b<4가 False이지만, a>2가 True 이기때문에 둘의 or는 True이다.
>> print(a<2 or b<4)
False
## 둘다 False인 경우 or의 결과또한 False이다.
pass
실행할 코드가 없음을 명시한다. 이는 except같이 필수적으로 무언가 실행을 지시하여야 하나, 아무 처리를 하지 않을 때 사용된다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
loc = int(input("몇 번째 과일을 출력하시겠습니까? : "))
try :
print(fruits[loc])
except IndexError :
pass
## 실행 :
몇 번째 과일을 출력하시겠습니까? : 1
orange
## 재실행 :
몇 번째 과일을 출력하시겠습니까? : 5
raise
강제 Exception을 발생시킨다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
loc = int(input("몇 번째 과일을 출력하시겠습니까? : "))
try :
if(loc-1 > len(fruits)) :
raise IndexError
print(fruits[loc])
except IndexError :
print("올바른 값을 입력")
## 실행 :
몇 번째 과일을 출력하시겠습니까? : 1
orange
## 재실행 :
몇 번째 과일을 출력하시겠습니까? : 5
올바른 값을 입력
return
함수 실행결과의 반환 값을 지정한다.
## 코드 :
def add_five(value) :
return value+5
print(add_five(3))
## 출력 :
8
try - except
try 코드 블록에서 에러가 발생할 블록을 검사하여 에러를 except 코드블록에서 처리한다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
try :
print(fruits[6])
except IndexError:
print("인덱스 에러입니다.")
## 출력 :
인덱스 에러입니다.
with
객체에 대한 __enter__()와 __exit__()을 자동으로 실행시켜준다. 정말 훌륭한 기능은 file 객체의 f.open()과 f.close()를 자동 호출해준다는 점이다.
with open("filename.txt","r") as f :
print(f.read())
while
반복을 지시하는 예약어 조건이 참 일동 안 loop를 반복한다.
## 코드 :
fruits = ["apple","orange","strawberry","kiwi"]
cnt = 0
while(cnt<len(fruits)) :
print(fruits[cnt])
cnt+=1
## 출력 :
apple
orange
strawberry
kiwi
yield
generator 객체의 다음 반환될 값을 설정한다.(추후에 자세히 포스팅 예정) yield from으로 다른 iteratable 한 객체를 반환할 수 있다.
## 코드 :
def my_generator() :
a=[1,2,3]
for i in range(len(a)) :
yield a[i]
my = my_generator()
print(next(my))
print(next(my))
print(next(my))
## 출력 :
1
2
3
파이선 3.8을 기준으로 만든 35개의 예약어 사전이다(맞겠지? 다 적긴 한 거 같은데...). 필요한 게 생길 때 와서 보면 좋을 것 같다. Python에는 내장 모듈로 keyword를 제공한다. keyword는 파이선에서 제공되는 여러 가지 예약어와 관련된 함수를 정의해두었으니, 사용해보는 것을 추천한다.
'Python > 파이선과 친해지기' 카테고리의 다른 글
[Python] - Python과 매우 친해지기-Iterator와 Generator (0) | 2021.04.10 |
---|---|
[Python] - Python과 매우 친해지기-주석 (0) | 2021.04.10 |
[Python] - Python과 매우 친해지기-학생관리 프로그램ver3 (0) | 2021.04.08 |
[Python] - Python과 매우 친해지기-예외처리 (0) | 2021.04.08 |
[Python] - Python과 매우 친해지기-클래스의 상속 (0) | 2021.04.08 |