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 |
댓글