[BoostCamp] DAY2 파이썬 기초 문법

3 분 소요

[BoostCamp] DAY2 파이썬 기초 문법


1.Variables & List

Variables

우선, 변수(variables)란 무엇일까?
우리는 우선 a = 10이라는 말에 대해 고민해볼 필요가 있다.
image
위의 그림을 보자.
우리는 메모리의 한 부분을 할당하여
a라고 명명한 변수가 해당 메모리를 가르키도록 한다.
그리고 a=10을 통해 a가 가리키는 메모리에 10을 집어 넣는다.

변수는 어떤 규칙으로 정하나요?

  • 알파벳, 숫자, _로 선언 가능하다.
  • 변수명은 의미 있는 단어로 표기하자!!
  • 변수명은 대소문자가 구분된다.
  • 특별한 의미가 있는 예약어는 쓰지 않는다.
    • ex) for, if, else 등

자료형?

우리가 C를 사용할 때 생각해보면, 각각의 변수에는 type이 정해져있다.
int a = 10
image

Python에서는 어떻게 type을 정할 수 있까?

보통 C나 JAVA등과 같은 언어들은 int code = 10 과 같이 변수의 자료형을 미리 정해준다.
그렇다면 Python에서는 어떻게 변수의 자료형을 지정해줄까?
Dynamic Typing
변수에 넣어지는 자료에 따라 동적으로 자료형을 지정해준다.

a = 10 #Integer   
b = 10.0 #Float   
c = 'abc' #string   
자료형 변환?
a = 10   
b = float(a) # 10.0   
c = str(a) # "10"   
type(c) #<class 'string'>

연산자

+, -, /, %등을 연산자라고 한다.
a + b와 같이 +연산을 하는데 필요한 요소들을 피연산자라고 한다.

a = 10   
b = 5   
c = 3   

#+연산 (더하기)   
num_sum = a + b   

#증가 연산   
a = a + 1 #11  
a += 1 #12   

#-연산 (빼기)   
num_minus = a - b   

#감소 연산   
a = a - 1 #11   
a -= 1 #10   

#곱셈 연산   
num_mul = a * b   
a *= b #50   

#나눗셈 관련 연산   
num_div = a / c #16.66666666...   
num_quo = a //c #16   
num_reminder = a % c #2   

※Float오차?

컴퓨터에서는 소숫점을 이진수로 계산한다.
그러면, 0.1을 이진수로 표현해보자.

십진수 표현 binary remind(남은수)
0.5 0 0.1
0.25 0 0.1
0.125 0 0.1
0.0625 1 0.1 - 0.0625 = 0.0375
0.03125 1 0.0375 - 0.03125 = 0.00625
  …  

위와 같은 과정을 통해 0.1을 이진수로 표현하면 0.00011….로 표현이된다.
그래서 간혹 아주 미세한 오차가 발생하기도 한다.
하지만, Python 3.X에서는 정상적으로 표현된다고 한다.

List

List, Array등은 다양한 자료들을 저장한 Sequence 자료형이다.

C VS Python (feat. List)

1. C언어

int nums[] = {1, 2, 3, 4};

2. Python

nums = [0, 1, 2.0, [1, 2, 3], "123"]

C언어와 Python에서 생성한 List, Array을 확인해보자.
C는 모든 element가 하나의 자료형으로 통일되어야한다.
하지만 python을 확인해보면, 하나의 List에 다양한 자료형이 포함되는 것이 허용되는 것을 확인할 수 있다.

배열 COPY

a = [1, 2, 3, 4]
b = a
c = a[:]

b와 c의 상태를 확인해보자.
image
b = a의 의미는 b가 a가 가르키는 메모리를 공유한다는 것이다.
c = a[:]의 의미는 a를 복사하여 새로 할당된 c의 위치에 넣는 것이다.

그렇다면 이차원 배열은 어떻게 복사할까?
1.얕은 복사
주소가 공유되며 해당 주소 내의 데이터를 함께 사용하는 복사

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]   
b = a #shallow copy

2.깊은 복사
기존의 주소내의 데이터를 복사하여 새로 할당된 메모리에 그 값을 넣는 다. 즉 서로 독립적인 객체가 된다.

import copy   
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]   

b = copy.deepcopy(a)   

2. 함수와 Console I/O

Function

image
함수는 위의 그림과 같이 구성되어 진다.
주로 argument도 매개변수라고 명명하기도 한다.

About Parameter

1.Call by value

매개변수를 입력할 때 값을 참조하여 가져온다.

int func(int a) {   
	a += 10;   
    return a;    
}    

int main() {   
	int num = 8;
    func(num);//num = 8, return 값 18
	return 0;
}   

위의 예제에서 func함수에서 a+=10을 거친 a는 18이 되지만, 함수가 return된후 num의 값은 변하지 않는다.
즉, arument에는 영향을 주지않는다.

2.Call by reference

입력된 매개변수는 주소를 parameter에 넘겨주어 연산을 한다.

int func(int& a) {
	a += 10;
    return a;
}   

int main() {
	int num = 10;   
    func(num);// num = 20  
    return 0;   
}

위의 예제에서 확인할 수 있듯 주소를 참조하여 연산을 하기 때문에 func함수의 연산이 끝나고 return이 되고 난 후에는 num의 값이 변경된다.

3.Call by object

파이썬 함수에서 사용되어지는 방법이다.
함수에 매개변수를 넘겨줄때 객체를 넘겨주는 방법이다.

def func(a):
	a.append(1)  
    a = [1, 2, 3]
    return a   

a = [0]
func(a)

위의 코드에서 func함수에서는 object를 매개변수로 넘겨 받기 때문에
a.append(1)
연산을 통해 밖의 a List에도 1이 추가됬을 것이다.
하지만
a = [1, 2,3]
의 연산을 통해 a가 새로운 메모리를 할당받으므로 바깥의 a에는 영향을 주지 않을 것이다.
∴연산 후의 a = [0, 1], return 값 = [1, 2, 3]

Console I/O

Input

a = input()   
b = input("input num:")   

input함수에 의한 return값은 string으로 반환된다.
그러니 type변환으로 원하는 값을 구해주자.

Output

출력은 print()라는 함수를 이용한다.

printf("%d * %d = %d", 1, 2, 2)

와 같은 표현을 python에서는 어떻게 할까?

% string
print("%d %d"%(1, 2))
format 함수
print("{} {}".format(a, b))
f-string
name = "happy beagle"
print(f"{name}")

그외 이모저모

  1. sring의 표현법에는 더 많은 것이있으니 찾아보도록하자.!
  2. string에는 많은 메소드, 기능들이 존재한다.
  • 오늘은 갑자기 수업시간이 늘어 당황했다.
  • 과제가 많이 있었으나 재미 있었다.
  • 피어세션에서 함께 공부할 것들을 찾아보자.
    • 현재는 캐글 competition에 대해 알아보고 있다.
      • 공부하기 좋은게 뭐가 있을까?
  • 내일도 화이팅!!!

댓글남기기