특징 | 컴파일러 언어 | 인터프리터 언어 |
---|---|---|
작동 방식 | 소스코드를 기계어로 먼저 번역 | 소스코드를 실행 시점에서 해석 |
장점 | 실행 속도가 빠름 | 간단하고 메모리가 적게 필요함 |
단점 | 한번에 많은 기억장소가 필요함 | 실행속도가 느림 |
a = [1, 5] #패킹
index, value = a #언패킹
print(index, value)
#output = 1 5
a = [1, 3, 5]
b = a #얕은 복사
b.append(7)
print(id(a), id(b)) # 첫줄
print(a, b) # 둘째 줄
a = [1, 3, 5]
c = a[:] #슬라이싱을 통해 값을 할당시, 서로 영향을 받지 않음
c.append(7)
print(id(a), id(c)) # 셋째 줄
print(a, c) # 넷째 줄
'''output:
2598438566080 2598438566080
[1, 3, 5, 7] [1, 3, 5, 7]
2598438577792 2598438523712
[1, 3, 5] [1, 3, 5, 7]
'''
하지만 슬라이싱 또한 얕은 복사이며, mutable한 객체 안에 mutable 객체가 존재할경우 문제가 된다.
a = [[1,2], [3,4]]
b = a[:]
a[0][1] = 7
print("a 주소 = {}, b 주소 {} \na[0] 주소 = {}, b[0] 주소 = {}".format(id(a), id(b), id(a[0]), id(b[0])))
print(a, b)
'''output:
a 주소 = 2299621696256, b 주소 2299621705152
a[0] 주소 = 2299621734592, b[0] 주소 = 2299621734592
[[1, 7], [3, 4]] [[1, 7], [3, 4]]
'''
이는 copy.deepcopy 메소드로 해결 가능하다.
import copy
a = [[1,2], [3,4]]
b = copy.deepcopy(a)
a[0][1] = 7
print("a 주소 = {}, b 주소 {} \na[0] 주소 = {}, b[0] 주소 = {}".format(id(a), id(b), id(a[0]), id(b[0])))
print(a, b)
'''output:
a 주소 = 2603761095808, b 주소 2603761146176
a[0] 주소 = 2603761138176, b[0] 주소 = 2603761108736
[[1, 7], [3, 4]] [[1, 2], [3, 4]]
'''
참고
(https://wikidocs.net/16038)
def 함수 이름:
''' 함수 내용 '''
return 반환값
parameter 없음 | parameter 존재 | |
---|---|---|
반환 값 없음 | 함수 내의 수행문만 수행 | parameter를 사용, 수행문만 수행 |
반환 값 있음 | parameter없이, 수행문 수행 후 결과값 반환 | parameter를 사용하여 수행문 수행 후 결과값 반환 |
주로 input() 을 이용
print() 를 이용
기본적인 출력 외에 출력의 형식을 지정할 수 있다.
일반적으로는 %-format과 str.format을 이용한다.
%-format
print('%s' %('hello world'))
str.format
print('{}'.format('hello world'))
import random
value = random.randint(1, 100) #1부터 100까지의 숫자중 하나
print(value)
#output = 15
stack overflow: 전세계개발자들의코딩Q&A 사이트
데이터 타입
- int : 4byte, 범위는 ~
- long : 크기와 범위가 무제한
- float : 8byte, 범위는 약 ~
단, 메모리 공간에 따라 표현할 수 있는 숫자범위가 다름
string
특수 문자
종류 | 결과 | 종류 | 결과 |
---|---|---|---|
\n | 다음 줄로 | \b | 백스페이스 |
\ | \ 출력 | \n | 줄 바꾸기 |
\' | ' 출력 | \t | TAB 키 |
\" | " 출력 |
변수의 범위
코딩 컨벤션
a = ['a', 'b', 'c']
for index, value in enumerate(a):
print(index, value)
'''
output:
0 a
1 b
2 c
'''
a = ['a', 'b', 'c']
b = ['d', 'e', 'f']
for a_i, b_i in zip(a,b):
print(index, value)
'''
output:
a d
b e
c f
'''
a = (i for i in ['a', 'b', 'c'])
# a = ('a', 'b', 'c')와 같이 선언하면 튜플이 되니 주의해야 한다.
print(type(a))
<class 'generator'>
다음과 같이 yield를 이용하여 generator 함수를 구현할 수 있다.
def make_generator(value):
for i in range(10):
yield chr(ord(value) + i)
a = make_generator('d')
for i in a:
print(i, end= ' ')
#output = d e f g h i j k l m