1. 파이썬으로 코딩 시작하기

파이썬 개념을 배웠다. 이미 알고 있는 내용이 주를 이뤘지만 평소 헷갈려 하거나 이해를 뒤로 미뤘던 내용이 있어 정리하고자 한다.

1) 변수 scope

place = '서울'

def change_place():
	place = '부산'
    
change_place()
print(place) #서울
  • 함수 안에서 선언한 변수는 지역변수이기 때문에 함수 내에서만 효력을 갖는다. 따라서 중간에 change_place() 함수를 사용하더라도 마지막 결과는 부산이 아닌, 전역변수에 저장된 서울이 출력되는 것이다.

2) 함수 내 입력값이 여러 개인 경우

입력값이 여러 개일 때 각 값마다 기본값을 지정해 줄 수 있다. 단, 이 경우 기본값이 있는 인자가 기본값이 없는 인자들의 뒤에 와야 한다.

def set_place_default(place1, place2 = '서울'):
	print(place1+','+place2+'입니다.')

위와 같이 디폴트 값을 설정해줄 경우 그렇지 않은 인자 뒤에 와야 한다.

def set_place_default(place1='부산', place2):
	print(place1+','+place2+'입니다.')

위와 같은 경우 다음과 같은 에러가 나타난다.

SyntaxError: non-default argument follows default argument

이러한 에러가 나는 이유는 파이썬 함수를 정의할 때 인자의 순서가 이미 정해져 있기 때문이다. 다음 링크를 참고하면 좋다.

Python - function 정의 시 지켜야 할 argument 순서

3) 정수와 소수

1 + 1.0의 값은 2.0이다. 즉, 정수와 소수를 더해도 결과값은 소수 자료형으로 표현된다.

4) 튜플, 딕셔너리

  • 튜플도 index 사용 가능
  • 딕셔너리도 pop 사용 가능
딕셔너리_이름.pop('key_이름')

5) 컴파일러과 인터프리터

컴파일 타임과 런타임을 시각화한 이미지
이미지 출처

Nontype에 대해 배우며 C와의 차이점을 알 수 있었다.

  • C언어는 컴파일 방식을 사용하는 저수준 언어이다.
  • python은 인터프리터 방식을 사용하는 고수준 언어이다.

    컴파일 방식 vs 인터프리트 방식
    컴파일 방식은 입력된 모든 원시어를 한 번에 기계어로 번역 후(=빌드 과정), 기계에 넣고 기계를 실행하는 방식이다. 소스코드를 기계어로 변환하는 과정에서는 인터프리트 방식보다 오래 걸리지만, 런타임에서는 짧은 시간을 소요한다.
    인터프리트 방식은 소스코드를 기계어로 변환하는 과정없이 매 줄을 해석하여 실행하는 방식이다. 따라서 빌드 과정이 없다. 런타임에서는 한 줄씩 해석해 실행하기 때문에 컴파일 언어에 비해 속도가 느리다.

  • C언어의 경우 Nontype이 필요하지 않다. 정의되지 않은 무언가가 있다면 컴파일 과정에서 오류를 띄우면 되기 때문이다.
  • 하지만 런타임에 실행하는 파이썬의 경우, 정의되지 않은 무언가로 인해 에러가 발생해 프로그램이 종료되는 경우를 피하기 위해 Nontype을 사용한다.

6) 파이썬 논리연산자와 비교연산자

논리연산자비교연산자
and&
or
not~

조건식에서 사용하는 것은 논리연산자이다.
비교연산자로는 비트 연산을 한다. 연산 방식은 다음과 같다.

print(8&10)

#8 
#=> 8은 이진수로 1000, 10은 이진수로 1010. 
# 각 자리를 비교했을 때 겹치는 부분만 연산한다.
# 여기서 겹치는 부분은 제일 앞에 있는 1이다. 
# 따라서 결과값은 이진법으로 1000이 된다.
# 이는 십진법으로 환산하면 8이되니 결과는 8이 출력된다.

7) 오답 정리

if not'':
	print(True)
else:
	print(False)

# True

not ''에서 ''는 False 이다. 이 앞에 not 이 붙기 때문에 True가 된다. 따라서 출력되는 값은 True이다.

2. 회고

LMS로 하는 공부를 처음 시작했는데, 첫 날부터 재귀함수에 대한 내용이 나와서 코딩을 처음 접하는 분들은 내용 숙지가 어렵지 않을까 생각했다.
그 외에는 기본적인 내용이라 크게 어려운 부분은 없었다. 다만 이전까지 공부하면서 이해를 미루고 미뤄놨던 부분이 있어서 (컴파일 언어, 인터프리터 언어 같은 개념) 그 부분을 신경써서 정리했다. 그리고 개념을 정교하게 다듬는 것이 좋을 것이라고 생각해 부족하다고 생각하는 부분을 정리했다.

남은 과정에 있어 오늘이 가장 쉬운 날이기 때문에, 앞으로 어떻게 공부를 할 지 걱정되지만 오늘처럼 잘 모르고 있구나 싶은 부분을 정리하면서 공부하면 되지 않나 싶다. 앞으로는 오늘보다 정리 시간도 길게 걸릴텐데 어쨌든 힘내보자..

profile
🐬 파이썬 / 인공지능 / 머신러닝

0개의 댓글