본문 바로가기
Always Awake/python 기본 정리(19.12.23~20.01.12)

19.12.24 기록

by 욕심많은알파카 2019. 12. 24.

1. 컴파일러(Compiler)와 인터프리터(Interpreter)의 차이

 

개발자가 작성한 소스 코드(source code)를 기계가 읽을 오브젝트 코드(object code)로 바꾸어 주는것이 컴파일러의 역할이다.

인터프리터 또한 개념은 비슷하지만, 방식에 차이가 있다.

 

  컴파일러 인터프리터
변환 및 실행방식 모든 소스 코드를 한번에 수집하여 기계어로 변환 후 실행 소스 코드의 각 행마다 중간 언어로 변환하여 바로바로 실행
실행 시간

컴파일된 프로그램은 이미 변환이 다 된 프로그램이므로 인터프리터에 비해 실행 속도가 빠름.

그러나 원시 프로그램이 클 경우 컴파일 과정에서 일반적으로 인터프리터보다 오랜 시간이 소요됨.

각 행마다 매번 중간 언어로 변환하여 실행하므로 컴파일된 프로그램에 비해 실행 속도가 느림.

그러나 소스 코드의 부분 부분을 즉시 실행하여 결과를 확인 할 수 있으므로 유닛테스트에 빠른편.

에러 보고 시점

모든 코드를 수집하여 에러를 확인 후 보고

따라서 보안성에서 상대적으로 취약

각 행의 코드를 변환 후 실행하고 그때그때 바로 보고.

따라서 보안성에서 상대적으로 우위

 

2. 반복문(for, while)에서 변수는 지역적인가?

for a in [1,2,3,4,5] :
	print [a]

위와 같은 for문이 있다고 하자.

일반적으로 for 문에 사용된 변수 a는 리스트 [1,2,3,4,5]의 각 요소들을 담아 반복적으로 출력하기 위한 그릇에 비유한다.

a라는 임의의 변수를 들고와 1을 담아 출력하고, 다시 2를 담아 출력하고 ...

따라서 결과값은 다음과 같다.

1

2

3

4

5

 

그렇다면 a는 반복문이 끝나고 나면 사라지는 임시의 변수, 일종의 로컬 변수에 지나지않을까?

 

 

그렇지 않다.

 

for a in [1,2,3,4,5]
	print(a)
    
print(a)

해당 코드를 실행하면

1

2

3

4

5

5

라는 결과가 나오는 것을 확인할 수 있다.

 

for문에서 선언한 a는 로컬변수가 아니라 일반적으로 선언되는 변수와 같으므로 반복문이 끝나도 여전히 존재한다.

 

마찬가지로, 반복문 이전에 변수 a를 선언하고 있더라도, 반복문에서 변수 a를 새로 선언해버리면 그 전에 있던 변수에 담긴 값은 사라진다.

a = 10
print(a)

for a in [1,2,3,4,5]:
	print(a)

print(a)

따라서 위의 코드에서 결과값은 이렇게 나온다.

10

1

2

3

4

5

5

 

3. 문자열 슬라이스에서 끝의 문자 나오게 하기

 

문자열 슬라이스 중 마지막 단어를 슬라이스 하려 할 때, 끝 번호를 지정해주지 않으면 된다.

 

예를들어

Str1 = "Always Awake"

print(Str1[-5:-1])
print(Str1[-5:])

위와 같은 코드가 있을때, 결과값은 

 

Awak

Awake

 

이렇게 나온다.

 

문자열 슬라이스를 위해 인덱싱할때, 끝번호를 지정해주면 끝번호의-1까지 슬라이싱해준다.

따라서 끝부분을 전부 출력해내고 싶다면 속편하게 끝번호를 지정해주지 않으면 된다.

 

 

4. 문자열에서 부분치환하기

 

python에서 문자열은 인덱싱을 이용하여 부분을 가져올 수 있다.

Str1 = "I'm always awake"

Str1[4:9] = "still"

print(Str1)

따라서 위 코드를 볼 때 결과값을

 

I'm still awake

 

일 것이라고 예상할 수 있다.

그러나 위의 코드는 실제로는 올바르지 않은 코드라고 오류가 뜬다.

 

이유는 python의 문자열이 immutable하기 때문이다.

가변적(mutable)이라 인덱싱을 지정해 요소들을 바꿀 수 있는 list, dictionary와는 달리 tuple과 string(문자열)은 불변적(immutable)이다.

 

만약 위의 코드에서 always를 still로 부분치환하고 싶다면 replace함수를 쓰면된다.

Str1 = "I'm always awake"

Str1.replace("always","still")

print(Str1)

 

 

5. 딕셔너리(Dictionary)의 Key 와 Value 조건

 

딕셔너리의 Key값은 고유하고 변하지 않아야(immutable) 한다.

따라서 위에서도 언급했듯이 list, dictionary는 key값이 될 수 없다. 반면, tuple이나 string은 가능하다.

 

Value값은 변하든 변하지 않든 상관없으므로 list, dictionary 등도 value값이 될 수 있다.

 

 

 

----------------------------------------------------------------------------

점프투파이썬(https://wikidocs.net/book/1) 위키독스를 참조했습니다.

사용한 Python 버전은 3.8.1입니다.

'Always Awake > python 기본 정리(19.12.23~20.01.12)' 카테고리의 다른 글

20.01.09 정리  (0) 2020.01.09
20.01.06 정리  (0) 2020.01.07
20.01.05 기록  (0) 2020.01.06
19.12.26 기록  (0) 2019.12.27
19.12.25 기록  (0) 2019.12.26

댓글