목록프로그래밍 언어/Python (13)

수학과의 좌충우돌 프로그래밍

[python] Type Hints, python에 타입을 지정한다?

정적언어 VS 동적언어 Type Hints 에 대해서 알아보기 전에 우선 정적언어와 동적언어에 대한 이해가 필요합니다. 정적언어 컴파일 시 변수의 타입이 결정 변수 선언 시 자료형 지정 C, Java 등의 언어가 해당 동적언어 런타임 시 변수의 타입이 결정 실행 도중 변수에 예상하지 못한 타입이 들어와 Type Error 발생할 수 있음 python, javascript 등의 언어가 해당 Type Hints란 python은 대표적인 동적언어입니다. 그렇기 때문에 변수를 선언할 때, 함수가 매개변수를 받을 때 모두 자료형을 지정하지 않습니다. 위에서 말한대로 런타임 시 결정되기 때문에 실행 도중에 예상하지 못한 타입이 들어와 Type Error 발생할 수 있죠. Type Hints 는 이를 방지하고자 타입..

프로그래밍 언어/Python 2021. 6. 20. 20:32
[python] GIL, Global interpreter Lock은 무엇일까?

파이썬에서 멀티스레드를 사용하려고 한다면 GIL이란 단어를 마주치게 됩니다. GIL이 무엇인지 파이썬은 왜 GIL을 가지고 있는지 이번 포스팅을 통해 이해해보도록 합시다. Python으로 멀티스레딩 GIL이 무엇인지 설명 하기 전에 python으로 멀티 스레딩과 일반적인 경우의 시간을 비교해보겠습니다. 시간을 측정하기 전, 현재 테스트 중인 환경을 알아봅시다. 프로세서 : 2.3 GHz 듀얼 코어 Intel Core i5 >> sysctl hw.physicalcpu hw.logicalcpu hw.physicalcpu: 2 hw.logicalcpu: 4 MacOS의 하이퍼스레딩이란? 하이퍼 스레딩이란? 랜덤으로 생성한 배열에서 최대값을 찾는 간단한 연산을 두 가지 방법으로 구현해보았습니다. 하나의 스레드가..

프로그래밍 언어/Python 2020. 9. 1. 21:40
[python] Decimal vs Float, 고정소수점과 부동소수점

Float 우선 특별한 작업없이 소수를 사용할 경우 이는 float 타입으로 선언이 됩니다. 하지만 아래 결과를 보면 0.1을 할당한 a는 실제로 0.1이 아닌 많은 소수점을 가지고 있습니다. 왜 이런 문제가 발생하는 것일까요? a = 0.1 print(type(a)) print(f"{0.1: .30f}") # # 0.100000000000000005551115123126 컴퓨터가 실수를 표현하는 방식 아마 다들 아실테지만 컴퓨터는 기본적으로 2진수를 사용합니다. 그렇기 때문에 정수를 표현할 때는 문제가 되지 않지만 소수를 표현할 때는 문제가 발생합니다. 예를 들어 10진수 0.3을 2진수로 표현한다고 하면 0.01001100110011... 다음과 같이 표현이 됩니다. 무한히 0011이 반복되죠. 이러..

프로그래밍 언어/Python 2020. 6. 10. 23:15
[python] 파이썬의 정렬, Tim Sort

Tim Sort python에서의 정렬 함수 sorted()와 list.sort()에 사용된 정렬 알고리즘은 Timsort, 팀정렬입니다. 팀정렬은 파이썬 핵심 개발자인 팀 피터스에 의해서 Cpython에서 처음으로 구현되었으며 2009년 이후 표준 자바 및 안드로이드, swift 등 여러 언어에서 사용되고 있습니다. 이는 데이터의 정렬된 정도에 따라 삽입정렬과 병합정렬 사이를 전환하는 적응형 알고리즘입니다. 두 정렬방법을 결합했기에 안정적이며, 추가 메모리는 사용하지만 기존의 병합정렬에 비해 적은 추가메모리를 사용하여 다른 O(nlogn) 정렬 알고리즘의 단점을 최대한 극복한 알고리즘입니다. 알고리즘의 원리 위에서 언급했듯이 팀정렬은 삽입정렬과 병합정렬을 함께 사용하고 있습니다. 병합정렬은 추가적인 메..

프로그래밍 언어/Python 2020. 6. 3. 03:20
[python] 장식자, 데코레이터(decorator) 를 알아보자

python 으로 작성된 다른 코드들을 보다보면 아래와 같이 어느 함수 위에 @ 가 있는 걸 볼 수 있습니다. 이 @ 는 무엇을 나타내고 어떤 역할을 하지는 알아보도록 합시다. @decorator def function1(): print("ssungkang") decorator 란? 제목에서 알 수 있듯이 이것이 바로 decorator 입니다. 사실 데코레이터가 없다고 해서 구현을 못하는 일이 생기는 건 아니지만 코드가 복잡해집니다. 즉 사용자가 편리해지기 위한 것 이라고 생각하면 됩니다. 지금부터 decorator 에 대해서 알아보도록 하겠습니다. decorator 는 사실 하나의 함수입니다. 어떤 함수냐면 다른 함수를 감싸고 있는 함수죠. 아래 예시를 봐보도록 합시다. def decorator(fun..

프로그래밍 언어/Python 2019. 8. 8. 03:11
[python]제너레이터(generator)를 알아보자

파이썬 제너레이터 일반적인 함수부터 생각을 해보자. 함수는 한 번 호출되면 return을 만날 때까지 혹은 return이 없다면 마지막 구문을 만날 때까지 실행된다. 그리고 호출이 끝나는 순간 내부 함수나 로컬 변수들은 메모리를 반환하게 된다. 이는 함수가 다시 호출되어도 마찬가지로 같은 일을 반복한다. 이런 함수의 한계점에 봉착하여, 함수가 본인이 한 일을 기억하고 있다가 재 호출 시 이어서 할 수 있도록 새로운 함수를 만들었는데 이를 제너레이터라고 한다. 제너레이터가 무엇인지 예제를 통해서 알아보자. def normal_function(list): result = [] for i in list: result.append(i * i) return result input = [1,2,3,4,5] resu..

프로그래밍 언어/Python 2019. 3. 31. 21:44
python map() 함수에 대해 알아보자!

안녕하세요 강민성입니다. 오늘은 파이썬 기본 문법에 대해서 알아보고자 합니다. 그 중에서도 map 함수에 대해서 알아보겠습니다. 저는 알고리즘 공부를 하다가 map 함수가 도움이 많이 되었습니다. 어떤 함수인지 같이 살펴보시죠! map 함수에 대해서 알아보자! map 함수는 두 가지 인자를 받게 됩니다. 첫 번째 인자로 함수를 받게 되고, 두 번째 인자로 반복가능한 자료형을 받게 됩니다. map(function , iterable, ...) 같은 형태를 가집니다. 그리고 iterable 한 데이터 안의 각 item들을 함수 인자로 전달하여 결과를 반환하는 함수입니다. 여기서 반환 형태에 대해 기존 python2 에서 python3 으로 바뀌면서 변화가 있었습니다. 기존 python2에서는 list형으로 ..

프로그래밍 언어/Python 2019. 1. 1. 11:13
문자열 함수 find와 index

안녕하세요 강민성입니다. 파이썬 알고리즘을 공부하다가 헷갈린 부분이 있어 가볍게 포스팅을 하고자 합니다. find와 index를 알아보자! 문자열에서 find와 index는 거의 같은 역할을 합니다. 바로 문자열에서 원하는 문자나 문자열이 어디 있는지를 알려주는 것이죠. 위치를 반환할 때는 index 값을 반환하게 됩니다. 1234a = "ssungkang" print (a.index("k")) # 5print (a.find("k")) # 5cs 다음과 같이 문자열 a에서 k를 찾고자 한다면 그에 해당하는 index 값을 return 하게 되는 것이죠. 그렇다면 둘의 차이는 무엇일까요? 차이 역시 간단합니다. find 같은 경우에는 찾는 문자나 문자열이 없을 경우에는 -1 을 return 하게 됩니다. ..

프로그래밍 언어/Python 2018. 12. 30. 23:58