2019.03.05 - python(1)
dictionary에서 사용가능한 함수들
- get()
# get()함수는 None인 경우 error를 유발하지 않음
dic.get('b')
dic['e']
>>> error
print(dic.get('e'))
>>> None
없는 키 값을 넣었을 때 dic[‘e’]은 에러를, dic() 함수는 None을 반환한다.
if dic.get('e'):
print(dic['e'])
else:
print('No data')
try:
print(dic['e'])
except KeyError:
print('No data')
key값에 e가 있으면 value를 주고, 없으면 0을 반환해라
dic.get('e', 0)
key값에 e가 있으면 value를 주고, 없으면 0을 반환한 후 그 반환값에 1을 더해라
dic.get('e', 0) + 1
- pop()
dic.pop((1, 2, 3))
# value를 반환하고 사라진다
- setdefault()
get() 과 같이 key에 대한 값이 있으면 반환해주지만, 만약 ‘e’에 대한 값이없으면 값까지 넣어준다.
dic.setdefault('e', 10)
- update()
key값이 있으면 수정, 없으면 새로 생성
dic.update({'b': 40, 'f': 50})
c = (('g', 11), ('h', 12))
dic.update(c)
dic
>>> {'g': 11, 'h': 12}
Dictionary View Objects
python에서 dictionary의 view objects는 itmes(), keys(), values() 3개가 있다. 이들은 항상 원본 dictionary를 가리키고있으며, 원본이 update되면 그 즉시 반영한다.
아래의 예시들을 통해 view objects가 자동으로 업데이트가 된다는 것을 확인하자.
- items()
for key, value in dic.items():
print(key, value)
a 1
b 40
c 3
d 20
items하면 원래 dic을 for문으로 돌리면 key값만 나오지만, items()를 활용하면 key, value가 다 나온다.
- keys()
dic.keys()
>>> dict_keys(['a', 'b', 'c', 'd']) # view 객체
key_list = list(dic.keys())
>>> ['a', 'b', 'c', 'd'] # view객체도 list로 변환가능하다
- values()
dic.values()
dict_values([1, 2, 3])
dic = {'a': 1, 'b': 2, 'c': 3}
key_list = list(dic.keys())
key_list
>>> ['a', 'b', 'c']
values_list = list(dic.values())
value_list
>>> [1, 2, 3]
key_view
>>> dict_keys(['a', 'b', 'c'])
value_view = dic.values()
value_view
>>> dict_values([1, 2, 3])
dic['d'] = 4
{'a': 1, 'b': 2, 'c': 3 , 'd': 4}
key_list
>>> ['a', 'b', 'c']
value_list
>>> [1, 2, 3]
key_view
>>> dict_keys(['a', 'b', 'c', 'd'])
value_view
>>> dict_values([1, 2, 3, 4])
list comprehension
li = []
for i in range(1, 1000+1):
li.append(i)
# list comprehension
li2 = [i*2 for i in range(1, 1000+1)]
for문이 들어가고 받아온 i에 대해서 그 i를 그냥 넣어주거나 연산을 한 후 값을 넣어줌
dictionary comprehension
tu = (('a', 1), ('b'), 2), ('c', 3), ('d', 4))
dic = {}
for k, v in tu:
dic[k] = v
# dictionary comprehension
dic2 = {k : v for k, v in tu}
# v에 대해 연산도 가능하다
파이썬에서 False로 간주하는 객체
- False
- None
- ”” 빈 문자열
- [] 빈 리스트
- () 빈 튜플
- {} 빈 딕셔너리
- set() 빈 셋
논리연산자
- 비트 연산자에서는 1은 True로 0은 False로 생각하고 자릿수 별로 연산을 한다. AND연산자는
&
, OR 연산자는|
표기한다.
input | input | and | or |
---|---|---|---|
True | True | True | True |
True | False | False | True |
False | True | False | True |
False | False | False | False |
Exclusive OR (XOR)
- XOR는
^
로 표기한다.
input | input | XOR |
---|---|---|
True(1) | True(1) | False(0) |
True(1) | False(0) | True(1) |
False(0) | True(1) | True(1) |
False(0) | False(0) | False(0) |
bin(0b1100 ^ 0b1010)
>>> '0b110'
맨 마지막에 참조한 객체를 반환
논리연산의 방식으로 아래의 규칙을 따른다.
# []는 참조하지 않기때문에 마지막에 참조한 [1, 2]를 반환
[1, 2] or []
>>> [1, 2]
# 맨 마지막까지 참조한 [3, 4]를 반환
[1, 2] and [3, 4]
>>> [3, 4]
# 앞에가 이미 False 이기때문에 뒤에는 볼것도 없이 False, 따라서 [] 반환
[] and [1, 2]
>>> []
if [] and [1, 2]:
print('거짓')
else:
print('참')
>>> 참
shift operator
1 << 1 # '<<'연산자는 왼쪽으로 자리수를 하나 민다는 뜻
>>> 2
10>>2 # '>>'연산자는 오른쪽으로 자리수를 하나 민다는 뜻
>>> 2
function
- a, b 는 전역변수(global variable), e는 지역변수(local variable), c, d는 매개변수라고한다. 가끔 매개변수와 지역변수를 합쳐서 지역변수라고 묶어서 부르기도 한다.
a=10
b=20
def func(c, d):
e = c+d
return e
namespace
a = 10
def outer():
b = 20
def inner1():
c = 30
def inner2():
nonlocal b
d = 40
nonlocal 변수는 global도 아니고 local도 아닌 변수를 참조하기 위해 사용한다. 기본적으로 nonlocal변수는 namespace를 하나씩 따라 찾아 올라가면서 찾는다. (몇단계 위에 있는지는 상관없다) 만약 nonlocal변수를 선언했는데 namespace를 따라 올라가며 찾는데 찾을 수 없는 경우 에러가 발생한다. 또한 여러 namespace에 동일한 이름의 변수가 존재 할 경우 가장 먼저 찾은 변수만 참조한다.