2019.03.05 - python(1)

3 분 소요

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에 동일한 이름의 변수가 존재 할 경우 가장 먼저 찾은 변수만 참조한다.

태그:

카테고리:

업데이트: