[TIL]Python을 한번 다시보기

여주링·2021년 2월 28일
1

Python

목록 보기
15/15

파이썬

2010년 후반대에 이르러서는 풍부한 머신러닝 라이브러리와 프레임워크로 머신러닝, 딥러닝등 인공지능 개발을 위한 언어로서 각광을 받고 있는 프로그래밍 언어

사이킷-런(Scikit-learn), 텐서플로우(TensorFlow), CNTK, 아파치 스파크 MLlib(Apache Spark MLlib), 파이토치(PyTorch)등 성능도 뛰어나며 많이 사용되는 머신러닝, 딥러닝 프레임워크들이 파이썬으로 접근이 가능하다.

파이썬의 특징

1.가장 아름다운 하나의 답이 존재한다(디자인 철학)

Simple is better than complex

The Zen of Python

  • 아름다운 것이 추한 것보다 낫다. (Beautiful is better than ugly.)
  • 명시적인 것이 암시적인 것보다 낫다. (Explicit is better than implicit.)
  • 간결한 것이 복합적인 것보다 낫다. (Simple is better than complex.)
  • 복합적인 것이 복잡한 것보다 낫다. (Complex is better than complicated.)
  • 수평적인 것이 내포된 것보다 낫다. (Flat is better than nested.)
  • 여유로운 것이 밀집한 것보다 낫다. (Sparse is better than dense.)
  • 가독성은 중요하다. (Readability counts.)

파이썬의 이런 철학은 이후 다른 프로그래밍 언어에도 영향을 미침 ,2010년대들어서는 기존 언어들도 파이썬처럼 최대한 문법 구조를 단순화시키고 통일하려는 문법 대통일 운동이 일어나기 시작했다.

문법이 굉장히 엄격한 편이다 ex)들여쓰기

2. 순수 객체지향

파이썬에는 원시 타입(Primitive Type)이 존재하지 않으며, 모든 것이 객체로 취급된다.
→ 클래스, 함수 역시 객체로 취급할 수 있다. 상수 역시 상수가 저장된 객체라고 본다

3. 반복 가능한 객체

파이썬의 가장 큰 특징 중 하나. 파이썬은 반복 가능한 객체(iterable)라는 기능을 제공한다. 이 객체는 집합, 문자열, 리스트, 튜플, 딕셔너리, 그리고 함수까지도 반복이 가능하며, 이것을 for 구문에서 사용할 수 있게 해준다. 함수의 값을 반복할 수 있다는 것은 큰 장점이다.

함수를 호출하고 나서도 함수가 완전히 끝나기 전까지는 지역 변수가 남아있으며, 함수가 끝나야 지역변수가 삭제된다. 따라서 함수를 호출할 때마다 x의 값이 증가한다. 이렇게 만들어진 반복 가능한 객체는 next 함수나 next(객체) 함수, 또는 for ... in 객체 와 같은 문법들을 이용하여 순서대로 값을 호출할 수 있다. 특히 제너레이터의 경우, 미리 만들어놓는게 아니라, 호출 될 때 반환값을 새로 만들어 반환하는 방식이기 때문에 메모리 관리 면에서도 이점이 있다.

파이썬의 장점

-높은 생산성

파이썬 정도의 낮은 난이도를 가지면서, 범용성을 갖추고, 파이썬 수준의 프로그램 개발 속도를 따라잡는 언어가 없다.

예시 Hello World를 위한 각 언어별 문법

  • C++
#include <iostream>
using namespace std;
int main(){
	cout << "Hello World" << end1;
	return 0;
}
  • Java
public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello World");
	}
}
  • Python
print("Hello World")

-과학/공학 친화

과학과 공학 분야에서 필요한 기능이 기본적으로 탑제되어있음.

  1. 파이썬은 자체적으로 64비트를 넘어가는 정수를 지원한다(다른 언어의 경우 64비트를 넘어가는 매우 큰 수를 사용하려면 Java의 BigInteger, JavaScript의 BigInt와 같이 별개의 클래스를 사용)

  2. 허수를 기본적으로 지원하며 표준 라이브러리를 이용해 소숫점과 유리수를 다룰수 있음

    → 통계와 암호학 분야에서 사용하기 용이함

복잡한 수치와 큰 데이터를 다루는 연산에 알맞은 NumPy, SciPy, pandas, 데이터를 그래프로 시각화하는 Matplotlib, 코드와 데이터를 함께 다룰 수 있는 Jupyter Notebook 등의 강력한 패키지와 도구를 사용할 수 있다.

파이썬 단점

-멀티스레딩 불가문제

스레딩이란?
최신 운영체제의 필수요소 중 하나. 프로세스보다도 작은 실행 흐름의 최소 단위이다. 하나의 프로그램→하나의 프로세스인데, 하나의 프로그램에서 복잡한 동시작업을 하게 되면서 더 작은 실행단위 개념이 요구되기 시작.
-> 그래서 스레딩이라는 개념이 나타남

파이썬은 멀티스레딩을 지원하기 위하여 GIL(Global Interpreter Lock)라는 전역 인터프리터 락을 도입하여 사용하게 되었다. 그.런.데

👉python에서 스레드 10개를 만든다 → 실제 스레드가 10개가 만들어지긴 하는데, GIL때문에 개중 동시에 하나밖에 안돌아가는 기이한 구조를 갖게 됨.

인터프리터 차원에서 다른 스레드로 교체 해주므로 동시 작업 비슷한 효과가 난다. 이것은 구현이 매우 쉬워지고 빠른 개발을 할 수 있다는 장점이 있으나, 다중 코어 CPU가 보편화된 이후에는 다중 코어를 제대로 활용하지 못하는 구조적인 문제 때문에 성능에서 밀린다는 평가를 받게 되었다(구글에서 초창기에 가루가 되도록 파이썬이 까인게 이것때문)

-패키지관리 및 하위 호환 에러문제

최신 언어에 비해 패키지를 설치하거나 만들어 배포하는 방식이 복잡하다. 이는 역사가 오래된 언어이다 보니 패키지를 다루는 방식이 여러 차례 바뀌었기 때문이다.

많이 사용되는 pip를 가지고 생각해보자
👉가상환경을 사용하지 않고 a프로젝트용(1.1ver)으로 설치했다고 가정. 만일 b프로젝트(0.9ver)라면..?

#pip install --user로 사용자별 기본 환경에 설치하거나 별도의 가상 환경을 만들어야 한다.

대안으로 사용하는게 virtualenv! 패키지를 마음대로 설치할 수 있는 가상 환경을 생성한다. 각 프로젝트마다 자신이 사용할 가상 환경을 만들어주면 프로젝트마다 필요한 패키지를 따로 설정해주는 것이 가능하다.

번외 : 자바스크립트

프로토타입기반의 프로그래밍 언어로, 스크립트 언어(프로그래밍 언어의 한 종류로, 기존에 이미 존재하는 소프트웨어(애플리케이션)를 제어하기 위한 용도로 쓰이는 언어이다.)에 해당된다. 특수한 목적이 아닌 이상 모든 웹 브라우저에 인터프리터가 내장되어 있다. 오늘날 HTML, CSS와 함께 웹을 구성하는 요소 중 하나다.

C언어에서 영감을 받아 만들어진 C-family언어임. 기본적인 문법이 유사 중괄호로 구분하는 블럭, 세미콜론으로 줄이 끝남을 알리는 것, 변수 쓰는 법, 연산자 사용법 등 기초적인 문법이 C 문법과 크게 다르지 않다.

JavaScript는 멀티-패러다임 언어로 명령형, 함수형, 객체지향형 언어다. 기본적으로는 함수가 일급시민으로 취급되는 언어로써 함수형 프로그래밍 패러다임을 따른다

JavaScript는 확장성이 매우 높은 언어이다. JavaScript만 알면 일반적인 사이트 개발부터 React.js 또는 Vue.js를 사용해 SPA (Single Page Application) 웹사이트 개발, iOS와 안드로이드 앱을 만들수 있는 React Native, 웹서버나 다른 서버 사이드 어플리케이션에 Node.js, 데스크탑 앱은 리눅스, macOS, 윈도우, tvOS 등 플랫폼에서 사용 가능한 Electron을 이용하거나 React Native for Windows를 사용해 Windows 10 SDK까지 접근할수 있다.

편하면서도 강력한 텍스트 표기법(JSON)을 가졌으며, 구조적으로 비동기 프로그래밍에 유리하다.

🙄질문1. 파이썬과 자바스크립트 차이점은?

>파이썬과 자바스크립트의 차이점

>Python

👉파이썬은 형식 비지정 언어

파이썬은 변수를 선언할 때 타입을 지정하지 않는다.

형식 언어를 지지하는 사람은 좋은 코드를 쓰는 현명한 사람이다. 그러나 자신의 코드가 각 변수의 데이터 형식에 대한 부가적인 정보 없이도 충분히 매끄럽게 실행된다고 생각한다면 파이썬을 사용하면 된다.

주의! 설명상 형식비지정 → 변수 타입 지정하지 않는 언어로 해석.

👉파이썬, 데이터 과학의 강자

데이터를 다루는 소프트웨어를 만드는 경우 대부분 파이썬이 유리하다. 많은 과학자들이 파이썬의 간소한 구문에 매료되면서 전세계 연구소가 파이썬을 지지하는 기반이 됐다. 데이터 과학이 비즈니스 세계의 모든 계층을 장악하면서 파이썬도 뒤를 따르고 있다

>JavaScript

👉자바스크립트는 둘 다 해당

자바스크립트 자체는 형식 비지정이지만 최근 자바스크립트 분야의 유력한 일부 구성원들이 타입스크립트(TypeScript)로 전환하고 있다. 타입스크립트는 자바스크립트의 확대집합으로, 원할 때 형식을 지정할 수 있는 기능을 제공한다. 물론 원하지 않을 때는 일반 자바스크립트도 문제없이 사용할 수 있다. 형식 확인의 느슨한 버전이다.

👉자바스크립트, 웹의 강자

현 시점에서도 웹 브라우저는 절대적으로 높은 위상을 가짐. 자바스크립트는 로컬 클라이언트부터 시작했지만 그 영향력이 확대되고 Node.js 덕분에 개발자들이 클라이언트와 서버에서 동일한 코드를 더 쉽게 실행할 수 있게 되면서 독보적인 존재로 부상했다.

파이썬과 자바스크립트의공통점

👐 '동적언어'이다!

자료형을 컴파일 할때의 기준으로 정적언어와 동적언어가 나뉜다.

동적 타입 언어의 자료형은 컴파일 자료형을 정하는 것이 아니고 실행 시에 결정. 다음과 같이 타입 없이 변수만 선언하여 값을 지정할 수 있는 것

ex) JavaScript, Python, Ruby

num1 = 10
name = "Evan Hwang"

정적언어는 뭘까?
변수에 들어갈 값의 형태에 따라 자료형을 지정해야 한다. 컴파일 시에 자료형에 맞지 않은 값이 들어있으면 컴파일 에러가 발생
컴파일 시에 타입에 대한 정보를 결정하기 때문에 속도↑ , 타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성↑
ex) C, C#, C++, Java 등

int num = 1; // 컴파일 성공
float num2 = 1.03; // 컴파일 성공
bool num3 = 1; // 컴파일 에러

🙄질문2. 파이썬이 왜 주언어인지

파이썬 인터프리터가 기존 컴파일러 언어에 비해서 퍼포먼스가 낮은데도 불구하고 파이썬이 주 언어인 이유

>컴파일 방식 vs 인터프리터 방식 개념 정리

인터프리터 방식(스크립트언어)

ex) R, Python, Ruby

원시코드(프로그래머가 작성한 소스코드)를 기계어로 변환하는 과정없이 한줄 한줄 명령어를 실행하는 언어

인터프리터가 직접 한 줄씩 읽고 따로 기계어로 변환하지 않기 때문에 빌드 시간이 없습니다. Runtime 상황에서는 한 줄씩 실시간으로 읽어서 실행하기 때문에 컴파일 언어에 비해 속도가 느리고 또한 컴파일 언어에 비해 보안성이 떨어진다
실행속도는 느리지만 코드 변경시 빌드 과정없이 바로 실행이 가능하다는 장점이 있다. 그리고 빠른 아이디어 구현이 쉬워 빠른 프로그램 구현이 가능하다.

컴파일 방식(컴파일 언어)

ex)C, C++

컴파일 언어는 원시코드(프로그래머가 작성한 소스코드)를 모두 기계어로 변환한 후에 기계(JVM 같은 가상 머신)에 넣고 기계어 코드를 실행합니다.

소스코드를 기계어로 번역하는 빌드 과정에서는 인터프리터 언어에 비해 시간이 소요됩니다. 하지만 런타임 상황에서는 이미 기계어로 모든 소스코드가 변환되어 있기 때문에 빠르게 실행할 수 있고, 보안성이 높다

하지만, 코드 수정을 조금이라도 한다면, 다시 컴파일을 해야 하기 때문에 개발 기간이 오래 걸린다.

컴파일(compile) : 소스의 문법을 분석해 기계어로 번역
빌드(build) : 번역된 것과 그외 잡다한걸 모아서 실행 가능한 파일로 만듦
(용어를 분명하게 다르게 사용하니까 주의!)

🌱파이썬이 신속하고 강력한 개발에 초점을 맞추고 있고, 규모에 상관없이 사실상 어떠한 프로젝트에도 사용가능한 고급의 객체지향 프로그램이기 때문이다.

(범용성)

어떤 OS개발 환경이든 관계없이 파이썬은 모든 개발 시나리오에서 사용될 수 있다. 특히 머신러닝에 있어서 필수적인 역할을 하는데, 머신러닝 알고리즘을 위한 빠른 프로토타입 제작과 수정 작업을 가능하게 도와준다. 인터프리터 언어이기 때문에 빌드과정 없이 바로 수정 및 테스트가 가능한 장점이 있다.

(높은 확장성)

파이썬은 직관적인 언어이기 때문에, 유지보수가 쉬울 뿐만 아니라, 신속한 성장에도 문제없이 대응이 가능하다. 회사의 규모를 유연하게 키우고 줄여야하는 스타트업이 파이썬을 선택하는 이유!

(빠른 출시속도, 생산성↑)

다른 언어들에 비해 훨씬 더 적은 코드라인으로 똑같은 기능 구현이 가능하며, 파이썬의 수요와 커뮤니티 그리고 써드파티 라이브러리가 존재해서 경제적이다. 작업의 효율성을 높이기 위해 거대한 규모의 팀이 필요하지 않아 비용적 측면에서도 절감이 된다.

profile
🌱Backend Developer👩‍💻

0개의 댓글