numbers = ['one', 'two' 'three']
str1 = ''
for number in numbers:
str1 += number
다음은 파이썬스러운 코드이다.
str2 = ''.join(numbers)
string 값을 기준값으로 나눠서 List 형태로 변환
items = "zero one two three"
item = items.splice() #["zero", "one", "two", "three"]
result1 = []
for i in range(10):
result1.append(i)
result2 = [i for i in range(10)]
word1 = "Hello"
word2 = "World"
result = [i+j for i in word1 for j in word2]
#['HW', 'Ho', 'Hr', ..., 'ol', 'od']
result2 = [i+j for i in word1 for j in word2 if not(i==j)]
result3 = [i+j for i in word1 for j in word2 if not(i==j) else "goood"]
조건문을 넣을 수도 있다.
words = 'Hello world to me'.split()
stuff = [[w.upper(), w.lower(), len(w)] for w in words]
# [['HELLO', 'hello', 5], ..., ['ME', 'me', 2]]
case_1 = ['a', 'b', 'c']
case_2 = ['c', 'e', 'a']
result = [i+j for i in case_1 for j in case_2]
# [ac ae aa bc... ce ca]
result = [[i+j for i in case_1] for j in case_2]
# [[ac bc cc] [ae be ce] ...]
for i, v in enumerate(['tic', 'tac' 'toe']):
print(i, v)
# 0 tic
# 1 tac
# 2 toe
여러개의 list를 하나의 list로 묶어준다
` list(zip(list1, list2)) # [('a', '가'), ('b', '나')]
(lambda x, y : x + y)(10, 50) # 60
up_low = lambda x : x.lower() + x.upper()
ex = [1, 2, 3, 4, 5]
f = lambda x, y: x + y
print(list(map(f, ex, ex))
# [2, 4, 6, 8, 10]
이럴 경우 알아보기 힘들다. 따라서
result = [f(value) for value in ex]
이런 식으로 적는 것이 편하다.
-lambda 대신 일반 함수도 사용 가능하다.
from functools import reduce
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]
lambda, map, reduce는 직관성이 떨어지기에 사용을 권장하지는 않는다.
range(1000) # [1, 2, 3, 4, ..., 999] 깂이 한번에 반환됨
def generator_list(value):
for i in range(value):
yield i
result = generator_list(1000)
#아직 result는 1000개의 값이 들어있지 않음
[value for value in generator_list(1000)]
#또는
list(result)
#이렇게 해야만 1000개의 값이 메모리에 저장됨
다음과 같이 괄호로 감싸 선언도 가능하다
gen_ex = (n*n for n in range(500))
파이썬에는 parameter를 넘겨주는 여러 방법이 있다.
def func1(arg1, arg2):
print(arg1 + arg2)
func1(arg2 = "hello", arg1 = "bye")
def func2(arg1, arg2 = "hello"):
print(arg1 + arg2)
func2(bye)
func2("good", "bye")
def func3(*args):
print(list(args))
func3(1, 2, 3, 4)
def func4(**kwargs):
print(kwargs)
func4(first=1, second=4, third=3)
normal parameter, variable, keyword length, variable length 순으로 써야한다.
def func5(one, two=3, *args, **kwargs):
...
...
func5(1, 2, 3, 4, 5, first=1, second=3, hello=5)
한번 keyword variable을 쓰면 뒤는 모두 keyword variable이어야 한다.
def asterisk_test1(a, *args):#여기서 *은 가변인자를 위한 *
print(args)
def asterisk_test2(a, args):
print(args)
print(*args)
asterisk_test1(1, *(2, 3, 4, 5, 6)) # (1, 2, 3, 4, 5, 6)
asterisk_test2(1, (2, 3, 4, 5, 6)) # 1, (1, 2, 3, 4, 5, 6)
# (1, 2, 3, 4, 5, 6)
def asterisk_test3(a, b, c, d):
print(a, b, c, d)
data = {'b':1, 'c':2, 'd':3}
asterisk_test(10, **data) # (10, 1, 2, 3)