How We Coding

동영상 강좌 : http://pythonkim.tistory.com/notice/77


# Day_03_05_slicing.py


- 다른 파일의 어떤 내용을 사용하고 싶을 때.


1
import Day_03_05_import
cs


>> Day_02_02_list.py 파일을 불러오기. (.py 는 생략)

>> 위 파일에서 선언한 변수, 함수를 모두 사용할 수 있다. 해당 파일의 내용을 복붙한것과 같은 효과..!!


>> 하지만 우리는 makeRandoms() 의 사용만 원한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import random
 
 
def makeRandoms():
    a = []
    for i in range(10):
        a.append(random.randrange(100))
    return a
 
 
= "unused"
 
 
def a():
    pass
 
 
def b():
    pass
 
 
def c():
    pass
cs



>> 우리가 불러올 파일이 이런식으로 구성되어 있다고 가정하자.

>> makeRandoms() 함수만을 가져다 쓰고 싶다.


>> 하지만 위와 같이 해당 파일을 통채로 import 하면 복붙의 효과이기 때문에

     변수 s, a(), b(), c() 도 가져오게 된다.



- 원하지 않는 내용들을 블럭지정 후 Edit - Indent Selection 을 통해 블럭 내용들을 한번에 탭키 처리 한다.

- 그리고 이것들을 사용하지 않기 위해 아래의 1번 라인을 추가 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
if __name__ == '__main__':
    s = "unused"
    
    
    def a():
        pass
    
    
    def b():
        pass
    
    
    def c():
        pass
cs


>> 파이썬에는 main() 가 존재하지 않는다. 그래서 이를 흉내낼 필요가 있다. 

>> 위와 같이 여러개의 파일이 같이 사용될 때 특히..!!

>> 그것을 흉내내는 변수가 __name__ 이다.


### __main__ 은 첫번째 실행되는 파일을 의미한다.

### __name__ : 파일별로 존재하는 파일 이름


- 현재 파일에 print(__name__) 을 추가하고, import 한 파일에도 print(__name__) 을 추가한 다음 내용을 확인해보자.


1
2
3
import Day_03_05_import
 
print(__name__)
cs


>> 실행결과


1
2
Day_03_05_import :  Day_03_05_import
__main__
cs


>> 1 : import 한 파일에서 실행된 print(__name__)

>> 2 : 현재 파일에서 실행된 print(__name__), 즉 첫 번째로 실행된 파일이다.



- import 한 파일의 함수 사용하기


1
2
3
Day_03_05_import.random.seed(1)
= Day_03_05_import.makeRandoms()
print(a)    # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60]
cs



- 슬라이싱


1
print(a[0:5])   # [17, 72, 97, 8, 32]
cs


>> [0, 5) 까지의 데이터들을 의미한다. 

>> : 을 이용한 문법을 슬라이싱 이라고 한다.


# 문제

# 뒤쪽 절반 출력하기.


1
print(a[len(a)//2:])
cs


>> print(a[len(a)//2:len(a)]) 도 가능하다.


- 생략

 

1
print(a[:]) # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60]
cs


>> 이런식으로 생략이 가능하다.

>> : 앞의 생략은 맨 앞부터,  : 뒤의 생략은 맨 마지막 까지를 의미한다.



- 슬라이싱을 range() 처럼 사용할 수 있다.


1
2
print(a[::2])   # [17, 97, 32, 63, 57]
print(a[::3])   # [17, 8, 63, 60]
cs


>> 1 : 2칸씩 건너뛴 요소

>> 2 : 3칸씩 건너뛴 요소



- 홀수번째, 짝수번째 요소 출력하기


1
2
3
4
5
# 짝수번째 요소만 출력
print(a[::2])   # [17, 97, 32, 63, 57]
 
# 홀수번째 요소만 출력
print(a[1::2])  # [72, 8, 15, 97, 60]
cs


>> 5 : 1번째 요소부터 2칸씩 건너뛰기..!!



- 거꾸로 출력하기


1
print(a[::-1])  # [60, 57, 97, 63, 15, 32, 8, 97, 72, 17]
cs



1
2
3
4
5
print(a[len(a)-1:0:-1]) # [60, 57, 97, 63, 15, 32, 8, 97, 72]
 
print(a[len(a)-1:-1:-1])    # []
 
print(a[-1:-1:-1])          # []
cs


>> 1 : 마지막 요소만 제외하고 출력이 된다.

>> 3, 5 라인은 같은 코드이다.



- 거꾸로 홀수번째, 짝수번째 요소만 출력하기


1
2
3
4
# 거꾸로 홀수번째 요소만 출력하기
print(a[:]) # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60]
print(a[::-2])      # [60, 97, 15, 8, 72]
print(a[-2::-2])    # [57, 63, 32, 97, 17]
cs




- 얕은복사 review


1
2
3
4
5
6
7
= a
= a
a[0= -1
 
print(a)    # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60]
print(b)    # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60]
print(c)    # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60]
cs


>> a[0] 를 변경했는데, b와 c도 변경됨



- 깊은복사 review


1
2
3
4
5
6
7
8
9
10
11
12
= a
= a
= a.copy()
= a[:]
a[0= -1
 
print(a)    # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60]
print(b)    # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60]
print(c)    # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60]
 
print(d)    # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60]
print(e)    # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60]
cs


>> 3 : 이전에 공부한 깊은복사 방법

>> 4 : 슬라이싱을 이용한 깊은복사 // 슬라이싱은 안쪽에 있는 것을 뽑아내는 과정이기 때문에 항상 복사본을 만든다.



- 짝수번째 요소 출력하기


1
2
3
4
5
6
7
for i in range(0len(a), 2):
    print(a[i], end=' ')        # -1 97 32 63 57 
print()
 
for i in a[::2]:
    print(i, end=' ')           # -1 97 32 63 57 
print()
cs


>> 예전에는 1-3과 같이 하였으나, 이젠 5-7과 같이 하면 된다.




'Language > Python' 카테고리의 다른 글

<3-3> JSON  (0) 2018.03.05
<3-2> Set 과 Dictionary  (0) 2018.03.02
<3-1> 파일 입출력  (0) 2018.02.23
<2-3> 기상청의 전국 날씨정보 파싱, 외부 모듈 추가  (0) 2018.02.22
<2-2> 리스트, 튜플  (0) 2018.02.15