Python
- 다른 언어에 비해 구현상의 복잡합이 적은 편이지만 데이터 처리량이 많을 때는 꼭 메모리 제한을 고려해야한다. But 코테에서 이러한 문제는 드물다.
데이터의 개수(리스트의 길이) | 메모리 사용량 |
1,000 | 약 4 KB |
1,000,000 | 약 4 MB |
10,000,000 | 약 40MB |
- 기본 자료형(문자열, 숫자, bool) 등은 특정 하나의 값을 사용한다.
- 컬렉션은 말 그대로 여러 개의 값을 저장할 수 있음
* 리스트는 동적이다.
- 동적이라 함은 메소드를 사용해 값을 추가하거나 제거가능
- 튜플과의 차이점 : 리스트는 메소드를 활용하여 값 수정가능.
- 딕셔너리와 차이점 : 인덱스를 기반으로 값을 저장하고 수정할 수 있다.
- 파이썬 리스트는 탐색, 삽입, 삭제와 같은 연산에 대한 메소드를 갖고 있으므로 단순 자료형이 아닌 자료구조의 형태를 취한다.
- 리스트는 프로그래밍에서 기본적으로 사용되는 값을 여러개 저장할 수 있는 기능인 배열의 기능 또한 갖고 있다.
파이썬에서는 인수들이 참조로 함수에 전달이 됩니다. 즉, 객체의 주소값을 전달한다는 뜻
=> 참조로 전달되지만 immutable, 즉 변경이 불가한, 객체들은 값으로 전달
인수 arguments
- 필수 인수 (required arguments): 위치를 지키며 전달되는 인수
- 키워드 인수 (keyword arguments): 파라미터 이름을 사용해 전달되는 인수
- 기본 인수 (default arguments): 파라미터에서 기본으로 사용되는 값
인수, 매개변수 parameter
출처 - 모던 자바스크립트 Deep dive
- 매개변수(Parameter)는 외부로부터 받아들이는 임의의 값을 의미한다.
- 인수(Argument)는 함수를 호출할 때 사용하게 되는 일련의 값들이다.
# 필수인수
def person_info(first_name, last_name):
print(f"Hello {first_name}, {last_name}!")
## 순서를 지켜야하며 함수에서 파라미터로 정의했기 때문에 필수로 넘겨야함
## 그렇지 않으면 TypeError
# 키워드 인수
person_info(last_name="bob", first_name="sponge")
# 기본인수
def person_data(name, type_p='human'):
print(f"Hello {name}, you are {type_p}")
## 함수에서 받게 되는 파라미터 값들에 대한 기본 값들을 설정하게 된다면 인수를
## 넘기지 않는 경우 기본값들이 설정
## ==> 기본 값으로 설정된 파라미터들은 기본값이 없는 파라미터 뒤에 등장해야함
## ==> 그렇지 않으면 SyntaxError
- 리스트 메소드
- 튜플 메소드
- 딕셔너리 메소드
setdeafult()
setdeafult() 메서드는 지정된 키가 있으면 해당 값을 내주고, 없는 키가 지정되면 맨 뒤에 추가합니다.
이때 추가되는 값은 None이 기본값이며, 따로 지정할 수도 있습니다.
>>> da = {1: 11, 3: 33}
>>> da.setdefault(1)
11
>>> print(da.setdefault(2))
None
>>> print(da.setdefault(4, 44))
44
>>> da
{1: 11, 3: 33, 2: None, 4: 44}
zip( )
* 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 터플의 형태로
차례로 접근할 수 있는 반복자(iterator)를 반환
* zip() 함수를 사용하면 마치 옷의 지퍼를 올리는 것 처럼 양 측에 있는 데이터를 하나씩 차례로 짝을 지어준다.
* 길이가 맞지 않으면 두번째 인자의 길이까지만 출력됨(= 다 나오게 하고 싶다면, zip_longest 사용)
# zip()
>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for pair in zip(numbers, letters):
... print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')
# zip ==> index로 설명
>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for i in range(3):
... pair = (numbers[i], letters[i])
... print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')
>>> numbers = [1, 2, 3]
>>> letters = ["A", "B"]
>>> for i in range(3):
... pair = (numbers[i], letters[i])
... print(pair)
...
(1, 'A')
(2, 'B')
enumerate
반복문 사용 시 몇 번째 반복문인지 확인이 필요할 수 있다. 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환
>>> t = [1, 5, 7, 33, 39, 52]
>>> for p in enumerate(t):
... print(p)
...
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)
getattr(object, name[, default])
이름에 해당하는 객체 속성의 값을 가져오는 Build-in 함수
class Point:
def __init__(self):
self.x = 10
self.y = 20
p = Point()
print( getattr(p, 'x') ) # 10
print( getattr(p, 'z', 'Hello') ) # Hello
print( getattr(p, 'a') ) # ❌ Error
popitem()
popitem() 메서드는 맨 오른쪽 요소를 뽑아내 2-튜플 형태로 내줍니다.
>>> da = {1: 11, 3: 33}
>>> da.popitem()
(3, 33)
>>> da
{1: 11}
Values, keys()
# keys
>>> da = {1: 11, 3: 33, 5: 55}
>>> da.keys()
dict_keys([1, 3, 5])
>>> print(list(da.keys()))
[1, 3, 5]
# values
>>> da = {1: 11, 3: 33, 5: 55}
>>> da.values()
dict_values([11, 33, 55])
>>> print(list(da.values()))
[11, 33, 55]
items() ==> 2-튜플 형태의 dict_items(...) 객체
popitem = 맨뒤에 것을 추출
>>> da = {1: 11, 3: 33, 5: 55}
>>> da.items()
dict_items([(1, 11), (3, 33), (5, 55)])
>>> print(list(da.items()))
[(1, 11), (3, 33), (5, 55)]
is , == 의 차이
- is는 변수가 같은 Object(객체)를 가리키면 True
- ==는 변수가 같은 Value(값)을 가지면 True
# is
>>> a = [1,2,3]
>>> b = a
>>> c = [1,2,3]
>>> a is b
True
>>> a is c
False
# ==
>>> a = [1,2,3]
>>> b = a
>>> c = [1,2,3]
>>> a == b
True
>>> a == c
True
return , print
* print
그저 값을 출력할 뿐, 컴퓨터가 이 값을 가지고 무얼 하진 못한다.
변수가 어떤 값을 가지는지 사용자 측에서 편하게 보기 위함이지 함수에는 전혀 영향을 끼치지 않는다.
* return
함수가 값을 반환하는 가장 주된 방법이다.
모든 함수는 어떠한 값을 return하며, 이 return(혹은 yield)이 명시되어 있지 않은 경우에는
None을 return한다.
이 반환된 값은 다른 함수에서 사용될 수 있으며 변수에 저장될 수도 있다.
참조 : https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html
insert(), remove()
## insert(), remove() 많이 사용 X ==> 시간복잡도 O(N)
scores = [20, 30, 40, 10, 80]
black_list = {2, 4}
for i in range(5):
if i + 1 in black_list:
continue
if scores[i] <= 40:
print(f"{scores[i+1]} 합격")
sort(), reverse(), sorted()
sort() - 기본 정렬 기능으로 오름차순(reverse=False)
sort(reverse=True) - 내림차순
reverse() - 리스트를 거꾸로 뒤집는다. == list[::-1]
sort(), sorted() 차이
리스트.sort() 는 본체의 리스트를 정렬해서 변환
sorted(리스트) 는 본체 리스트는 내버려두고, 정렬한 새로운 리스트를 반환
'IT 개인학습 > Python' 카테고리의 다른 글
Python에서 시간 측정하기(Decorator, Command line) (0) | 2021.09.26 |
---|---|
Error, try ... except (0) | 2021.07.18 |
Class 상속(inheritance) (0) | 2021.07.18 |
매직메소드 (0) | 2021.07.18 |
Class , Object , Method ( OOP ) (0) | 2021.07.18 |
댓글