no image
[Python] 변수와 입력
변수 변수의 개념 변수 : 값을 저장할 때 사용하는 식별자 파이썬에서는 숫자형/문자형을 비롯한 모든 데이터 타입에 대해 그것을 지칭할 수 있는 이름을 자유롭게 만들 수 있고 (키워드는 변수이름으로 사용 못함), 컴퓨터 하드웨어 중 메모리에 변수에 대한 공간을 만들고, 값을 할당함 컴퓨터의 메모리 공간에 이름을 붙이는 것으로 우리는 여기에 값을 저장할 수 있다. C언어에서는 직접 메모리 상의 공간에 접근할 수 있는‘포인터’를 제공하고 있으나, 파이썬에서는 포인터가 없고, 단지 객체의 참조값만 확인할 수 있음 불변 객체와 가변 객체 불변 객체 불변 객체(immutable object)은 한번 만들어지면 변경할 수 없는 객체 우리가 변수에 저장된 값을 변경하면 값을 저장하는 새로운 객체가 생성되어서 새로운 객..
2023.08.26
no image
[Python] 문자형
문자열 문자와 단어 등으로 구성된 문자들의 집합을 의미 Python의 문자열은 유니 코드 문자를 나타내는 바이트 배열 단일 문자는 길이가 1 인 문자열 숫자도 따옴표 안에 있으면 문자열 파이썬의 문자열 리터럴은 작은 따옴표 또는 큰 따옴표로 묶음 -> 작은 따옴표 또는 큰 따옴표 세 개를 연달아 입력하는 방법도 가능 간단한 문자열 만들어 보기 • “Hello” • ‘안녕하세요’ • '''문자열을 공부하고 있습니다.''' • """문자열을 공부하고 있습니다.""" 문자열 내부에 따옴표를 넣으려면? 큰따옴표(작은따옴표) 안에 작은따옴표(큰따옴표)로 문자를 표기해야 함 ""안에 ""을 넣는다면, 단순 문자열이 두 번 반복되는 걸로 파이썬 인터프리터는 이해함 예 : ""안녕"하세요" → “”, “하세요” 가 독..
2023.08.25
no image
[Python] 파이썬 자료형
자료형 파이썬에서의 자료형 프로그래밍을 할 때 쓰이는 숫자, 문자열 등 자료 형태로 사용하는 모든 것을 뜻함 프로그램의 기본이자 핵심 단위임 C언어나 Java 같은 프로그래밍 언어와 달리, 파이썬에서는 코드를 작성할 때 프로그래머가 자료형을 지정하지 않아도 됨 프로그래밍 시 자료형을 지정하지 않아도 되긴 하지만, 파이썬 내부에서는 자동으로 자료형을 정해줌 • 런타임(실행 시간) 시에 자료형이 결정됨 • 자동으로 지정된 자료형은 어떻게 확인할 수 있나? -> type( )이라는 함수를 통해서 확인할 수 있음 • 실행시켜 보기 전에는 오류를 검출하기 어렵지만, 유연하고 빠르게 코딩이 가능 숫자형(수치 자료형) 숫자형(number)이란 숫자 형태로 이루어진 자료형으로, 123 같은 정수, 12.3 같은 실수,..
2023.08.24
no image
[Python] 파이썬 기본적인 용어
키워드(keyword) 파이썬이라는 프로그래밍 언어가 만들어질 때, 이런 단어들은 파이썬 자체적으로 사용하겠다고 예약해 놓은 단어들 (총 35개) 키워드로 지정된 단어들은 변수명 같이 나중에 사용자가 마음대로 정할 수 있는 이름들로는 사용될 수 없기 때문에 알고 있어야 함 식별자(identifier) 키워드 외에 프로그램에서 사용자가 필요에 따라 이름을 만들어 사용하는 단어 즉, 변수, 상수, 함수, 클래스 등의 구분을 위해 사용하는 이름 식별자를 작성하는데 정답은 없지만 대부분의 경우 많은 프로그래머들이 관례적으로 사용하는 카멜 기법과 파스칼 표기법을 적절하게 조합 • 변수명이나 함수명은 카멜 표기법 • 클래스명은 파스칼 표기법 식별자 작성 규칙 식별자로 쓸 수 있는 문자 • 영문 대/소문자(A~Z, ..
2023.08.23
no image
[Python] 파이썬으로 멀티 스레드 만들기
2023.06.27 - [컴퓨터 구조 & 운영체제] - [운영체제] 스레드(Thread), 멀티 프로세스와 멀티 스레드 [운영체제] 스레드(Thread), 멀티 프로세스와 멀티 스레드 이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 스레드 이 글에서 다루는 내용은 소프트웨어적 스레드이 rebugs.tistory.com 위 글을 바탕으로 파이썬으로 멀티 스레드를 구현 스레드 생성하기 import threading import os def foo(): print('thread id', threading.get_native_id()) #스레드 ID 출력 print('process id', os.getpid()) #PID 출..
2023.06.29
no image
[Python] 파이썬으로 멀티 프로세스 만들기
2023.06.27 - [컴퓨터 구조 & 운영체제] - [운영체제] 스레드(Thread), 멀티 프로세스와 멀티 스레드 [운영체제] 스레드(Thread), 멀티 프로세스와 멀티 스레드 이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 스레드 이 글에서 다루는 내용은 소프트웨어적 스레드이 rebugs.tistory.com 위 글을 바탕으로 파이썬으로 멀티 프로세스를 구현 프로세스 PID 얻기 import os print('hello os') print('my pid is', os.getpid()) #프로세스의 PID를 얻어옴 위 코드는 프로세스의 PID를 얻어오는 코드이다. PID는 22468이라고 알려준다. 자식 프로세..
2023.06.28
no image
[Python] 내장 함수
파이썬에는 많은 내장 함수가 있다. 모든 내장 함수를 다루고 싶지만, 모든 내장 함수를 정리하는 것은 시간도 많이 필요하고 비 효율적이다. 그래서 사용 빈도가 높은 함수들만 정리하겠다. 숫자 관련 내장 함수 int() 함수 문자열 형태의 숫자나 소수점이 있는 숫자 등을 int 형태로 리턴함 int(1.23) #1 int(123) #123 int("123") #문자열도 숫자로 바꿀 수 있음 int(True) #1 0은 False, 1은 True(0 이외의 숫자는 모두 True임) float() 함수 문자열 형태의 숫자나 소수점이 없는 숫자 등을 float형태로 리턴함 float("123") #123.0 float(10) #10.0 float(True) #1.0 float(1.123) #1.123 문자열 관..
2022.12.09
no image
[Python] 예외 처리
오류의 종류 프로그램 실행 전에 발생하는 오류 : 문법 오류 프로그램 실행 중에 발생하는 오류 : 런타임 오류(예외) 예외 처리는 런타임 오류를 최대한 줄이는 것이다. try-except try-except의 기본 형태 try: #예외가 일어날 것 같은 코드 입력 except: #예외가 일어나면 할 작업 입력 try블록에는 예외가 일어날 것 같은 코드를 입력한다. try블록에서 오류가 일어난다면 except블록에 입력된 명령이 실행된다. try블록에서 오류가 일어나지 않는다면 except블록의 명령이 실행되지 않는다. intnum = input("정수를 입력하세요 : ") try: print(f"당신이 입력한 값은 {int(intnum)}입니다") except: print("잘못된 값을 입력했습니다.")..
2022.12.09

변수

변수의 개념

변수 : 값을 저장할 때 사용하는 식별자

파이썬에서는 숫자형/문자형을 비롯한 모든 데이터 타입에 대해 그것을 지칭할 수 있는 이름을 자유롭게 만들 수 있고 (키워드는 변수이름으로 사용 못함), 컴퓨터 하드웨어 중 메모리에 변수에 대한 공간을 만들고, 값을 할당함

 

컴퓨터의 메모리 공간에 이름을 붙이는 것으로 우리는 여기에 값을 저장할 수 있다.

 

C언어에서는 직접 메모리 상의 공간에 접근할 수 있는‘포인터’를 제공하고 있으나, 파이썬에서는 포인터가 없고, 단지 객체의 참조값만 확인할 수 있음

 

불변 객체와 가변 객체

불변 객체

  • 불변 객체(immutable object)은 한번 만들어지면 변경할 수 없는 객체
  • 우리가 변수에 저장된 값을 변경하면 값을 저장하는 새로운 객체가 생성되어서 새로운 객체의 참조값이 변수에 저장됨
  • 정수, 실수, 문자열, 튜플 등

 

가변 객체

  • 가변 객체(mutable object)는 변경할 수 있는 객체
  • 리스트, 세트, 딕셔너리 등

 

 


 

 

입력

  • 프로그램을 만들다 보면, 사용자로부터 입력을 받아서 활용하는 경우가 많음
  • 파이썬의 경우 사용자 입력을 받을 때 input() 함수를 사용하여 받을 수 있음
  • input() 함수를 통해 입력 받은 값은 변수에 할당할 수 있음

 

  • input() 함수를 통해 입력 받은 값의 데이터 타입은
    무조건 문자열(str) 형태
  • 따라서 숫자를 넣어줬으면, 
    문자열 → 숫자형으로 변형시켜줘야 함
  • 문자형 → 정수형/실수형으로 변형할 수 있는
    int(), float() 함수를 사용해야 함

'Python Category > Python' 카테고리의 다른 글

[Python] 문자형  (0) 2023.08.25
[Python] 파이썬 자료형  (0) 2023.08.24
[Python] 파이썬 기본적인 용어  (0) 2023.08.23
[Python] 내장 함수  (0) 2022.12.09
[Python] 예외 처리  (2) 2022.12.09

문자열

  • 문자와 단어 등으로 구성된 문자들의 집합을 의미
  • Python의 문자열은 유니 코드 문자를 나타내는 바이트 배열
  • 단일 문자는 길이가 1 인 문자열
  • 숫자도 따옴표 안에 있으면 문자열
  • 파이썬의 문자열 리터럴은 작은 따옴표 또는 큰 따옴표로 묶음
    -> 작은 따옴표 또는 큰 따옴표 세 개를 연달아 입력하는 방법도 가능
간단한 문자열 만들어 보기
• “Hello” • ‘안녕하세요’
• '''문자열을 공부하고 있습니다.'''
• """문자열을 공부하고 있습니다."""

 

문자열 내부에 따옴표를 넣으려면?

  • 큰따옴표(작은따옴표) 안에 작은따옴표(큰따옴표)로 문자를 표기해야 함
  • ""안에 ""을 넣는다면, 단순 문자열이 두 번 반복되는 걸로 파이썬 인터프리터는 이해함
    예 : ""안녕"하세요" → “”, “하세요” 가 독립된 문자열로 인식됨. 안녕은 문자열로 인식도 안됨
  • 혹은 이스케이프 문자 (역슬래쉬 \ 기호와 함께 사용, 한국어 키보드에서는 원화표시 ₩)를 함께 사용
    예 : \', \''

 

 

문자열 연산

  • 문자열 연산에도 숫자형과 비슷하게 +, * 연산을 적용할 수 있음
  • + : 주어진 여러 문자열 연결 (합치기)
    문자열 + 문자열 + ,,, + 문자열 (O) 
    문자열 + 숫자형 (X)
  •  * : 주어진 문자열 반복
    문자열 * 반복 횟수(숫자)
    반복 횟수(숫자) * 문자열

 

문자열 연산에도 아래 복합대입연산을 적용할 수 있음

 

문자열 in 연산
문자열 내부에 어떤 문자열이 있는지 확인하려면 in 연산자를 사용할 수 있고, true/false를 반환해줌

 

 

문자열 인덱싱

  • 문자열 내부적으로 보면 하나의 단어는 각각 하나의 인덱스(index)에 맵핑 될 수 있음

  • 기본적인 인덱스는 0부터 시작되며, 해당 문자열의 길이-1까지 인덱스가 존재함
    “안녕하세요”는 길이가 5이므로, 인덱스는 0~4까지 가능
  • 문자열을 받은 변수 혹은 문자열 자체에 대해서 인덱스를 대괄호[]와 함께 사용해서 접근할 수 있음
  • 인덱스는 양수뿐만 아니라 음수도 가능함

 

 

문자열 슬라이싱

  • 주어진 문자열에 대해서 특정 문자 1개에만 접근할 수 도 있지만, 문자열의 범위를 선택해야 하는 경우도 있음
    예 : 문자열의 두 번째 문자부터 다섯 번째 문자까지 선택하기
  • 이렇게 부분 문자열을 추출하는 방법을 슬라이싱이라고 하며, 대괄호와 :을 통해서 표시할 수 있음
  • 작성 방법: [ : ]  -> [부분 시작 문자의 인덱스 : 부분 끝 문자의 인덱스 + 1]
    예 : a[1:4] → 문자열 a의 부분 시작 문자의 인덱스 1부터
    부분 끝 문자의 인덱스 3 → “녕하세” 선택

 

생략 슬라이싱
• 대괄호 안에 넣는 숫자 둘 중 하나를 생략하여 사용할 수 있음
예 : [1:] [: 3]
• 뒤의 값 생략 시 가장 최대 위치 (마지막 글자)까지 지정
[1:] → [1:가장 마지막 글자 인덱스 + 1]
• 앞의 값 생략 시 가장 최소 위치 (첫번째 글자)부터 지정 [:3] → [0:가장 마지막 글자의 인덱스인 2 + 1]

 

 

  • 슬라이싱에서도 인덱싱과 같이 음수도 가능
    • a[1:-2] → “녕하”
  • 여기서도 뒷 인덱스는 원하는 끝 문자의 index보다 하나 커야 함
    부분 끝 문자의 인덱스 -3 + 1 = -2
    A[-5: -2] → “안녕하”

음수를 사용하는 슬라이싱에서도 앞/뒤 숫자 중 하나를 생략할 수 있음

뒤의 값 생략 시 가장 최대 위치 (마지막 글자)까지 지정 → a[-4:]
앞의 값 생략 시 가장 최소 위치 (첫번째 글자)부터 지정 → a[:-1]

슬라이싱시 아무런 숫자를 주지 않으면?
전체 문자열을 슬라이싱 함

 

 

문자열 관련 함수

문자열 길이 구하기

  • len() 함수
  • ()안에 문자열을 넣으면 주어진 문자열의 문자 개수(=문자열의 길이)를 계산해서 돌려줌
    예 : len(“안녕하세요”) → 5라는 숫자를 돌려줌
  • 문자열에 공백이나 이스케이프 문자가 있을 경우 그것도 count하여 돌려줌

 

 

문자열 찾기

  • find()라는 함수는 입력으로 주는 argument 문자가 처음 나타나는 위치(index 값)를 반환해주는 작업을 함

 

format() 함수

  • “”로 묶인 문자열 안에 있는 중괄호{} 안의 문자가 format() 함수의 argument 로 주는 값으로 대치됨
    예 : “제 나이는 {} 살 입니다.”.format(20) → {} 대신 20으로 대치가 됨

 

 

대소문자 바꾸기

  •  upper(), lower() 함수
  • upper() 함수는 모든 알파벳을 대문자로 변환
  • lower() 함수는 모든 알파벳을 소문자로 변환

 

 

문자열의 양 옆의 공백 제거하기

  •  strip() 함수

 

 

문자열의 구성 파악하기

  • isOO() → is가 붙어있기 때문에 True 혹은 False 반환
  • isalnum(): 문자열이 알파벳 또는 숫자로만 구성되어 있는지 확인
  • isalpha(): 문자열이 알파벳으로만 구성되어 있는지 확인
  • islower(): 문자열이 모두 소문자로만 구성되어 있는지 확인
  • isupper(): 문자열이 모두 대문자로만 구성되어 있는지 확인

 

 

문자열 자르기

  • 문자열을 특정한 문자로 자르고 싶을 때 split() 함수를 사용
  • default는 white space(공백)

'Python Category > Python' 카테고리의 다른 글

[Python] 변수와 입력  (0) 2023.08.26
[Python] 파이썬 자료형  (0) 2023.08.24
[Python] 파이썬 기본적인 용어  (0) 2023.08.23
[Python] 내장 함수  (0) 2022.12.09
[Python] 예외 처리  (2) 2022.12.09

자료형

파이썬에서의 자료형

  • 프로그래밍을 할 때 쓰이는 숫자, 문자열 등 자료 형태로 사용하는 모든 것을 뜻함
  • 프로그램의 기본이자 핵심 단위임
  • C언어나 Java 같은 프로그래밍 언어와 달리, 파이썬에서는 코드를 작성할 때 프로그래머가 자료형을 지정하지 않아도 됨

프로그래밍 시 자료형을 지정하지 않아도 되긴 하지만, 파이썬 내부에서는 자동으로 자료형을 정해줌
• 런타임(실행 시간) 시에 자료형이 결정됨
• 자동으로 지정된 자료형은 어떻게 확인할 수 있나? -> type( )이라는 함수를 통해서 확인할 수 있음
• 실행시켜 보기 전에는 오류를 검출하기 어렵지만, 유연하고 빠르게 코딩이 가능

 


 

숫자형(수치 자료형)

  • 숫자형(number)이란 숫자 형태로 이루어진 자료형으로, 123 같은 정수, 12.3 같은 실수, 2진수, 8진수, 16진수 등이 있음

정수를 2, 8, 16진법으로 변화할 수 있는 함수(메소드) 및 표현

 

정수(int, integer)와 실수(float, floating point)

  • 정수와 2/8/16진법 사이의 변환처럼, 서로 다른 데이터 타입 사이의 변환이 가능함
  • float(변수이름) → 변수이름의 자료형을 float로 변환
  • int(변수이름) → 변수이름의 자료형을 int로 변환

 

정수와 문자열 사이의 형변환

  • str(변수이름) → 변수이름의 자료형을 str로 변환

 

 

산술 연산자

 

정수/실수 혹은 실수/정수 나누기 값은 소수점을 포함할 수 있으므로 실수형 값 반환

 

 

관계 연산자

관계 연산자 적용에서도 정수(실수)와 문자형의 비교는 ‘같다’, ‘다르다’ 여부만 적용할 수 있음

 

 

복합대입연산자

  • 연산과 할당을 합쳐놓은 것
  • 식을 간결하게 표현할 수 있고, 변수가 이전에 가졌던 값을 수정하여 할당하는 일에 활용될 수 있음

 

 

 

연산자의 우선순위

  • 괄호()가 가장 높은 우선순위를 갖음
  • 곱셈 / 나눗셈 / 나머지 / 몫보다는 제곱이 더 높은 순위를 갖고, 할당/복합대입 연산이 가장 낮은 우선 순위를 갖음

'Python Category > Python' 카테고리의 다른 글

[Python] 변수와 입력  (0) 2023.08.26
[Python] 문자형  (0) 2023.08.25
[Python] 파이썬 기본적인 용어  (0) 2023.08.23
[Python] 내장 함수  (0) 2022.12.09
[Python] 예외 처리  (2) 2022.12.09

키워드(keyword)

  • 파이썬이라는 프로그래밍 언어가 만들어질 때, 이런 단어들은 파이썬 자체적으로
    사용하겠다고 예약해 놓은 단어들 (총 35개)
  • 키워드로 지정된 단어들은 변수명 같이 나중에 사용자가 마음대로 정할 수 있는
    이름들로는 사용될 수 없기 때문에 알고 있어야 함

 

식별자(identifier)

  • 키워드 외에 프로그램에서 사용자가 필요에 따라 이름을 만들어 사용하는 단어
  • 즉, 변수, 상수, 함수, 클래스 등의 구분을 위해 사용하는 이름
  • 식별자를 작성하는데 정답은 없지만 대부분의 경우 많은 프로그래머들이 관례적으로 사용하는 카멜 기법과 파스칼 표기법을 적절하게 조합
    • 변수명이나 함수명은 카멜 표기법
    • 클래스명은 파스칼 표기법

 

식별자 작성 규칙
식별자로 쓸 수 있는 문자
• 영문 대/소문자(A~Z, a~z), 숫자(0~9), 특수문자 중 언더 바(_)만 사용될 수 있음
• 영어 알파벳 외의 문자도 가능은 하지만 관례적으로 쓰지 않음

식별자로 쓸 수 없는 문자
• 키워드를 사용하면 안됨 (예 : if)
• 숫자로 시작하는 문자열 (예 : 0a)
• 특수문자가 포함된 문자열 (예 : a!)
• 공백이 포함된 문자열 (예 : a b)

 

 

들여쓰기(indent)

  • 보통 코드를 만들 때 가독성을 위해 들여쓰기를 하곤 함
  • C나 Java와 같은 다른 프로그래밍 언어에서는 중괄호({})를 사용하여 영역을 지정하곤 함
  • 하지만 파이썬은 중괄호를 사용하지 않고, 들여쓰기만 사용하여 영역을 지정함

 

 

주석(comment)

  • 프로그램 내부에 프로그램을 설명하기 위해 작성하는 글로, 프로그램 실행에는 전혀 영향을 주지 않음
  • 주석으로 처리하고자 하는 주석 부분 앞에 # 기호를 붙임 (# 이후 해당 줄 전체를 주석 처리 함)  ->행단위 주석
  • 여러 줄을 주석 처리하고 싶을 때는 큰따옴표 """ 또는 작은따옴표 ''' 3개를 연달아서 시작과 끝부분에 사용 -> 블록단위 주석

 

 

행결합

  • 많은 프로그래밍 언어들이 문장(statement)이 끝날 때마다 세미콜론(;)을 적어서 종료를 알리는데,  파이썬은 구문이 끝나면 세미콜론을 붙이지 않고,  줄이 바뀌면 자동으로 문장이 종료되었다고 인식함
  • 만약 1줄의 내용이 길어서 여러 줄로 타이핑을 하고 싶다면 \(역슬래쉬)나 괄호를 이용함

 

print() 함수

  • print() 함수를 통해서 변수, 문자열, 숫자, 수식 결과 등을 쉽게 출력할 수 있음

 

  • 따옴표의 중첩에 따라서 결과가 달라질 수 있음
  • + 연산자를 통해 문자열끼리 더하는 것도 가능함

'Python Category > Python' 카테고리의 다른 글

[Python] 문자형  (0) 2023.08.25
[Python] 파이썬 자료형  (0) 2023.08.24
[Python] 내장 함수  (0) 2022.12.09
[Python] 예외 처리  (2) 2022.12.09
[Python] 파일 입출력  (1) 2022.12.08

2023.06.27 - [컴퓨터 구조 & 운영체제] - [운영체제] 스레드(Thread), 멀티 프로세스와 멀티 스레드

 

[운영체제] 스레드(Thread), 멀티 프로세스와 멀티 스레드

이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 스레드 이 글에서 다루는 내용은 소프트웨어적 스레드이

rebugs.tistory.com

위 글을 바탕으로 파이썬으로 멀티 스레드를 구현


스레드 생성하기

import threading
import os

def foo():
    print('thread id', threading.get_native_id()) #스레드 ID 출력
    print('process id', os.getpid()) #PID 출력

if __name__ == '__main__':
    print('process id', os.getpid()) #PID 출력
    thread = threading.Thread(target=foo).start() #스레드 생성

위 코드는 스레드를 생성하여 스레드 ID와 PID를 출력하는 코드이다.

PID는 6172, 프로세스 ID는 8892가 출력되었다.


멀티 스레드 생성하기

import threading
import os

def foo():
    print('thread id', threading.get_native_id()) #스레드 ID 출력
    print('process id', os.getpid()) #PID 출력

if __name__ == '__main__':
    print('process id', os.getpid()) #PID 출력
    thread1 = threading.Thread(target=foo).start() #스레드 생성
    thread2 = threading.Thread(target=foo).start() #스레드 생성
    thread3 = threading.Thread(target=foo).start() #스레드 생성

위 코드는 스레드를 3개 생성해서 각 스레드는 foo()함수를 호출한다.

동일 프로세스에서 호출한 스레드이므로 출력하는 PID값은 동일하다.

하지만 프로세스 ID는 각 스레드가 다르므로 모두 다르다.

VS Code 출력이 이상해서 코랩으로 대신 실행하였다.


각기 다른 작업을 하는 멀티 스레드 생성하기

import threading
import os

def foo():
    print('This is foo')
    print('thread id', threading.get_native_id()) #프로세스 ID 출력
    
def bar():
    print('This is bar')
    print('thread id', threading.get_native_id()) #프로세스 ID 출력

def baz():
    print('This is baz')
    print('thread id', threading.get_native_id()) #프로세스 ID 출력

if __name__ == '__main__':
    thread1 = threading.Thread(target=foo).start() #스레드 생성
    thread2 = threading.Thread(target=bar).start() #스레드 생성
    thread3 = threading.Thread(target=baz).start() #스레드 생성

위 코드는 스레드1은 foo(), 스레드 2는 bar(), 스레드 3은 baz()함수를 호출한다.

각 함수는 스레드 ID를 호출한다.

VS Code 출력이 이상해서 코랩으로 대신 실행하였다.

 

'Python Category > 기타' 카테고리의 다른 글

[Python] 파이썬으로 멀티 프로세스 만들기  (0) 2023.06.28

2023.06.27 - [컴퓨터 구조 & 운영체제] - [운영체제] 스레드(Thread), 멀티 프로세스와 멀티 스레드

 

[운영체제] 스레드(Thread), 멀티 프로세스와 멀티 스레드

이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 스레드 이 글에서 다루는 내용은 소프트웨어적 스레드이

rebugs.tistory.com

위 글을 바탕으로 파이썬으로 멀티 프로세스를 구현


프로세스 PID 얻기

import os
print('hello os')
print('my pid is', os.getpid()) #프로세스의 PID를 얻어옴

위 코드는 프로세스의 PID를 얻어오는 코드이다.

PID는 22468이라고 알려준다.


자식 프로세스 생성하고 PID값 얻어오기

from multiprocessing import Process
import os
def foo():
    print('child process', os.getpid()) #자식 PID 출력
    print('my parent is', os.getppid()) #부모 PID 출력
   
if __name__ == '__main__':
    print('parent process', os.getpid()) #부모 PID 출력
    child = Process(target=foo).start()

위 코드는 부모 프로세스가 자식 프로세스를 생성하고, 자식 프로세스는 foo() 함수를 호출하여 자신의 PID와 부모의 PID(PPID)를 출력한다.

부모가 자식을 생성했으므로, 부모의 getpid() 리턴값과, 자식의 getppid() 리턴값은 같다.

부모 프로세스의 PID는 10940이고, 자식 프로세스의 PID는 16492라고 출력된다.


자식 프로세스 여러 개 생성하기

자식 프로세스는 여러 개 만들 수 있다.

from multiprocessing import Process
import os
def foo():
    print('child process', os.getpid()) #자식 PID 출력
   
if __name__ == '__main__':
    child1 = Process(target=foo).start() #자식1 생성
    child2 = Process(target=foo).start() #자식2 생성
    child3 = Process(target=foo).start() #자식3 생성


각기 다른 작업하는 자식 프로세스 생성하기

자식 프로세스는 각기 다른 작업을 수행할 수도 있다.

from multiprocessing import Process
import os
def foo():
    print('This is foo')
    print('process id', os.getpid()) #PID 출력
    
def bar():
    print('This is bar')
    print('process id', os.getpid()) #PID 출력

def baz():
    print('This is baz')
    print('process id', os.getpid()) #PID 출력
   
if __name__ == '__main__':
    child1 = Process(target=foo).start()
    child2 = Process(target=bar).start()
    child3 = Process(target=baz).start()

자식 1은 foo(), 자식 2는 bar(),  자식 3은 baz()함수를 호출한다.

각 함수는 PID를 출력한다.

'Python Category > 기타' 카테고리의 다른 글

[Python] 파이썬으로 멀티 스레드 만들기  (0) 2023.06.29

파이썬에는 많은 내장 함수가 있다.

모든 내장 함수를 다루고 싶지만, 모든 내장 함수를 정리하는 것은 시간도 많이 필요하고 비 효율적이다.

그래서 사용 빈도가 높은 함수들만 정리하겠다.

 

숫자 관련 내장 함수

int() 함수

문자열 형태의 숫자나 소수점이 있는 숫자 등을 int 형태로 리턴함

int(1.23) #1

int(123) #123

int("123") #문자열도 숫자로 바꿀 수 있음

int(True) #1 0은 False, 1은 True(0 이외의 숫자는 모두 True임)

float() 함수

문자열 형태의 숫자나 소수점이 없는 숫자 등을 float형태로 리턴함

float("123") #123.0

float(10) #10.0

float(True) #1.0

float(1.123) #1.123

 

문자열 관련 내장 함수

str() 함수

str함수는 int, float, bool 타입을 str(string) 형태로 리턴함

str(100) #"100"

str(1.0) #"1.0"

str(True) #"True"

 

논리 관련 내장 함수

bool 함수는 float, int, str 타입을 bool 형태로 리턴함

True
bool(1) # True

bool(123.123) #True -> 0이 외의 숫자는 모두 True임

bool("False") #True

bool("0") #True / 문자열은 숫자가 아니기에​
False
bool(0) #False

bool(0.0) #False

bool('') #False / 빈 문자열은 False

bool("") #False / 빈 문자열은 False​

 

진수 변환 내장 함수

  • hex(x) : 정수 x를 16진수로 변환하여 리턴
  • oct(x) : 정수 x를 8진수로 변환하여 리턴
  • bin(x) : 정수 x를 2진수로 변환하여 리턴

진수와 진수 변환에 대해 모른다면 제 블로그에 정리해 놓은 자료가 있습니다.

2022.11.29 - [기타/Digital Logic] - [Digital Logic] 수의 체계

 

[Digital Logic] 수의 체계

[진수] [10진수] 기수가 10인 수 0, 1, 2 ,3, 4, 5, 6 ,7, 8, 9 -> 10개 수로 표현 [2진수] 기수가 2인 수 0, 1 두개의 수로 표현 [8진수와 16진수] [8진수] 0~7까지 8개의 수로 표현 2진수 3자리는 8진수 1자리 2진수

rebugs.tistory.com


hex() 함수

정수 (int 타입)를 입력받아 16진수로 변환하여 리턴함

hex(0) #"0x0"

hex(1) #"0x1"

hex(10) #"0xa" #10은 16진수로 a임

hex(123) #"0x7b"

위의 예제에서 0x가 붙어서 나오는데 0은 진수 변환을 했다는 뜻이고, x는 16진수를 뜻합니다.

 

oct() 함수

정수를 입력 받아 8진수로 변환하여 리턴함

oct(0) #'0o0'

oct(1) #'0o1'

oct(10) #'0o12'

oct(123) #'0o173'

위의 예제에서 0o가 붙어서 나오는데 0은 진수 변환을 했다는 뜻이고, o는 8진수를 뜻합니다.

 

bin() 함수

정수를 입력받아 2진수로 변환하여 리턴

bin(0) #'0b0'

bin(1) #'0b1'

bin(10) #'0b1010'

bin(123) #'0b1111011'

위의 예제에서 0b가 붙어서 나오는데 0은 진수 변환을 했다는 뜻이고, b는 2진수를 뜻합니다.

 

컬렉션 타입 & iterable 자료형

컬렉션 타입의 자료형에는 순차 자료형과 비순차 자료형이 있음

 

순차(sequence) 자료형

  • 문자열, 수치 등을 관리하기 위한 자료형으로 순서 개념이 있음
  • 배열 형식의 구조로 인덱스를 이용하여 데이터에 접근
  • 리스트, 튜플, 문자열 등이 있음

비순차(non-sequence) 자료형

  • 문자열 수치 등을 관리하기 위한 자료형으로 순서 개념이 없음
  • 인덱스를 이용한 접근 불가
  • 딕셔너리, 집합(set)등이 있음

반복 가능한 객체(iterable)

  • 객체의 속한 요소(member)를 하나씩 찰로 반환하는 객체
  • 대표적으로 list, dict, set, str, bytes, tuple, range

 

컬렉션 타입 & iterable 내장 함수

list() 함수

iterable 객체를 받아 리스트로 변환한 후 리턴

list((1, 2, 3)) #[1, 2, 3]

list((1, 2, 3, 2, 1)) #[1, 2, 3, 2, 1]

 

set() 함수

iterable 객체를 받아 set으로 변환한 후 리턴

set((1, 2, 3)) #{1, 2, 3}

set((1, 2, 3, 2, 1)) #{1, 2, 3} -> set은 중복을 제거함

 

tuple()함수

iterable을 입력받아 튜플 형태로 변경하여 리턴

tuple("abc") #('a', 'b', 'c’)

tuple([1, 2, 3]) #(1, 2, 3) 

tuple((1, 2, 3)) #(1, 2, 3)

 

range()함수

range(start, stop, step)에서 start부터 stop-1까지 step만큼 숫자를 더해가며 연속된 숫자를 생성한 후 이터러블로 만들어 리턴 -> 그냥 예제 보는 게 쉬움

range(10) #0에서 부터 9까지 1을 더함

range(0, 10) #위와 똑같은 뜻

list(range(4, 7)) #[4, 5, 6]

list(range(5, 10)) #[5, 6, 7, 8, 9]

list(range(1, 10, 2)) #[1, 3, 5, 7, 9] 

list(range(0, -10, -1)) #[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

 

dict() 함수

매개변수 안에 있는 자료를 딕셔너리 형태로 바꾸고 리턴

dict(one=1, two=2, three=3) #{'one': 1, 'three': 3, 'two': 2}

dict([('two', 2), ('one', 1), ('three', 3)]) #{'one': 1, 'three': 3, 'two': 2}

map() 함수

map(f, iterable)은 함수와 iterable 객체를 입력받은 후 iterable의 각 요소를 입력값으로 f가 수행한 결과를 묶어서 반환

def two_times(x):
return x*2 
list(map(two_times, [1, 2, 3, 4])) #[2, 4, 6 ,8]

len() 함수

입력받은 자료형의 길이 리턴

len("abc") #3

len([1, 2, 3]) #3

len({1, 2, 3}) #3

 

수학 관련 내장 함수

  • abs(number): 숫자 number의 절댓값을 반환
  • pow(number, y): 숫자 number에 y 제곱한 결과를 반환
  • round(number , ndigits): 숫자 number를 ndigits 자리에서 반올림한 후 반환
  • max(iterable): iterable 객체에서 최댓값을 반환
  • min(iterable): iterable 객체에서 최댓값을 반환
  • sum(iterable): iterable 객체의 모든 요소의 합을 반환

abs() 함수

정수, 실수 등의 숫자를 절대값을 변환하여 리턴

abs(3) #3

abs(-3) #3

abs(-1.2) #1.2

 

pow() 함수

pow(x, y)에서 x에 y를 제곱한 결과를 반환

pow(2, 4) #16 

pow(3, 3) #27

pow(5, 2) #25

 

round() 함수

round(x , y)에서 숫자 x를 소수점 y 자리까지 반올림한 후 반환

round(1.6) #2 

round(1.2) #1

round(1.234, 2) #1.23

round(1.678, 1) #1.7

 

max(), min() 함수

iterable 객체를 입력받아 최댓값(최솟값)을 반환

max([1, 2, 3]) #3 

max("python") #'y' -> 알파벳도 순위가 있다 a가 제일 낮고, z가 제일 높다

max({1:3, 2:'a’}) #2 오직 key 값만 비교해서 제일 큰 값을 리턴함
min([1, 2, 3]) #1

min("python") 'h'

min({1:3, 2:'a’}) #1 -> 오직 key값만 비교

 

sum()함수

iterable 객체를 입력받아 모든 요소의 합을 반환

sum([1,2,3]) #6 

sum((4,5,6)) #15

sum({1:3, 2:'a’}) #3 -> key값만 더함

sum({1, 2}) #3

 

정렬 관련 내장 함수

  • reversed(seq): seq의 요소 순서를 역순으로 수정한 iterator 객체로 반환
  • sorted(iterable): iterable 객체를 정렬한 후 그 결과를 리스트로 반환
  • filter(f, iterable): iterable 객체의 각 요소에 f 함수를 반영한 후 True가 반환되는 요소만을 iterator 객체로 반환

reversed() 함수

sequence 객체를 입력받아 객체의 요소 순서를 역순으로 수정한 후 iterable 객체로 반환

reversed(["a", "b", "c", "d"]) #<list_reverseiterator at 0x7f278dc2cd50>

#<list_reverseiterator at 0x7f278dc2cd50> -> 이터러블 객체 자체임
#이터러블 객체 자체를 다루긴 힘드니 다른 함수를 이용하여 접근해보자

list(reversed(["a", "b", "c", "d"])) #['d', 'c', 'b', 'a']

 

sorted() 함수

iterable 객체를 입력받아 정렬한 후 결과를 리스트로 반환함

sorted([3, 1, 2]) #[1, 2, 3]

sorted(['a', 'c', 'b’]) #['a', 'b', 'c’] 

sorted("zero") #['e', 'o', 'r', 'z’] 

sorted((3, 2, 1)) #[1, 2, 3]

 

filter() 함수

함수(f), iterable 객체를 입력받아 각 요소에 f 함수를 반영한 후 True를 만족하는 요소만을 모아 iterable로 반환

def positive(x):
return x > 0
print(list(filter(positive, [1, -3, 2, 0, -5, 6]))) #[1,2,6]

'Python Category > Python' 카테고리의 다른 글

[Python] 파이썬 자료형  (0) 2023.08.24
[Python] 파이썬 기본적인 용어  (0) 2023.08.23
[Python] 예외 처리  (2) 2022.12.09
[Python] 파일 입출력  (1) 2022.12.08
[Python] 모듈  (0) 2022.12.08

오류의 종류

  • 프로그램 실행 전에 발생하는 오류 : 문법 오류
  • 프로그램 실행 중에 발생하는 오류 : 런타임 오류(예외)

예외 처리는 런타임 오류를 최대한 줄이는 것이다.

 

try-except

try-except의 기본 형태

try:
    #예외가 일어날 것 같은 코드 입력
except:
    #예외가 일어나면 할 작업 입력
  • try블록에는 예외가 일어날 것 같은 코드를 입력한다.
  • try블록에서 오류가 일어난다면 except블록에 입력된 명령이 실행된다.
  • try블록에서 오류가 일어나지 않는다면 except블록의 명령이 실행되지 않는다.
intnum = input("정수를 입력하세요 : ")
try:
    print(f"당신이 입력한 값은 {int(intnum)}입니다")
except:
    print("잘못된 값을 입력했습니다.")

위의 예제에서 사용자로부터 입력을 받고 그 값이 정수면 프로그래머가 의도한 대로 흐름이 이어지는 것이고, 실수나, 문자열 등을 입력하면 의도한 대로 흐름이 이어지는 것이 아니다. 그래서 except문으로 의도한 대로 가게끔 하면 된다.

 

try-except-else

try:
    #오류가 일어날수도 있는 작업 입력
except:
    #오류가 일어났을 때의 작업 입력
else:
    #오류가 일어나지 않았을 때 작업 입력

try-except-else구문은 예외가 발생할 가능성이 있는 코드만 try 구문 내부에 넣고 나머지를 모두 else구문으로 빼는 경우가 많다.

intnum = input("정수를 입력하세요 : ")
try:
    intnum = int(intnum)
except:
    print("잘못된 값을 입력했습니다.")
else:
    print(f"당신이 입력한 값은 {int(intnum)}입니다")

 

finally문

  • finally 구문은 예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문이다.
  • 예외가 발생하든 안 하든 무조건 실행된다.
  • 함수 내부에서 try-finally문을 사용하고 있다면 return을 만나도 finally문은 실행된다.

 

intnum = input("정수를 입력하세요 : ")
try:
    intnum = int(intnum)
    print(f"당신이 입력한 값은 {int(intnum)}입니다")
except:
    print("잘못된 값을 입력했습니다.")
finally:
    print("finally 구문 실행")

위의 예제에서 사용자로부터 정수를 받아도 finally구문은 실행되고, 정수 이외의 값을 받아도 finally 구문은 실행된다.

 

def func(intnum):
    try:
        intnum = int(intnum)
        print(f"당신이 입력한 값은 {int(intnum)}입니다")
        return
    except:
        print("잘못된 값을 입력했습니다.")
        return
    finally:
        print("finally 구문 실행")
intnum = input("정수를 입력하세요 : ")
func(intnum)

위의 예제에서 함수 매개변수로 정수를 넘기든, 정수 외에 다른 값을 넘기든 finally문은 무조건 실행된다.

(return을 만나도 finally문은 실행됨)

 

예외 처리 조합

  • try-except
  • try-except-else
  • try-except-finally
  • try-except-else-finally
  • try-finally

이 외의 조합은 실행했을 때 문법 오류가 발생한다.

 

예외 구분하기

except 뒤에 예외의 종류를 입력해서 예외를 구분할 수 있음

try:
    #예외가 발생할 가능성이 있는 구문
except:예외의 종류A
    #예외 A가 발생했을 떄 실행할 구문
except:예외의 종류B
    #예외 B가 발생했을 떄 실행할 구문
except:예외의 종류C
    #예외 C가 발생했을 떄 실행할 구문

예를 들면

list_number = [52, 273, 32, 72, 100]
try:
    number_input = int(input("정수 입력> "))
    print(f"{number_input}번째 요소: {list_number[number_input]}")
except ValueError:
    # ValueError가 발생하는 경우
    print("정수를 입력하세요")
except IndexError:
    # IndexError가 발생하는 경우
    print("리스트의 인덱스를 벗어났음")

이렇게 예외의 종류에 따라 다르게 대응할 수 있다.

 

예외 구분이 안될 때

위에서 예외를 구분했는데, 예외의 구분은 예외의 종류에 따라 다르게 대응하기 위함이다

하지만 예외의 종류를 알 수 없다면 어떻게 해야할까?

최대한 예외를 구분해서 사용자에게 알렸지만, 예외를 구분할 수 없다면 사용자에게 무슨 예외가 일어났는지 알려달라고 요청하는 방법밖에 없다.

우리가 어떤 프로그램을 쓰다가 오류가 나면 오류 내용을 서술해서 전송해달라고 요청하는 프로그램을 봤을 것이다.

이럴 때 사용하는 것이 모든 예외의 어머니인 Exception을 사용하는 것이다.

list_number = [52, 273, 32, 72, 100]
try:
    number_input = int(input("정수 입력> "))
    print(f"{number_input}번째 요소: {list_number[number_input]}")
    ㅇㅇ.ㅁㄴㅇㅁㄴㅇ()#일부러 예외를 발생시킴
except ValueError:
    # ValueError가 발생하는 경우
    print("정수를 입력하세요")
except IndexError:
    # IndexError가 발생하는 경우
    print("리스트의 인덱스를 벗어났음")
except Exception:
    print("알수없는 오류가 일어났습니다. 오류 내용을 저희에게 알려주세요.")

이렇게 예외 처리를 하면 사용자에게 피드백을 받을 수 있다.

'Python Category > Python' 카테고리의 다른 글

[Python] 파이썬 기본적인 용어  (0) 2023.08.23
[Python] 내장 함수  (0) 2022.12.09
[Python] 파일 입출력  (1) 2022.12.08
[Python] 모듈  (0) 2022.12.08
[Python] 문자열  (1) 2022.12.08