Day2
Variable
Variable & Memory
변수란?
변수 = 값
변수는 메모리 주소를 가지고 있고 변수에 들어가는 값은 주소에 해당됨
ex) A = 8 : A라는 이름을 가진 메모리주소에 8을 저장해라
※ 폰노이만 구조
{: .align-center}
Dynamic Typing
코드의 실행시점에 타입을 결정 - 컴파일러 언어가 아닌 인터프리터 언어
연산자와 피연산자
문자간에도 연산이 가능함 (concatnate)
데이터 형변환
float(), int()와 같은 함수로 데이터의 형변환 가능
List
인덱싱
- list 에 있는 값들은 주소값을 가짐 -> 주소를 사용하여 값을 호출
슬라이싱
- [시작 index : 끝 index : 간격]
리스트의 연산
두개의 리스트 사이에도 concatnation이 가능
- append : 리스트에 요소 추가
- extend : 새로운 리스트 추가
- insert : index에 요소 추가
- remove : 리스트에 특정 요소 삭제
- del : index를 주고 해당 index요소 삭제
1 | a = [1,2,3,4,5] |
이때 a,b는 앝은 복사를 하게되어 주소를 공유하게됨
따라서 값만 복사하고 싶을시 b = a[:]
1 | t = [1,2,3] |
이차원 리스트
- 이차원 리스트를 복사하는 법?
1 | import copy |
Function & Console
Function
함수란?
- 어떤 일을 수행하는 코드의 덩어리
- 반복적인 수행을 1회 작성후 지속적인 호출로 대체 가능
- 코드를 논리적인 단위로 구분하여 정리해놓을수 있음
- 캡슐화 : 코드의 세부적인 내용을 모르고 인터페이스만 알아도 타인의 코드를 사용가능
1 | def calculate_rectangle_area(x,y): |
- 메인 프로그램 수행
- 함수호출
- 함수수행 & return
- 다시 메인 프로그램 수행
return 값과 parameter에 대한 개념을 다시 상기
Console in/out
어떻게 프로그램과 데이터를 주고 받을 것인가??
Print Formatting
- %string
- format 함수
- fstring
1 | print('%s %s' %('one','two')) |
1. %-format
1 | print("product : %s, price : %f" %('apple',5.243)) |
%10s : 10칸
%10.1f : 10칸에 소숫점 1자리까지 출력
Conditional & Loop
조건문,반복문 - 대부분 생략
is 연산은 memory의 주소를 비교!!!
값의 비교인 ==와 주소의 비교인 is는 다른 연산임
-5부터 256까지는 파이썬안에 정적 memory로 저장되어있음
1 | a = -1 |
결과는 True
but when
1 | a = -6 |
결과는 False
all() - 모두 true면 true 아니면 false
any() - 하나라도 true면 true 아니면 false
삼항 연산자
1 | value = 12 |
1 | if __name__ == "__main__": |
String and advanced function concept
String
string 특징
string은 1byte의 크기로 한글자씩 memory에 할당됨
문자열 또한 2진수로 컴퓨터가 규칙에 의해 변환해서 저장
문자열은 list와 같은 형태로 data를 처리하기 때문에 slicing, indexing과 같은 특징들을 똑같이 가짐
문자열 함수
- len(a) : 문자열 길이를 return
- a.upper() : 대문자로 변환
- a.lower() : 소문자로 변환
- a.capitalize() : 첫문자를 대문자로 변환
- a.titile() : 제목형태로 (첫번째 띄어쓰기, 첫문자 대문자)로 변환
- a.count(‘abc’) : ‘abc’가 들어간 횟수 return
- a.find(‘abc’) : ‘abc’가 들어간 offset return
- a.rfind(‘abc’) : same as find
- a.startswith(‘abc’) : ‘abc’로 시작하는지 여부 return
- a.endswith(‘abc’) : ‘abc’로 끝나는지 여부 return
1 | print("It\'s OK") |
{: .align-center}
Function 2
Call by object reference
Call by value
함수의 인자를 넘길때 값을 넘김
함수 내부에서 인자값 변경시 호출자에 영향을 안줌
Call by reference
like C에서의 pointer 사용
swap구현할때 call by value가 아닌 call by refernce로
Call by object reference
파이썬은 객체의 주소가 함수로 전달되는 방식
이건 좀 특이한 경우
함수에 객체가 넘어갔을때 주소가 넘어가고 그 함수 안에서 새로운 객체 생성또한 가능
1 | def spam(eggs): |
Scoping Rule
- 변수가 사용되는 범위
- 지역변수 (local variable)
- 전역변수 (global variable)
1 | def test(t): |
함수 내부에서 전역변수 사용시
global 키워드를 사용하면 함수내부에서도 global variable 수정, 접근 가능
Recursive Function
- 자기자신을 호출하는 함수
- 피보나치 수열같은 점화식을 표현할때 사용한다.
- 재귀함수는 종료조건이 있어 종료조건 전까지 반복 수행
Function Type Hint
- 파이썬의 가장 큰 특징 : dynamic typing
-> 처음 사용하는 사용자가 interface를 알기힘든 단점이 존재한다
1 | def type_hint_example(name:str)->str: |
Docstring
파이썬 함수에 대한 상세 정보를 기입
1 | def add(a,b): |
vscode에서 python docstring generator를 깔면 쉽고 명확하게 docstring 작성 가능
Coding Convention
명확한 규칙은 없지만
팀마다 코드를 잘 이해하기 위해서 서로서로 가독성이 좋게 작성해야한다
들여쓰기는 4space 나 tap중 1개로 통합하여 사용하자
또한 1줄은 79자를 넘어가면 안된다
불필요한 공백은 피하자
연산자는 1칸씩만 띄우자
소문자 l, 대문자 O, 대문자 I 금지
flack8이라는 모듈로 체크 가능