많이 사용하는 것은 리터럴이 있다.
range, bytearray, frozenset처럼 객체방식을 쓸 필요가 없다.
x = bytearray()
리터럴이지만 어쩔 수 없이 객체를 사용해야 하는 것 : 집합
y = set() : 이렇게 해야 공집합을 만들 수 있다.
b = list(range(10))
b : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10
b = [range(10)]
b : [range(0, 10)]
리스트를 리터럴로 선언하는 방식과 그냥 대괄호로 선언하는 방식이 조금 다르다.
중복이 있는 리스트를 set()으로 덮어버리면 중복이 제거된 상태로 출력된다.
딕셔너리:
그냥 일반적인 선언: y = {"a":1, "b":2}, y = {3:1, "b":2} -> 이렇게 숫자를 사용한 키도 가능하다.
객체 방식으로 만들 때 : dict(a=1, b=2), dict(3=1, b=2) -> 리터럴을 이용해서 선언하면 이런 키는 사용이 불가능하다.
- 파이썬 정의에서 키로 사용할 수 있는 것은 immutable이면 다 사용할 수 있도록 되어있다.
len() : 안에 iterable을 사용할 수 있다. iterable 길이를 알 수 있다.
len = 3
%whos
Variable Type Data/Info
---------------------------------
a int 1
b list n=1
c int 0
d bool True
len int 3
x bytearray bytearray(b'')
y dict n=2
del len
위의 방법처럼 built-in 함수인 len을 내 마음대로 변경할 수 있다. 하지만 사용하지 말자.
키워드에는 이런 방법을 사용할 수 없다.
ex) in = 3은 에러
if문 :
if 참거짓을 알 수 있는 문장 :
a = 1000
b = 1000
a == b : True
a is b : False
is는 값뿐만 아니라 메모리 주소까지 비교하게 된다. id(a)와 id(b)가 다르기 때문에 False가 출력된다.
a != b
a is not b : 메모리 주소까지 비교
and, or : and는 두 개 다 true일 때, or는 둘 중 하나만 true일 때
- 존재론적으로 생각해야 한다.
and 앞에 있는 애가 거짓이면 거짓
and 앞에가 참이면 뒤에 것으로 참 거짓을 나눈다.
or는 앞에 있는 것이 거짓이면 뒤에 것으로 참 거짓을 나눈다.
or는 앞에 값이 참이면 참
2 or 1/0 : 2 -> 앞에 값이 참이면 뒤에는 아예 보지도 않고 앞의 값으로 출력된다.
문자열 + 숫자열 안된다.
숫자 * 문자열 가능하다.
'' in 'aaa' : True
없는 것은 거짓 int() -> 0
'a' > 'Aa' : 이런것은 다 ascii코드로 비교한다. 뒤처럼 문자열인 경우 a와 A를 먼저 비교함.
만약 앞에가 같아서 a와 a라면 그 때 뒤를 비교함.
t = 3 if a>5 else 5 -> 이 문장은 콜론이 없기 때문에 식이다. if가 맞다면 앞의 3 할당, 아니면 뒤의 5 할당
else 용법 3가지가 있음:
조건문에 쓰는 else, 반복문에 쓰는 else, 예외처리에 쓰는 else
- 조건문 : 조건이 참이 아니면 실행
- 반복문 : 완벽하게 순회를 다 마쳤을 때. break로 잘렸을 때 출력 안된다. 반복문이 올바르게 수행되었는지 확인하기 위해 사용. for~else는 잘 사용하지 않는다. 알고는 있어야한다.
- 예외처리 :
for i in dict(a=3, b=3):
print(i)
a
b
딕셔너리는 기본적으로 키값을 본다.
{'a':1, 'a':3} 나중값이 할당된다. a = 3
키 값은 고유할 수 밖에 없다.
{'a':1, 'b':3}.values()
{'a':1, 'b':3}.items()
for i, j in {'a':3, 'b':3}.items():
print(i, j)
가능하다.
for i, j, k in {'a':3, 'b':3}.items():
print(i, j, k)
불가능하다.
for i in enumerate('abcdefg', 1): -> enumerate를 사용하면 0부터 인덱스를 출력한다. iterator 옆에 콤마로 숫자를 붙이면 그 숫자부터 인덱스가 늘어난다.
print(i)
(1, 'a')
(2, 'b')
(3, 'c')
(4, 'd')
(5, 'e')
(6, 'f')
(7, 'g')
list(map(lambda x:x+1, [1,2,3,4,5,6])) : 어떤 iterator를 넣어주면 1씩 증가해서 순회한다.
[2, 3, 4, 5, 6, 7]
sum(iterable) : 이터러블 값들을 더하는 함수
디자인 패턴 : 파이썬에도 기본적인 디자인 패턴들이 있다.
반복에 대한 패턴 loop pattern이라고 한다.
반복의 관점에서 보는 것 크게 2가지:
for, while / 가능한 한 안쓰고 사용하는 법
loop-and-a-half
while 참거짓 :
참이면 반복한다.
컴퓨터공학의 기본 2A: Abstraction, Automation
함수 선언, 할당이 동시에 이루어짐.
자바같은 언어처럼 int x = Integer();
x = 10; 이런식이면 선언과 할당이 다른것.
NameError, 파이썬 함수가 선언이 안되었을 때 사용하면 발생한다.
함수에서는 return이 무조건 있어야 한다.
파이썬에서는 return을 생략했을 때, return None을 자동으로 붙여준다.
def abc():
pass
abc
<function __main__.abc>
함수에 괄호를 쓰지 않고 이름만 쓰면 function __main__.abc라는 값이 나온다.
이 값이 나오면 괄호를 써야 한다고 생각하면 된다.
callable(abc) -> True
함수부터 객체까지는 모두 잘 알아야하는 내용이다.
흐름을 가지고 이해하고 암기해야한다.
--- 파라미터(parameter)와 아규먼트(argument) 차이
: 정의할 때 쓰는 것이 파라미터, 함수를 사용할 때 쓰는 것이 아규먼트
def abc(a) -> parameter
abc(10) -> argument
- 파라미터 : 식을 사용할 수 없다. 함수 안에 함수를 사용할 수 있다.
- 아규먼트 : 식을 사용할 수 있다.