[2일차] 파이썬 기초부터 훑어보기
오늘은 파이썬을 기초부터 쓱 훑어봤다. 파이썬을 1학년 때 배운지라 중요한 부분은 다 기억 못하면서 반복문/조건문만 사용하고 있는건 아닐까 고민을 많이 했었다.
그렇다고 기초부터 다시 공부하기엔 또 애매해서 미루던차에 다행히 오늘같은 기회가 생겼다!
웬만큼 중요한건 다 기억하고 사용하고 있었단 사실과 새로운 정보도 알게되어 좋은 날이다.
중요하다고 생각하는 부분과 새롭게 알게된 부분은 이탤릭체+밑줄을 적용할 것이다.
Variable
가장 기초가 되는 저장공간이다.
변수는 메모리 주소를 가지고 있고, 변수에 들어가는 값은 메모리 주소에 할당된다
*폰 노이만 아키텍처 : 무언갈 시작할 때 정보를 먼저 메모리에 저장시키고 CPU가 순차적으로 그 정보를 해석하고 계산하여 사용자에게 결과값을 전달하는 아키텍처!
Basic Operation
- 기본 자료형

- 연산자
List
시퀀스 자료형, 여러 데이터들의 집합(다양한 Data Type도 가능)
해당 리스트 변수에는 리스트 주소값이 저장됨!
a=[1,2,3,4,5]
b=['a','b','c']
b=a
👆이와 같은 경우 a,b는 같은 주소에 있는 [1,2,3,4,5]를 가리키기 때문에 a를 바꾸면 b도 바뀐다.
이를 원치 않을 경우 b=a[:] 라고 해주면 서로 다른 주소값을 가지게 된다
t=[1,2,3]
a,b,c=t
👆첫번째 줄은 패킹 두번째줄은 언패킹이라고 한다!
이차원 리스트의 복사는 [:]로 충분치 않고 import copy를 해준 후 list=copy.deepcopy(list) 라고 해줘야한다.
fuction
어떤 일을 수행하는 코드의 덩어리(ㅋㅋㅋ)
코드를 논리적인 단위로 분리
캡슐화 : 인터페이스만 알면 타인의 코드 사용이 가능
console in/out은 그냥 print 하고 input 받고,,
print formatting
내가 평소에 참 신경쓰던거라서 너무 반가웠다!
남들이 .format 어쩌구로 쓸 때 나만 넘 불편해하나 걱정하며 더하기나 콤마를 써왔던 과거의 고니는 가라
.format이 낡은방식이란걸 확인받으니 즐거웠다ㅎㅎ
print('%s %s' %('one','two'))
print('{} {}'.format('one','two'))
👆뭐랄까 씨인듯 씨아닌 씨같은 그런 포맷팅이다
👇하지만 f-string은!
name='goni'
age=25
print(f'hello my name is {name}, and I am {age}')
👆아 너무 멋있다. 하지만 일부 기업 코테에서는 파이썬 3.5를 쓴다니 주의해야한다! (피어세션에서 팀원이 말해준 정보!) fstring은 3.6부터 적용이다. 정말 내가 원하던 프린트문이라 짱짱이다.
반복문과 조건문 & 디버깅은 정리 패스!
String
시퀀스 자료형으로 문자형 data를 메모리에 저장
영문자 한 글자는 1byte의 메모리 공감을 사용
따옴표 안에서 따옴표를 쓰려면 앞에 \를 붙이기
중간에 파일을 읽는 코드가 하나 나오는데
lyric = lyric + line.strip() + '\n'
👆이 줄이 이해가 안가서 좀 더 살펴보았다.
우선 반복문 안에 있는거라 이 줄만 떼어놓고 보니까 이상한건 무시하고,
line.strip()는 공백을 없애준다. 그래서 '\n'없이 lyric에 이어붙이다보면 모든 엔터가 사라진다.
심지어 줄이 달랐던 두 문장은 스페이스바도 없이 이어진다.
또, strip을 쓰지 않고 '\n'만 쓰는 경우 엔터가 두배가 되어버리고!
꼭 저 두개가 다 있어야 원본대로 읽을 수 있다.
call by object reference
프로그래밍 언어론 배울 때 열심히 외웠던 기억이 새록새록.
함수에서 파라미터를 전달하는 방식은 총 세가지이다.
a=5
f(a)
- call by value -> 함수 f는 변수 a에 영향을 미치지 않는다. 값만 전달하기 때문
- call by reference -> 함수 f는 변수 a의 값도 바꾼다. 주소를 전달하기 때문
- call by object reference -> 특이한 파이썬👇
def spam(eggs):
eggs.append(1)
eggs = [2, 3]
ham = [0]
spam(ham)
print(ham)
👆왜 이렇게 변수명을 귀엽게 지으셨는진 모르겠지만 좀 귀엽다.

eggs라는 파라미터로 넘겨졌을 때 까지만 해도 같은 주소를 가리키다가, append할 때까지만 해도 여전히 같다가
eggs에 새로운 리스트를 할당하니 연결이 끊기는 아주 신기한 구조를 가지고 있다.
그러니까, 애초에 파이썬의 변수는 값을 저장하는게 아니라 값을 가진 객체의 주소를 가리킨다. 태초에 그렇게 생겨먹었기 때문에 파라미터로 넘길 때도 객체의 주소를 넘기는거지!
다시 한번 코드로 돌아가자면, eggs는 원래 ham이 가리키는 list객체의 주소를 공유하고 있었는데, 새로운 객체의 주소를 할당받아 버렸네! 그럼 ham이 가리키던 list는 낙동강 오리알처럼 버려져서 더 이상 접근할 수 없는 것이다.
scoping rule
지역변수 / 전역변수
def f():
global s
s = "love"
s = "like"
f()
👆s를 파라미터로 넘기지 않고 바꾸고 싶다면 꼭 글로벌 선언 해주기~
잠시 재귀함수 스쳐지나가주시고,,,
function type hints
def f(name: str) -> str:
return f"hello, {name}"
👆요로코롬 다이내믹 타이핑의 단점을 보완하고자 만든 방법인데,
- 사용자에게 인터페이스를 명확히 알려줄 수 있다.
- 함수의 문서화시 파라미터에 대한 정보를 명확히 알 수 있다.
- mypy 또는 IDE, linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인 가능하다.
- 시스템 전체적인 안정성을 확보할 수 있다.
는 장점들이 존재한다. 저 화살표는 리턴값의 타입을 말해준다!
docstring
이런 기준이 있는건 또 첨알았네,

이런 식으로 함수를 설명해주는 형식이다.
코딩컨벤션
아 클린코드~
바로 저번 학기에 들었지만 우리학교는 java기준이라 조금 아쉬웠는데 아주 아쉬운 부분을 싹 긁어주셨다 감사감사
(이런 수업이 우리 학교에 열렸다는 사실에도 감사감사. 교수님 제가 짱 좋아해여. 비록 나에게 제로를 주셨지만..)
- 함수는 짧게, 함수명은 동사로, 이름이 말하지 않는 짓은 하지 않기
- 인자로 받은 값 자체를 바꾸지 말 것( 임시 변수를 선언해라!)
- 중복제거!!!
- 4space와 tab은 섞어쓰지말고 꼭 쓰던거 계속 쓰기
- 한줄은 최대 79줄까지( 스크롤 안생기게 해라)
- 연산자 앞뒤로는 딱 한칸씩만 띄우기
- 불필요한 주석 지우기, 쓸모없는 주석은 애초에 쓰지도 말기
- 코드 마지막에는 항상 한 줄 추가
- 함수 덩어리 사이에는 엔터 두 줄
- 함수명은 소문자로 구성, 필요하면 밑줄로
마지막으로 flake8과 black 진짜 미쳤다.
설치는 각각 conda install flake8 conda install black

✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨✨ 🍰 ✨
쏘큐티 이렇게 포멧에 맞게 알아서 바꿔준다!!
아 자바도 있으려나 이런걸 알았다면 과제가 덜 감점되었었을텐데.....⭐️
하튼 갑자기 늘어난 강의량에 당황했지만 익숙해져야게쬬 ^.^