3-2 Pythonic Code
Split & Join
>>> items = 'zero one two three'.split() # 빈칸을 기준으로 문자열 나누기
>>> print (items)
['zero', 'one', 'two', 'three']
>>> example = 'python,java,javascript' # ","을 기준으로 문자열 나누기
>>> a, b, c = example.split(",")
# 리스트에 있는 각 값을 a,b,c 변수로 unpacking
>>> colors = ['red', 'blue', 'green', 'yellow']
>>> result = ''.join(colors)
>>> result
'redbluegreenyellow'
>>> result = ' '.join(colors) # 연결 시 빈칸 1칸으로 연결
>>> result
'red blue green yellow'
>>> result = ', '.join(colors) # 연결 시 ", "으로 연결
>>> result
'red, blue, green, yellow'
Iterable Object
- iter() 와 next() 함수로 iterable 객체를 iterator object로 사용
cities = ["Seoul", "Busan", "Jeju"]
iter_obj = iter(cities)
print(next(iter_obj)) #Seoul
print(next(iter_obj)) #Busan
print(next(iter_obj)) #Jeju
next를 사용해 값을 보는 거임. iter_obj는 메모리 주소만 가지고 있음
Generator
- iterable object를 특수한 형태로 사용해주는 함수
- 정보를 저장만 하고 있다가 element가 사용되는 시점에 값을 메모리에 반환 :
yield를 사용해 한번에 하나의 element만 반환함
def general_list(value):
result = []
for i in range(value):
result.append(i)
return result
def generator_list(value):
result = []
for i in range(value):
yield i
for a in generator_list(5):
print(a)
'''
0
1
2
3
4
'''
iterator보다 적은 메모리 용량 사용
Generator Comprehension
- list comprehension과 유사한 형태로 generator형태의 list 생성
- generator expression 이라는 이름으로도 부름
- [ ] 대신 ( ) 를 사용하여 표현
gen_ex = (n*n for n in range(500))
print(type(g))
- list 타입의 데이터를 반환해주는 함수는 generator로 만들어라!
: 읽기 쉬운 장점, 중간 과정에서 loop 이 중단될 수 있을 때!
- 큰 데이터를 처리할 때는 generator expression을 고려하라! : 데이터가 커도 처리의 어려움이 없음
- 파일 데이터를 처리할 때도 generator를 쓰자
Asterisk
- 흔히 알고 있는 * 를 의미함
- 단순 곱셈, 제곱연산, 가변 인자 활용 등 다양하게 사용됨
# [1] *args
def asterisk_test(a, *args):
print(a, args) # 1 (2, 3, 4, 5, 6)
print(type(args)) # <class 'tuple'>
asterisk_test(1,2,3,4,5,6)
# [2] **kargs
def asterisk_test(a, **kargs):
print(a, kargs) # 1 {'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
print(type(kargs)) # <class 'dict'>
asterisk_test(1, b=2, c=3, d=4, e=5, f=6)
- *를 앞에 붙이면 풀리면서 들어간다 (뒤에서 계속)
print(*["1","2","3"])
# 1 2 3 4
가변인자 Variable-length asterisk
- 개수가 정해지지 않은 변수를 함수의 parameter로 사용하는 법
- 입력된 값은 tuple type으로 사용할 수 있음
- 가변인자는 오직 한 개만 맨 마지막 parameter 위치에 사용가능
def asterisk_test(a, b, *args):
return a+b+sum(args)
print(asterisk_test(1, 2, 3, 4)) #10
키워드 가변인자 Keyword
- Parameter 이름을 따로 지정하지 않고 입력하는 방법
- asterisk(*) 두개를 사용하여 함수의 parameter를 표시함
- 입력된 값은 dict type으로 사용할 수 있음
- 가변인자는 오직 한 개만 기존 가변인자 다음에 사용
def kwargs_test_1(**kwargs):
print(kwargs)
kwargs_test_1(first = 3, second = 2, thrid = 1)
# {'first': 3, 'second': 2, 'thrid': 1}
def kwargs_test_2(**kwargs):
print(kwargs)
print("First value is {first}".format(**kwargs))
print("Second value is {second}".format(**kwargs))
print("Third value is {third}".format(**kwargs))
kwargs_test_2(first = 3, second = 2, third = 1, fourth = 4)
'''
{'first': 3, 'second': 2, 'third': 1, 'fourth': 4}
First value is 3
Second value is 2
Third value is 1
'''
def kwargs_test_3(one,two, *args, **kwargs):
print(one) #3
print(two) #4
print(args) #(5, 6, 7, 8, 9)
print(one+two+sum(args))
print(kwargs)
kwargs_test_3(3,4,5,6,7,8,9, first=1, second=2, third=3, fourh = 4)
Asterisk - unpacking a container
def asterisk_test(a, *args): # 언패킹 의미가 아님. 여러 개 가변인자 받는다는 의미
print(a, args) # args는 tuple 형태로 묶인 값이 들어가게 됨
print(type(args)) # 셋 다 <class 'tuple'>
asterisk_test(1, *(2,3,4,5,6)) # !! ()앞에 *가 있어서 풀려서 들어감
#1 (2, 3, 4, 5, 6)
asterisk_test(1, (2,3,4,5,6)) #1 ((2, 3, 4, 5, 6),) # 안 풀렸을 때
asterisk_test(1, 2,3,4,5,6) #1 (2, 3, 4, 5, 6)
def asterisk_test(a, *args):
print(a, *args) # *args 쭉 풀린 상태로
asterisk_test(1, *(2,3,4,5,6)) # !! ()앞에 *가 있어서 풀려서 들어감
# 1 2 3 4 5 6
asterisk_test(1, (2,3,4,5,6)) # 안 풀렸을 때
# 1 (2, 3, 4, 5, 6)
asterisk_test(1, 2,3,4,5,6) # 1 2 3 4 5 6
def asterisk_test2(a, args):
print(a, *args) # 풀려있음
print(a, args) # 안 풀려있음
asterisk_test2(1, (2,3,4,5,6))
'''
1 2 3 4 5 6
1 (2, 3, 4, 5, 6)
'''
복습
def asterisk_test(a, *args):
print(a, *args) # 풀려있음
print(a, args) # 안 풀려있음
asterisk_test(1, *(2,3,4,5,6))
'''
1 2 3 4 5 6
1 (2, 3, 4, 5, 6)
'''
asterisk_test(1, (2,3,4,5,6))
'''
1 (2, 3, 4, 5, 6)
1 ((2, 3, 4, 5, 6),)
'''
asterisk_test(1, 2,3,4,5,6)
'''
1 2 3 4 5 6
1 (2, 3, 4, 5, 6)
'''
예제
a, b, c = ([1,2], [3,4], [5,6])
print(a,b,c) # [1, 2] [3, 4] [5, 6]
data = ([1,2], [3,4], [5,6])
print(*data) # [1, 2] [3, 4] [5, 6]
def test(a,b,c):
print(a,b,c)
data = {"b":1, "c":2}
test(5, **data) # **data는 j=1, a=2가 되게함
# 5 1 2
2차원 리스트에서 언패킹을 이용하기
ex = ([1,2], [3,4], [5,6])
for v in zip(ex):
print(v)
'''
([1, 2],)
([3, 4],)
([5, 6],)
'''
for v in zip(*ex):
print(v)
'''
(1, 3, 5)
(2, 4, 6)
'''
'AI TECH' 카테고리의 다른 글
[2주차] Pytorch 프로젝트 (0) | 2022.09.26 |
---|---|
[2주차] PyTorch (0) | 2022.09.26 |
CNN의 역전파 (0) | 2022.09.22 |
[1주차] Python&Math (0) | 2022.09.20 |
Logistic Regression (0) | 2022.07.27 |