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
2
3
4
5
a = [1,2,3,4,5]

b = [5,4,3,2,1]

b = a

이때 a,b는 앝은 복사를 하게되어 주소를 공유하게됨

따라서 값만 복사하고 싶을시 b = a[:]

1
2
3
t = [1,2,3]

a,b,c = t

이차원 리스트

  • 이차원 리스트를 복사하는 법?
1
2
3
import copy

copy_score = copy.deepcopy(midterm_score)

Function & Console

Function

함수란?

  • 어떤 일을 수행하는 코드의 덩어리
  • 반복적인 수행을 1회 작성후 지속적인 호출로 대체 가능
  • 코드를 논리적인 단위로 구분하여 정리해놓을수 있음
  • 캡슐화 : 코드의 세부적인 내용을 모르고 인터페이스만 알아도 타인의 코드를 사용가능
1
2
3
4
5
6
7
8
def calculate_rectangle_area(x,y):
result = x * y
return result

rectangle_x = 10
rectangle_y = 20

print(calculate_rectangle_area(rectangle_x,rectangle_y))
  1. 메인 프로그램 수행
  2. 함수호출
  3. 함수수행 & return
  4. 다시 메인 프로그램 수행

return 값과 parameter에 대한 개념을 다시 상기

Console in/out

어떻게 프로그램과 데이터를 주고 받을 것인가??

  1. %string
  2. format 함수
  3. fstring
1
2
3
4
print('%s %s' %('one','two'))
print('{} {}'.format('one','two'))
print('%d %d' %(1,2))
print('{} {}'.format(1,2))

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
2
3
4
5
a = -1

b = -1

print(a is b)

결과는 True

but when

1
2
3
4
5
a = -6

b = -6

print(a is b)

결과는 False

all() - 모두 true면 true 아니면 false

any() - 하나라도 true면 true 아니면 false

삼항 연산자

1
2
value = 12
is_even = True if value%2 == 0 else False
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
2
3
4
print("It\'s OK")
a = """
Happy new year
"""

{: .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
2
3
4
5
6
def spam(eggs):
eggs.append(1)# 기존객체의주소값에[1] 추가
eggs =[2,3]# 새로운객체생성
ham =[0]
spam(ham)
print(ham)# [0, 1]

Scoping Rule

  • 변수가 사용되는 범위
  • 지역변수 (local variable)
  • 전역변수 (global variable)
1
2
3
4
5
6
7
8
9
def test(t):
print(x)
t =20
print("In Function :",t)

x =10
test(x)
print(t)
# t는 함수안에서 사용하는 지역변수이기 때문에 함수 밖에서는 사용불가

함수 내부에서 전역변수 사용시

global 키워드를 사용하면 함수내부에서도 global variable 수정, 접근 가능

Recursive Function

  • 자기자신을 호출하는 함수
  • 피보나치 수열같은 점화식을 표현할때 사용한다.
  • 재귀함수는 종료조건이 있어 종료조건 전까지 반복 수행

Function Type Hint

  • 파이썬의 가장 큰 특징 : dynamic typing

-> 처음 사용하는 사용자가 interface를 알기힘든 단점이 존재한다

1
2
def type_hint_example(name:str)->str:
return f"Hello, {name}"

Docstring

파이썬 함수에 대한 상세 정보를 기입

1
2
3
4
def add(a,b):
'''
여기에 상세 정보를 기입
'''

vscode에서 python docstring generator를 깔면 쉽고 명확하게 docstring 작성 가능

Coding Convention

명확한 규칙은 없지만

팀마다 코드를 잘 이해하기 위해서 서로서로 가독성이 좋게 작성해야한다

들여쓰기는 4space 나 tap중 1개로 통합하여 사용하자

또한 1줄은 79자를 넘어가면 안된다

불필요한 공백은 피하자

연산자는 1칸씩만 띄우자

소문자 l, 대문자 O, 대문자 I 금지

flack8이라는 모듈로 체크 가능

Author

jo-member

Posted on

2021-01-19

Updated on

2021-07-12

Licensed under

Comments