TIL(Today I Learned)

Day.7 Python 내가 궁금했던 지식 채우기

지팡구 2022. 11. 8. 21:37

나는 파이썬을 정말로 간단하게만 배웠었다

대학교 (1학년 전공같은 전공아닌 전공?) 그 마저도 GUI를 이용한 간단한 수업이었는데,

그 떄 이후로 거의 벽을 쌓고 살았고, 그나마 공모전? 준비하면서 파이썬을 잠시 써본 것 같다.

 

그래서일까 파이썬에 대한 지식이 많이 부족했는데,

오늘 파이썬 문법 기초를 수강하며 새로 얻게 된 지식을 글로써 남기고자 한다.

(변수나 뭐 이런 완전 기초적인 내용은 제외하고 내가 잘못 알고 있었던 혹은 새로 알게 된 지식에 대해서만 정리)

 


1.  파이썬은 흔히 우리가 사용하는 변수의 자료형을 명시하지 않는다

(명시를 하지 않아도 알아서 잡아주는게 편리하긴 했다.) 근데 어째서?

 

보통 파이썬처럼 변수의 자료형을 명시하지 않는 언어를 '동적 타입 언어'라고 한다

(그럼 자연스레 정적 타입 언어도 있겠네?라는 생각이 먼저 들었다. 바로 정리 ㄱㄱ)

 

동적 타입 언어 vs 정적 타입 언어

정적 타입 언어는 '타입' = '자료형'을 컴파일 시 결정하는 것으로, 우리가 자주 사용하는 C나 Java와 같이 변수를 선언할 때, 형에 따라 자료형을 지정해주는 언어를 말한다. 이 때 자료형에 맞지 않게 값을 할당하면 컴파일 에러가 발생하는 점.

그래서 컴파일 시에만 타입에 대한 정보를 결정해서 속도가 Fast

타입 에러로 발생하는 문제점을 초기에 발견할 수 있어 타입의 안정성 Good

 

(어 그럼 컴파일이 뭔데??... 5252 진정하라구 너굴맨..) 

(컴파일은 각종 언어로 작성된 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 프로세스)라는 정도로만 우선 알고있자.

 

동적 타입 언어는 정적 타입 언어와 반대로 자료형을 컴파일 시 정하는 것이 아니고 실행 시(런타임) 결정하는 것인데, 대표적으로 Python과 JavaScript, Ruby 등이 있다. 

그래서 코드에 대한 유연성과 효율성이 Good

런타임 시 예상치 못한 Error 발생 가능성 

한줄 요약 : 정적 타입? 컴파일 시 타입 체크, 동적 타입? 런타임 시 타입 체크

이러한 이유로 파이썬은 동적 타입 언어에 해당하기에 자료형을 명시하지 않는다는 점


2. 파이썬 제곱의 표현

가끔 알고리즘이나 수학적 문제를 풀다보면 제곱을 사용해야 할 때가 온다.

(다른 언어들에서 제곱을 어떻게 표현했는지 잘 기억이 안나는데 쩄든..)

 

파이썬에선 제곱을 표현할 떄 **을 사용한다는 점(이 **는 기본 연산자)

대개 파이썬과 java 등 다양한 언어에서 지원하는 라이브러리 중 Math 라이브러리가 있다.  (Math.pow(밑, 지수))

이 라이브러리 속에 pow라는 함수가 있는데, 이 함수를 주로 사용하고 이 함수 역시 제곱을 표현할 때 사용한다는 점이다.

또한 sqrt(n)의 형태로도 제곱근을 바로 구할 수 있으며, 이에 대한 결과는 실수 자료형이다. 

그리고 마지막으로 파이썬에서 np (넘파이) 라이브러리에서도 함수를 이용해 제곱근을 구할 수 있다.

 

np.sqrt와 math.sqrt의 차이는를 간단하게 설명하면 np의 sqrt는 배열 단위 계산이 가능하며 dtype을 complex 조건으로 주게 된다면 복소수 결과를 얻을 수 있다.  (math.sqrt는 복소수 지원 x, 또한 정수끼리의 연산이라도 결과는 항상 실수 형태)

 

(동작은 거의 비슷해서 자바 것을 참고함)

https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

 

Math (Java Platform SE 8 )

Returns the value of the first argument raised to the power of the second argument. Special cases: If the second argument is positive or negative zero, then the result is 1.0. If the second argument is 1.0, then the result is the same as the first argument

docs.oracle.com


3. 파이썬 에서의 따옴표

파이썬 따옴표의 차이 (""), ('') 

 

둘은 모두 문자열을 표시한다는 것, 보통 ''는 문법적 의미를 가지는 단위의 경우에 사용, ""는 크게 의미를 가지지 않을 때 사용 (큰 차이 x)


4. What is enumerate()?

 

일반적으로 우리가 인덱스(index)와 배열과 같은 리스트?의 원소에 동시에 접근하려고 한다면 보통 루프를 돌려서 인덱스와 원소를 매핑?해서 출력하는게 일반적이었다면, 파이썬에선 enumerate()라는 함수를 사용한다. 

 

예를들어

for i in list_a:
  반복 구문

 

 

이러한 반복문에서 우리가 인덱스와 컬렉션의 요소를 확인하기 위해선 인덱스 번호에 대한 변수도 선언해야하고, 이 변수를 반복문 속에서 출력하며 인덱스와 요소를 확인했어야 했다. 

이러한 작업을 안하기 위해선 enumerate() 라는 함수를 사용하는데, 아주 간단하다 (이 함수는 데이터를 튜플형태로 반환)

for i in enumerate(list_a):
	출력문

이런 방식으로 작성해주면 인덱스와 요소 값을 한 눈에 확인할 수 있다는 장점이 있다. 

(참고)

https://www.daleseo.com/python-enumerate/

 

파이썬의 enumerate() 내장 함수로 for 루프 돌리기

Engineering Blog by Dale Seo

www.daleseo.com


5. Python에는 왜 switch  case가 없을까?

(공식문서)

https://docs.python.org/3/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python

 

Design and History FAQ — Python 3.11.0 documentation

Guido van Rossum believes that using indentation for grouping is extremely elegant and contributes a lot to the clarity of the average Python program. Most people learn to love this feature after a while. Since there are no begin/end brackets there cannot

docs.python.org

강의를 듣다 간단한 예제에서 내준 퀴즈 문제를 풀 때 발생했는데, 문제를 읽고 해답을 찾기 위해 자연스럽게 switch 문이 떠올랐고, switch 문을 이용해서 해결해야겠다고 생각했으나 현실은 녹록치 않았다.

 

우선 결론부터 말하면 Python에는 switch case가 없다! (왜요?)

공식 문서에서도 그냥 if elif를 사용해서 작업을 수행하라고 한다.  if - elif문이 가독성이 좋고 switch문의 역할을 해낼 수 있어서, 혹은 사전(dictonary)라는 자료형을 사용해서 switch 문을 흉내내거나 더욱 간결하게 사용할 수 있기 때문이다.

 

그래서 파이썬의 입장에서는 굳이? (간단 명료함을 추구하는 파이썬의 본질..)


6. Python - Set (집합)

직접 파이썬을 딥하게 공부해본적이 없지만, 정처기를 공부하면서 set에 대한 정보를 습득한 적이 있다. set은 수학에서 말하는 것처럼 집합과 비슷한데, 순서가 없고, 집합 안에서는 unique한 값을 가지고 mutable한 객체이다. (수정가능한 객체)

그리고 자동으로 중복이 제거된다.


7. Python - f string

f - string은 파이썬 버전 3.6부터 사용가능한 기능으로 문자열 포매팅의 한 종류.( 이 방법 외에도 %, str.format 방법이 있음)

매우 직관적이다. 

# print(f'{num} 은 {result}입니다')

8. Python - map

이미 map은 자료 구조 영역에서 다양하게 쓰이고 있다. 파이썬 역시 다른 언어들의 map과 비슷하다.

기본적으로 map은 map(function, iterable)과 같은 형태를 가진다.

(function = 함수, iterable = 반복 가능한 자료형)

 

map은 요소에 특정한 함수를 적용시킬 때 쓰는 함수.

 

map 함수는 반환 값이 map 객체라서 자료형을 list나 tuple로 형 변환을 해주어야 하며, 두번째 인자로 넘어온 데이터가 담고 있는 모든 데이터에 변환 함수를 적용해줘야 한다. 

 

<참고>

https://codinglevelup.tistory.com/83

 

[Python] 파이썬 : map()함수 왜 쓰는지와 사용법 단계별로 이해하기

파이썬 map()함수란? : 각 요소들에 특정한 함수를 적용시킬 때 쓰는 함수이다. 파이썬 표준에 포함 되어있는 내장 함수이다. 단계별로 이해하기 - map()을 왜 쓰지? Answer) 1개의 입력이 아니라, 여러

codinglevelup.tistory.com

https://dojang.io/mod/page/view.php?id=2286 

 

파이썬 코딩 도장: 22.6 리스트에 map 사용하기

이번에는 리스트에 map을 사용해보겠습니다. map은 리스트의 요소를 지정된 함수로 처리해주는 함수입니다(map은 원본 리스트를 변경하지 않고 새 리스트를 생성합니다). list(map(함수, 리스트)) tupl

dojang.io