Python 개념 정리

jy_log·2024년 6월 12일

Python

목록 보기
1/2

Python Tutorial Introduction

Ctrl+F 로 검색 기릿💓💫

  • Computational Thinking : 컴퓨팅 사고력

    (1) 문제를 해결하고, 작업을 수행하고, 지식을 표현하며 컴퓨터를 활용하여 가능한 한 효율적으로 작업하는 능력
    (2) 읽기, 쓰기, 셈하기와 더불어 누구나 갖춰야 되는 역량
    (3) 누구나 배워서 활용할 수 있는 보편적인 사고, 기술
    (4) 사람이 직접 문제를 풀려면 시간이 너무 오래 걸릴 수 있는 일을 컴퓨터에게 시키기 위해서 문제를 컴퓨터가 풀 수 있는 방식으로 재정의 하는 일(automation)과 데이터를 주고 컴퓨터가 문제를 풀 수 있도록 방법을 정해주는 일(algorithm), 그리고 같거나 유사한 문제를 풀어내는 것을 재현 가능케 하는 일(automation)을 할 수 있는 사고체계

  • ASII Code :

    (1) American Standard Code for Information Exchange의 약자로, 표준 코드 체계, 7비트(2**7=128개)로 표현 가능하다.
    (2) ASCII(미국 표준 코드 국제)는 텍스트를 컴퓨터에서 처리할 수 있는 숫자로 표현하는 표준 문자 인코딩.

  • 비트: bit

    (1) 정보를 표현할 수 있는 최소 단위
    (2) 비트(bit)는 컴퓨터에서 데이터의 최소 단위로서 0 또는 1의 두 가지 값을 나타냄. 여러 비트가 모여 바이트를 형성하며, 컴퓨터에서 정보를 표현하고 저장하는 데 사용됨. 이진수 체계를 기반으로 하며, 8비트가 1바이트를 형성하여 컴퓨터 시스템에서 데이터 처리의 기본 단위로 활용됨.

  • 추상화: Abstraction

    복잡한 문제나 개념을 단순화하고 핵심적인 개념이나 특성에 집중함으로써 이해하기 쉽게 만드는 프로그래밍/시스템 설계의 원리임.

  • 알고리즘: Algorithm

    (1) 주어진 문제를 해결하기 위한 명확하고 구체적인 방법과 절차
    (2) 컴퓨터가 데이터를 저장하고 처리하는 방법
    (3) 컴퓨터 과학뿐만 아니라 다양한 분야에서 문제 해결에 활용되며, 다양한 종류의 알고리즘이 존재.

  • 자동화: Automation

    알고리즘적 사고를 통해 일련의 작업을 자동적으로 수행

  • Unix:

    sw개발용 운영체제, 원격으로 다중 사용자 지원을 특징으로 한다. Unix는 다중 사용자, 다중 작업을 지원하는 강력한 운영 체제(OS)임. 1960년대 말 AT&T의 벨 연구소에서 처음 개발되었으며, Unix의 설계 철학은 간결함과 재사용 가능한 프로그램을 중심으로 함.

  • C:

    유닉스를 고쳐서 만듦, 컴파일러 기법(처음부터 끝까지 실행)이다. C 언어는 범용 프로그래밍 언어로, 1972년에 데니스 리치(Dennis Ritchie)에 의해 개발 됨. 이 언어는 처음에는 UNIX 운영 체제를 위해 설계되었으나, 그 간결함, 효율성, 유연성 덕분에 널리 사용되기 시작함.

  • DOS:

    ms DOS가 가정에 운영체제로 설치 됨.

  • C++:

    비야네스트로스트룹이 만든 언어로 기존 C언어+객체지향언어+보안의 개념을 추가함.

  • macOS:

    스티브잡스 창시, 마우스 등장, 사용자 경험(UX) 중시, 값비싼 컴퓨터

  • Window:

    DOS에 GUI를 입힘.

  • Python:

    귀도반로섬이 창시.

  • LINUX:

    개인용 컴퓨터(PC)가 서버 역할을 하고 OS가 돌아감.

  • JAVA:

    네트워크 상에서 좀 더 빠르게 돌아감.

  • GitHub:

    분산 버전 관리 시스템인 Git을 기반으로 하는 웹 기반 호스팅 플랫폼으로, 프로젝트의 협업, 코드 공유, 버전 관리를 지원. 개발자들은 GitHub를 사용하여 소스 코드를 업로드하고 추적하며, 이슈 트래킹, 코드 리뷰, 협업 기능을 활용하여 효율적인 소프트웨어 개발을 진행. GitHub는 오픈 소스 프로젝트와 비즈니스 소프트웨어 개발에 널리 활용됨.

  • TensorFlow:

    딥 러닝 및 기계 학습을 위한 오픈 소스 라이브러리로, 구글에서 개발하고 유지보수 함. 그래프 기반의 계산 모델을 사용하여 신경망 모델을 효과적으로 구축하고 학습시킬 수 있으며, 다양한 플랫폼에서 활용된다. TensorFlow는 유연하고 확장 가능한 딥 러닝 프레임워크임.

  • Keras:

    (1) 머신러닝을 더 손쉽게 해주는 오픈소스 라이브러리.
    (2) 딥 러닝 모델을 쉽게 구축하고 학습시키기 위한 고수준 신경망 API로, TensorFlow와 함께 사용되는 것이 일반적. 사용자 친화적인 API로 빠르게 프로토타이핑하고 실험할 수 있어, 딥 러닝 모델을 간편하게 개발할 수 있다. 최근 버전에서는 TensorFlow의 일부로 통합되어 두 라이브러리를 함께 사용하여 강력한 딥 러닝 애플리케이션을 구축할 수 있다.

  • Sora:

    OpenAI에서 선보인 ‘text to video’ 서비스로 텍스트 프롬프트를 기반으로 동작하는 서비스다. 시각적 데이터를 패치로 변환하고, Latent representation을 출력함으로써 동작한다.

  • 동적 타이핑: Dynamic Typing

    변수의 타입을 미리 선언하지 않아도 할당되는 값에 따라 자동으로 타입이 결정되며, 개발자에게 유연성을 제공함.

  • 객체 지향 프로그래밍:

    (1) 클래스와 객체를 사용하여 데이터와 해당 데이터를 처리하는 메서드를 캡슐화하여 코드의 재사용성과 유지 보수성이 향상됨. (python, C언어에서는 이러한 개념이 없음, 클래스(객체)가 필수적임.)
    (2) 객체 지향 개념(상속, 다형성 등)을 활용하여 효율적으로 코드 작성

  • 클래스:

    (1) 관계가 있는 데이터와 함수를 하나로 묶어서 선언하는 개념
    (2) 객체를 생성하는 데이터 타입의 역할

  • 절차 지향 프로그래밍:

    처리해야 할 문제의 해결 과정을 큰 문제를 독립적인 기능별로 나눠서 일련의 순서에 따라서 처리.
    → 함수가 필수적이다.

  • 함수형 프로그래밍:

    (1) 람다 함수는 파이썬에서 함수형 프로그래밍을 지원하고 코드를 간결하게 만들어주는 강력한 기능이다.
    (2) 람다 함수는 간단한 함수에 적합하며, 복잡한 로직이 필요한 경우는 일반적인 함수 정의를 사용한다.

  • 모듈:

    (1) 큰 문제를 기능별 작은 단위로 나눈 것
    (2) 독립적으로 수행할 수 있는 프로그램 단위
    (3) C언어부터는 모듈을 함수(function)라고 부름

  • 매개변수: Parameter, arg

    매개변수는 함수나 메서드에 전달되는 값을 나타내는 변수로, 함수를 호출할 때 인자(argument)로 전달됨. 매개변수는 함수의 정의에서 선언되며, 함수 내에서 사용되어 특정 작업을 수행하는 데 활용된다. 매개변수는 함수의 유연성을 제공하며, 함수를 여러 상황에서 재사용할 수 있도록 도움.

  • 데이터 타입

    (1) 숫자 : int(정수), float(실수)
    (2) 문자: str(문자들의 시퀀스를 나타내는 데이터 타입)

  • 스코프

    변수가 접근 가능한 범위로, python은 전역변수와 지역변수를 지원함.

  • 3A

    automation, algorithm, abstraction

  • Garbage collection

    python에서 변수가 생성될 때, 해당 값에 대한 memory 공간이 할당되며, 변수가 불필요할 시 자동으로 메모리가 해제되는 것

  • String 문자열

    문자들의 시퀀스를 나타내는 데이터타입으로 immutable 함.

  • List 리스트

    (서로 다른) 여러 개의 요소들을 순서대로 저장하는 데이터 타입으로 mutable 함.
    in, not in 연산자를 사용한다.

    append : 맨 뒤에 항목 추가

    pop : 맨 뒤 항목 빼고 삭제

    sort : 항목 정렬, 원본 리스트 원소 값 자체를 sorting하여 값을 바꿈 ↔ sorted : 원본 리스트를 변경하지 않고, 정렬된 새로운 리스트를 반환함.

    reverse : 항목 순서 역순

    index : 지정한 값을 찾아 그 위치를 반환 → list.index(찾을 값)

    insert : 지정된 위치에 값을 삽입

    remove : 리스트에서 지정한 값을 제거(단 지정한 값이 많을 경우 첫 번째 값만 지움)

    extend : 리스트 뒤에 리스트를 추가, + 연산과 동일한 기능 → list.extend(리스트)

    count : 리스트에서 찾을 값의 개수를 셈 →list.count(찾을 값)

    del : 리스트에서 해당 위치의 항목을 삭제 →del(list[위치])

    len : 전체 항목의 개수를 셈 → len(list)

  • Tuple 튜플

    여러 개의 요소들을 순서대로 저장하는 데이터 타입으로 immutable 함.

  • Dictionary 딕셔너리

    키-값(key-value) 쌍으로 데이터를 저장하는 데이터 타입으로 mutable 함.

  • Set (집합)

    중복되지 않은 요소들로 구성된 데이터 타입으로 mutable 함.

  • 포인터

  • local variable (지역변수)

    함수 안에서 정의된 변수

  • global variable (전역변수)

    함수 밖에서 정의된 변수

  • 객체

    프로그래밍에서 특정한 데이터와 그 데이터를 처리하기 위한 메서드(함수)를 함께 묶어 놓은 것. 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 패러다임에서 중요한 개념 중 하나임.

    객체는 속성(데이터)과 메서드(기능)로 이루어져 있다.

  • Immutable > 수, 문, 튜

    변경 불가능한 객체로 수치 값(int, float, bool), 문자열(str), 튜플(tuple)이 변경 불가능 함.
    정수형 변수를 생성하고 그 값을 변경하려고 하면 새로운 정수 객체가 생성되고 변수가 이를 참조.

  • Mutable

    객체의 상태를 변경시킬 수 있으므로(변수를 통해 즉시 접근 가능) 변수가 해당 객체를 직접 참조.
    변경 가능한 객체로 딕셔너리, 리스트, 집합이 변경 가능함.

  • Shallow copy (얕은 복사)

    mutable은 리스트, 딕셔너리 타입으로 내부 값인 요소에 추가하는 것이므로 변수나 함수 파라미터로 사용해도 얕은 복사로 변경 가능.
    id가 동일하게 부여되고, 값 변경하면 처음 값까지 다 수정된다.
    copy()함수로 사용한다.

  • Deep copy (깊은 복사)

    mutable에서 처음 값이 변경되지 않으려면, 참조만 복사(얕은 복사)하지 말고 전체를 복사(deep copy)해야 별도의 참조가 생겨 다른 값 객체로 인식한다.
    import copy; deepcopy() 함수를 사용한다.(객체를 공유하지 않고, 새롭게 똑같은걸 만든다.)

  • 함수 (function)

    독립적으로 수행하는 프로그램 단위로 특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것.
    장점 : 소스의 중복을 최소화하여 프로그램의 양을 줄이고 가독성을 높임.
    단점 :

  • add 함수 호출

  • swap 함수 호출

  • Call by Value

    함수 호출 방식 중 하나로, 함수에 매개변수로 전달되는 것이 값의 복사본이라는 개념을 나타낸다. 즉, 함수에 전달되는 매개변수는 원본의 값을 복사하여 전달한다. 이 때, 함수 내에서 매개변수의 값을 변경하더라도 호출자(caller)에게는 영향을 주지 않는다.
    call by reference : 값이 바뀜(mutable한 객체의 경우 Call by Reference와 유사한 효과를 얻을 수 있다.)

  • global keyword

    함수(안에서는 지역변수) 내 전역변수 사용하고 싶을 시 global keyword 사용

  • Lambda 람다 함수

    add = lambda x, y: x + y
    result = add(3, 5)
    print(result)  # 출력: 8
  • 패키지

    모듈의 집합

  • module (모듈)

    함수/변수/클래스 들을 모아놓은 파일, 모듈은 파이썬 문장들이 저장된 파일.

  • random 모듈

    import random
    a = random.randint(1, 10) //1부터 10까지의 무작위 정수 생성
    b = random.random() //0~1사이의 무작위 실수 생성
    random.shuffle(list)
    c = random.choice(list) //주어진 리스트에서 무작위로 하나의 요소 선택
  • Operator (연산자)

    이미 정의된 연산을 수행하는 기호나 키워드를 의미.
    (1) 산술 : +-*/ //(몫) %(나머지) **(거듭제곱)
    (2) 관계 : ≠(=!) ==
    → 1==0 < 1 의 경우 python은 1==0 and 0<1 //False, 1>0 == 0 의 경우 python은 1>0 and 0==0 //True로 출력 되는 점을 주의 해야한다. (C는 대소비교연산자가 우선순위 더 높음.)
    (3) 논리 : and, or, not

  • Operand (피연산자)

    연산자(Operator)가 동작하는 대상이 되는 값 또는 표현식.

  • assignment operator(대입 연산자)

    변수의 저장 값을 대입하는 = 기호
    = 의 왼쪽은 반드시 변수, 오른쪽은 값, 수식의 결과 값을 변수에 대입하지 않으면 프로그램에 영향 없음.

  • 단축 대입 연산자

    a+=b, a//=b, a=b
    두 번 연산 안해도 되지만, 단
    a가 미리 선언 되어있어야 함.**

  • 제어문

    프로그램의 흐름을 제어하는 문장
    (1) 조건문 : if, elif
    (2) 반복문 : for, while
    (3) 분기문 : 프로그래밍에서 조건에 따라 프로그램의 흐름을 제어하는 명령문. break(반복문을 중단하고 빠져나오게 하고), continue(남은 부분 건너 뛰고 반복문의 처음으로 돌아감, 즉 현재 반복 단계를 건너뛰고 다음 단계로 이동.)

  • __main__

    일반적으로 파이썬 스크립트는 다른 모듈이나 패키지로 사용될 수 있다. 그러나 스크립트 파일이 직접 실행될 때, 해당 스크립트 파일은 최상위 레벨에서 실행되는데, 이때 __main__ 모듈이 사용됨.

    일반적인 사용 사례는 스크립트 파일 내에서 __name__ 변수를 체크하여 현재 모듈이 메인 모듈인지 확인하고, 그에 따라 필요한 코드 블록을 실행하는 것.

  • 객체지향 프로그래밍 (object oriented programming)

    데이터와 함수가 같이 쓰이는걸 한번에 묶는 프로그래밍으로, 대표적으로 class 클래스(=템플릿, 설계도)가 있다(c언어에 없음).

  • 프로시저 프로그래밍

  • 객체

    클래스로부터 생성된 것을 객체라고 한다. (ex. mycar1=Car())

  • 클래스 class

    (1) 클래스로 부터 생성된 것을 객체, 인스턴스라고 말한다.

    (2) 클래스 안에 있는 함수를 메서드라고도 말한다.

  • Constructor 생성자

    (1) instance를 생성하면 무조건 호출되는 메소드

    (2)_ init__() 이란 이름을 갖고 초기화할 코드를 입력함 (초기화 하고싶을 때)

    (3) self 현재 시점에 부른 객체의 주소가 들어간다

  • 캡슐화 encapsulation

    데이터와 함수를 묶고, 공개된 함수로만 접근 가능하게 하고 내부는 접근 불가하게 만든 것으로, class 로 실현되었다.

  • Instance variable

    각각 생성된 객체마다 독립적으로 생성된 변수로 self.speed=0 같이 쓴다.

  • Class variable

    클래스로부터 생성된 객체들이 서로 그 공간 안에서 변수를 공유하고 싶을 때, Car.count += 1 같이 클래스 이름으로 접근 가능하다.

  • Inheritance 상속

    기존 클래스의 필드와 메소드를 그대로 물려받아 필요한건 추가하는 형식으로 새로운 클래스를 만드는 것으로, Car → Truck(서브클래스)클래스같은 경우다.

    class Truck(Car:슈퍼클래스)로 사용한다.

  • Method overriding

    슈퍼 클래스의 함수를 서브 클래스에서 재정의하는 것. 이 때 함수 이름, 파라미터 그대로 쓰고, 조건을 걸던 재정의 한다.

  • Operator overloaing

    사용자 정의 객체에서 필요한 연산자를 내장 타입과 형태가 유사하도록 재정의하는 것으로, str+int 같이 내가 정의한 함수의 dt type이 다르더라도 수치 연산자 메소드 정의를 통해 str+int 계산을 가능케 한다.

    피연산자 순서 바뀐경우 _radd __ 메소드를 정의한다.

  • Polymorphism 다형성

    (1) 같은 방법으로 명령을 내리는데 다르게 반응하는 것이다.

    (2) 위의 2개 단어가 다형성을 지원하는 기술이다.

    (3) 형 선언이 없는 파이썬에서 구현하기 더 쉽다.

  • Recursive function

    (1) 함수 안에서 자기 자신을 다시 호출해서 문제를 해결하는 기법

    (2) factorial, fibonacci, hanoi tower 이 예시다.

profile
Data Science & AI

0개의 댓글