파이썬3 바이블 - 제6장 연습문제

프리렉 - FREELEC

http://freelec.co.kr/book/catalogue_view.asp?UID=134

이강성저

1.

In [1]:
t = (1, 2, 3, 4)
s = t[:2] + t[3:]
In [2]:
s
Out[2]:
(1, 2, 4)
t [|,  |,  |,  |] 
   |   |   |   |
   1,  2,  3,  4
   |   |       |
s [|,  |,      |]

슬라이싱은 객체의 레퍼런스를 복사한다. 따라서 1, 2, 4 객체에 대한 레퍼런스만 복사를 한다. 따라서 세 객체의 레퍼런스를 저장할 만큼의 메모리만 증가한다.

2.

In [3]:
Sun, Mon, Tue, Wed, Thu, Fri, Sat = range(7)
print(Sun, Mon)
0 1

In [4]:
weekday = input('요일 하나를 입력하세요:')   # 파이썬3에서는 raw_input 대신 input으로
요일 하나를 입력하세요:Wed

In [5]:
weekday   # 문자열
Out[5]:
'Wed'
In [6]:
# 방법 1
globals()[weekday]   # 전역 변수에서 'Wed' 이름 찾기
Out[6]:
3
In [7]:
# 방법 2 - 12장에 설명 나옴
import sys

mod = sys.modules[__name__]  # 현재 모듈 알아내기
getattr(mod, weekday)       # 모듈 내의 값 얻어내기
Out[7]:
3

3.

In [8]:
#1)
a, b = 1, 2
print ('a={}, b={}'.format(a, b))
a=1, b=2

In [9]:
#2)
a, b = ['green', 'blue']
print ('a={}, b={}'.format(a, b))
a=green, b=blue

In [10]:
#3)
a, b = 'XY'
print ('a={}, b={}'.format(a, b))
a=X, b=Y

In [11]:
#4)
a, b = range(1,5,2)   # [1, 3]
print ('a={}, b={}'.format(a, b))
a=1, b=3

In [12]:
#5)
(a, b), c = "XY", "Z"
print ('a={}, b={}, c={}'.format(a, b, c))
a=X, b=Y, c=Z

In [13]:
#6)
(a, b), c = [1, 2], 'this'
print ('a={}, b={}, c={}'.format(a, b, c))
a=1, b=2, c=this

In [14]:
#7)
a, *b = 1,2,3,4,5
print ('a={}, b={}'.format(a, b))
a=1, b=[2, 3, 4, 5]

In [15]:
#8)
*a, b = 1,2,3,4,5
print ('a={}, b={}'.format(a, b))
a=[1, 2, 3, 4], b=5

In [16]:
#9)
a, *b, c = 1,2,3,4,5
print ('a={}, b={}, c={}'.format(a, b, c))
a=1, b=[2, 3, 4], c=5

In [17]:
#10)
a, *b = 'X'
print ('a={}, b={}'.format(a, b))
a=X, b=[]

In [18]:
#11)
*a, b = 'X'
print ('a={}, b={}'.format(a, b))
a=[], b=X

In [19]:
#12)
a, *b, c = 'XY'
print ('a={}, b={}, c={}'.format(a, b, c))
a=X, b=[], c=Y

In [20]:
#13)
a, *b, c = 'X...Y'
print ('a={}, b={}, c={}'.format(a, b, c))
a=X, b=['.', '.', '.'], c=Y

In [21]:
#14)
a, b, *c = 1, 2, 3
print ('a={}, b={}, c={}'.format(a, b, c))
a=1, b=2, c=[3]

In [22]:
#15)
a, b, c, *d = 1, 2, 3
print ('a={}, b={}, c={}, d={}'.format(a, b, c, d))
a=1, b=2, c=3, d=[]

In [23]:
#16)
*a, b = [1]
print ('a={}, b={}'.format(a, b))
a=[], b=1

In [24]:
#17)
*a, b = (1,)
print ('a={}, b={}'.format(a, b))
a=[], b=1

In [25]:
#18)
(a, b), *c = 'XY', 2, 3
print ('a={}, b={}, c={}'.format(a, b, c))
a=X, b=Y, c=[2, 3]

4.

In [26]:
(a, b), c = 1, 2, 3   # 좌변의 값은 두 개, 우 변은 세 개, 에러 발생
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-26-ab1876a77e1b> in <module>()
----> 1 (a, b), c = 1, 2, 3   # 좌변의 값은 두 개, 우 변은 세 개, 에러 발생

ValueError: too many values to unpack (expected 2)
In [27]:
(a, b), c = (1, 2), 3   # 이건 가능
In [28]:
*(a, b) = 1, 2   # 확장된 언패킹은 * 이 없는 변수와 함께 사용되어야 한다
  File "<ipython-input-28-27c08dfd2882>", line 1
    *(a, b) = 1, 2   # 확장된 언패킹은 * 이 없는 변수와 함께 사용되어야 한다
                                                      ^
SyntaxError: starred assignment target must be in a list or tuple
In [29]:
*(a, b), c = 1, 2, 3
a, b, c
Out[29]:
(1, 2, 3)
In [30]:
*(a, b), c = (1, 2), (3, 4), (5, 6)
a, b, c
Out[30]:
((1, 2), (3, 4), (5, 6))
In [31]:
*a = 1, 2    # 확장된 언패킹은 * 이 없는 변수와 함께 사용되어야 한다
  File "<ipython-input-31-4e116af80d93>", line 1
    *a = 1, 2    # 확장된 언패킹은 * 이 없는 변수와 함께 사용되어야 한다
                                                  ^
SyntaxError: starred assignment target must be in a list or tuple

5.

In [32]:
def vargs(*args):
    print(args)
In [33]:
vargs(1)
(1,)

In [34]:
vargs(1, 3, 5, 7)
(1, 3, 5, 7)


In [35]:
def addall(*args):
    return sum(args)
In [36]:
addall(1)
Out[36]:
1
In [37]:
addall(1,2,3,4)
Out[37]:
10

In [38]:
sum(1,2,3,4)   # sum 함수는 시퀀스 자료형을 받는다
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-38-94f3cc436ae9> in <module>()
----> 1 sum(1,2,3,4)   # sum 함수는 시퀀스 자료형을 받는다

TypeError: sum expected at most 2 arguments, got 4
In [39]:
sum( [1,2,3,4,] )
Out[39]:
10
In []: