comprehension(내포용법)
- 자료구조 안에 제어문(조건문, 반복문)
- 자료구조를 생성할 때 사용한다.
- 한 줄로 자료구조를 생성할 수 없을까?
리스트 컴프리헨션
- 원소가 앞에 온다.
- for num in range(100):
nums.append(num+1) - nums = [ num+1 for num in range(100) ]
for문 + if문 + else 내포시키기
- 원소가 1개, 원소는 앞으로 보내자.
- for var in vars:
if var > 0:
pos.append(var)
pos = [ var for var in vars if var > 0 ]
- 원소가 2개 오면 어떡하지? 원소 2개 이상인 덩어리를 통으로 앞으로 보내자.
- for var in vars:
if var > 0:
abs.append(var)
else:
abs.append(var*-1)
abs = [ var if var > 0 else var*-1 for var in vars ] - 원소가 3개 오면 어떡하지? 단, 내포에서 elif는 지원하지 않는다.
- 첫번째 원소 1개만 앞에 나머지는 순서대로
- for var in vars:if var == 0:txts.append('zero')else:if var % 2 == 0:txts.append('even')else:txts.append('odd')
- txts = [ 'zero' if var == 0 else 'even' if var%2 == 0 else 'odd' for var in vars ]
이중 for문 내포시키기
num = []
for i in range(2):
for j in range(3):
if i%2 == 0:
num.append(i)
else:
num.append(j)
num = [ i if i%2 == 0 else j for i in range(2) for j in range(3) ]
딕셔너리 컴프리헨션
- 값을 콜론으로 구분한다.
- dict = { key : value for ~ }
- for movie, rating in zip(movies, ratings):data[movie] = rating
- rating_dict = { key : value for key, value in zip(movie, rating) }
집합 컴프리헨션도 동일하다.
튜플 컴프리헨션은 지원하지 않는다.
- 관련 문법은 제너레이터를 생성하는 문법이다.
- num = (i for i in range(10))print(num) #<generator object <genexpr> at 0x7f123d17e550>
def 함수명():
함수는 재사용하기 위해 사용한다.
- 인자:
- def 함수명(인자1, 인자2):
- 인자 여러 개 가능
- 인자 default 가능
- def 함수명(인자1 = default )
- *, packing - 가변인자(가별인자!)
- 인자의 개수가 자유롭다.
- def 함수명(*인자) #가변인자의 방식은 tuple이다.
- tuple인데 원소가 하나인 경우 (원소, ) 로 표시된다.
- 호출
- 함수명(값1, 값2)
- 함수명(인자2=값2) #특정 인자에 넣고 싶은 경우
- *, unpacking
- iterable 을 벗긴다.
- 함수명( *( a, b, c) ) == 함수명( a, b, c )
- dictionay를 벗길 때에는 ** 사용
- return:
- return 리턴값
- 리턴 여러 개 가능
람다 함수 (람브다함수, 한줄 함수)
- def even_num(*args):
return [num for num in args if num % 2 == 0] - even_num = lambda *args: [num for num in args if num % 2 == 0]
- 함수명 = lambda 인자: 출력(return)
전역변수
- 지역변수가 있다면, 함수 내에서는 지역변수를 우선한다.
- 지역변수가 없다면, 함수 내에서도 전역변수를 참조한다.
- 함수내에서 전역변수를 호출하여 값을 수정할 수 있다.
- global 변수: 전역변수 끌어와서 수정하기.
# 모든 변수명을 a로 선언해보자.
a = 5 # 전역변수
def fun1():
a = 1 # 지역변수 1
print(a) # -> 이 a 는 누구일까?
def fun2():
a = 2 # 지역변수 2
print(a) # -> 이 a 는 누구일까?
def fun3():
print(a) # -> 이 a 는 누구일까? 지역 변수가 없으므로 전역변수를 찾는다.
def fun4(): # 전역변수를 함수 안에서 수정까지 하려면
global a # 전역변수 a를 끌어온다.
a = 4 # 전역변수
print(a) # 이 a 는 누구일까?
Tags:
AI개발_교육