파이썬 백엔드 과정 2일차
파이썬 기초
1. 프로그래밍이란?
- 컴퓨터에게 일을 시키기 위한 명령어 모음 (주어진 데이터를 우리가 원하는 형태로 가공, 처리하는 과정을 정리)
- 프로그래밍의 단계 : 데이터 입력 > 데이터 처리 > 데이터 출력
* 데이터를 입력 하려면 데이터를 담아둘 통이 필요한데 이때 사용하는 통을 변수, 상수 등의 이름으로 부른다.
2. 값(Value)의 처리
- 프로그래밍 언어 특히 파이썬은 모든 것을 값으로 처리함
- 값을 사용 및 재활용하기 위해서는 값을 변수에 저장해야 함
2.1 리터럴(Literal)
- 리터럴 : 프로그래밍 언어로 작성된 코드에서 값을 대표하는 용어
- 파이썬에서는 모든 것을 값으로 처리하며, 이런 값은 정수, 부동 소수점 숫자, 문자열, 불린, 클래스 등의 객체로 평가 및 관리하고 이를 통해 결과를 출력하게 된다.
2.2 표현식(Expression)
- 프로그래밍 언어가 해석하는 하나 이상의 명시적인 값, 상수, 변수, 연산자들의 조합
- 함수도 실행하면 하나의 값이 되므로 함수를 조합하는 것도 표현식으로 인식함
- 여러 개의 값을 하나로 묶어서 처리하기 위한 방법
- 리터럴은 단순히 하나의 값을 처리한다.
- 표현식을 평가해서 실행할 때
- 우선순위 및 연관규칙에 따라 해석하고 실행됨
- 평가 결과는 하나의 값인 리터럴로 표현된다.
- 표현식을 표시하기 위해서는 아래와 같은 요소들이 필요하다.
- 피연산자(Operand) : 일반적인 리터럴 값
- 연산자(Operator) : 피연산자를 평가하거나 계산하기 위한 요소
- 단항 연산자(Unary) : 하나의 연산자와 피연산자를 묶어서 처리하는 연산자
- 이항 연산자(Binary) : 하나의 연산자와 두 개의 피연산자를 묶어서 처리하는 연산자
- 여러 개의 표현식은 괄호로 묶어서 처리한다.
- 표현식의 처리 순서
- 좌측에서 우측으로 처리하며, 괄호를 만나면 최우선으로 처리한다.
2.3 조건식(Condition Expression)
- 표현식 중에서 특정 조건문 등에 제한적으로 사용되는 것
- 주로 if문이나 while문과 같은 특정 구문에서 사용, 조건이 평가되면 참/거짓의 결과로 처리된다.
- 파이썬에서는 다른 프로그래밍 언어와 달리 if구문과 같은 일반적인 조건문외에도 간결한 조건식을 활용하는 경우가 많다.
bool("")
False
False
- if의 조건식("")을 평가하면 False가 되므로 실행결과는 False임
3. 이름(Name)의 처리
- 파이썬 내의 객체들이 값으로 처리된 후, 그 값들을 재사용하기 위해 이름을 사용
- 프로그램의 작성은
- 값을 저장하고
- 필요한 경우 저장된 값을 읽어와서 계산한 후
- 다시 저장해서 처리한다는 것
- 이런 값들의 변화를 저장, 관리하는 기준이 필요함( 파이썬에서는 네임스페이스를 만들어서 관리)
* 네임스페이스(Namespace)
- 모듈 단위로 이름을 관리할 수 있는 영역, 이름이 바인딩된 상태의 영역을 나타냄
- 파이썬에서 프로그램을 작성하는 기준이 모듈이므로 모듈 단위이다.
-지역(Local)/전역(Global)/내장(Built-In) 네임스페이스의 3가지로 구성됨
- 지역 네임스페이스(Local Namespace):함수 내부에서 바인딩된 이름
- 전역 네임스페이스(Global Namespace):코드블록이 속한 모듈의 최상위 네임스페이스. 모듈 전체에서 사용가능
- 내장 네임스페이스(Built-in Namespace): 파이썬 인터프리터가 시작할 때 생성되어 실행이 중단되기 전까지 유지되며 내장 모듈의 이름을 포함함
- 네임스페이스는 독립적으로 생성되고 유지되며, 서로 다른 네임스페이스에서 동일한 변수나 함수 이름을 가질 수 있음
- 네임스페이스와 유효범위를 이해하면 파이썬 프로그래밍에서 변수와 함수의 사용을 더욱 효율적으로 관리할 수 있음
- 네임스페이스로 사용하는 이름은 프로그램 전체에서 유일해야 한다
- 이름을 구별해야 하므로 식별자(identifier)라는 개념을 사용함
- 각 이름을 구별할 수 있도록 프로그램 내에서 식별자 별로 의미를 부여해서 지정함
- 이름(식별자)으로 지정하는 요소
-변수(Variables), 함수(Function), 클래스(Class), 모듈(Module), 패키지(Package) 등
- 변수를 제외하면 모두 객체로 사용됨 → 값으로 관리됨 (사실 변수도 값으로 관리 되지만, 안에 있는 내용이 계속 바뀐다.)
- 파이썬은 변수, 함수, 클래스 등에 대한 이름을 구별하지 않음 → 명명규칙을 명확히 해서 각각을 이름으로 식별할 수 있어야 함
3.1 예약어(Keyword)
3.1.1 Keyword 모듈을 이용한 예약어 확인
- 예약어(Keyword): 개발자가 직접 정의할 수 없고 파이썬 내부 문법규칙에서만 사용할 수 있도록 정의된 것이다.
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
3.1.2 Pretty print(pprint)
help를 통해서 pprint를 살펴보면 아래와 같다.
Help on function pprint in module pprint: pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False, sort_dicts=True, underscore_numbers=False) Pretty-print a Python object to a stream [default is sys.stdout].
** Keyword로 변수를 정의할 경우 문법 오류로 처리한다. **
- SyntaxError: invalid syntax 오류 발생
3.1.3 모듈 내 식별자 이름이 중복될 경우
- 동일한 모듈 내에서 동일한 이름으로 변수, 함수를 지정하면 동일한 이름으로 처리, 사용되므로 명확한 에러가 발생하지 않음
- 이 이름을 호출해서 사용할 때 실행상의 예외(Run-time Error)나 다른 처리 결과가 발생함
3.2 명명 규칙(Name Convention)
- 변수, 함수, 클래스, 모듈, 패키지 등 다양한 이름에 대한 명명 규칙을 처리하는 규약을 제공하고 관행적으로 이를 따라 이름을 정의하면 이름 간의 충돌을 예방할 수 있다.
3.2.1 파이썬 권장 명명 규칙: 모듈, 패키지
모듈
- 모듈 이름은 짧아야 함
- 전부 소문자로 작성할 것을 권장함
- 가독성을 위해서 밑줄(_, Under Bar)를 사용할 수 있음
패키지
- 패키지 이름은 짧아야 함
- 전부 소문자로 작성할 것을 권장함
- 밑줄 사용을 권장하지 않음
3.2.2 파이썬 권장 명명 규칙: 클래스
- 클래스의 이름은 Capitalized Words 형식을 따르며 카멜 표기법(Camel Case)를 주로 권장함
Capitalized Words 형식
- 모든 단어의 첫 글자를 대문자로 표기하고 나머지 글자는 소문자로 표기함
- 띄어쓰기 없이 단어를 이어붙임
- 예: NewPost
Camel Case
- 모든 단어의 첫 글자를 대문자로 표기하고 나머지 글자는 소문자로 표기하되, 첫 번째 단어는 소문자로 시작함
- 띄어쓰기 없이 단어를 이어붙임
- 예: newPost
Snake 표기법(= Under Score / Under Bar 표기법)
- 모든 글자를 소문자료 표기하고 단어 사이에 밑줄 문자 (_)를 사용하여 이름을 작성함
- 주로 변수명이나 함수명을 작성할 때 사용되며, 가독성을 높이기 위해 단어를 구분하는데 유용함
- 예: new_post
- 클래스의 이름을 위한 표기법으로는 권장하지 않음
Exception은 예외처리할때 사용하는 클래스
- 다른 클래스와 동일하게 Capitalized Words 형식을 적용하되, 맨 뒤는 "Error"로 끝내는 것을 권장함
3.2.3 파이썬 권장 명명 규칙: 상수, 변수, 함수, 메서드
- 변수, 함수와 메서드의 이름은 원칙적으로 소문자로 표기함
- 가독성을 위해 밑줄 문자 단어(스네이크 표기법)로 쓰는 것을 권장함
- 보호 속성이 요구될 때(클래스의 속성은 파이썬에서 제공되지 않음)는 맨 앞에 '_'(Leading Underscore)를 추가적으로 붙임(파이썬의 클래스는 c++같은데의 클래스와 좀 다름)
- 키워드와 동일한 변수명일 때는 맨 뒤에 '_'(Leading Underscore)를 추가적으로 붙임
- 비공개 속성일 때는 맨 앞에 '__'(Double Underscore)를 붙임
- 스페셜 속성일 때는 앞과 뒤에 '__'(Double Underscore)를 붙임
- 모듈에서 정의되는 상수는 모두 대문자로 작성함(All Capitalized Words 형식)
3.3 변수(Variables)
파이썬에서의 변수
- 선언 시에 특정한 자료형을 배정하지 않음
- 단순히 값을 보관하는 장소가 아니라 값들의 임시 저장 장소로만 사용함
프로그램 내에서
- 변수는 이름으로 구별
- 변수에는 값인 객체가 저장된 메모리 주소인 레퍼런스를 보관함
- 레퍼런스만 저장하므로 자료형의 종류과 관계없이 쉽게 관리가 가능함
변수의 정의
- 변수에 이름을 부여할 때 처음 글자는 반드시 문자(알파벳, 한글, 한자도 포함)와 밑줄 문자가 위치함
- 두 번째부터는 문자, 숫자, 밑줄 문자를 조합해서 구성할 수 있음
- 별도의 초기화 문법이 제공되지 않으므로 변수가 정의되면 이 변수에 반드시 어떠한 값이라도 할당해야 함
** 이제는 변수로 한글도 포함은 하고 있지만, 개발 할때는 영어를 사용하는 것을 추천함 **
4. 주석
한줄 주석 # - # 이용
여러줄 주석 ''' ~~ ''' - 따옴표 3개 이용
별첨. 언더바(_)
- 언더바는 인터프리터 내에서 마지막으로 연산되어 출력되는 값을 의미한다.
2. 무시하고자 하는 값을 처리할 때 사용한다
- 튜플 등 데이터를 언패킹할 때 특정 값을 버리는 용도로 사용
- '*(Asterisk)'을 이용하여 여러 개의 값을 동시에 무시할 수 있다.
1 2 3 5
1 5
[(1, 2), (3, 4)]
2
4
3. 숫자 리터럴의 자릿수를 구분할 때 사용한다.
- 이때 _는 메모리에 입력되지 않는다. (숫자만 입력되어짐)
(1, 0, 0, 0)
1000000000
4. 네이밍에 활용한다.
4.1 앞에 언더바가 하나 붙는 경우(ex: _new) >> 일반적으로 권장함
- 모듈 내에서만 해당 변수 또는 함수를 사용하겠다는 의미
- 완전한 private은 아니기 때문에 외부에서 접근하는데 문제는 없다. 단지 그런 의도를 전달하고자 할 뿐인 것이다.
- 외부 모듈에서 해당 모듈을 *를 이용하여 전체 임포트를 할 경우에는 앞에 _가 붙는 변수/함수는 임포트 하지않는다
4.2 뒤에 언더바가 하나 붙는 경우(ex: new_)
- 파이썬 키워드와 변수/함수명의 충돌을 피하기 위해 사용
- 예: list, print 같은 키워드를 변수/함수명으로 사용하고 싶을때 이용함
4.3 앞에 underbar가 두 개 붙은 경우(ex: __variable)
- 네이밍 룰보다는 문법적인 요소에 가까움
- 네임 맹글링(Name Mangling)을 위해 사용함
- 네임 맹글링을 당한 변수/함수는 본연의 이름으로는 접근할 수 없게 됨
- 맹글링을 적용한 변수/함수는 _ 클래스명__ 형태로 이름이 변경됨
- 맹글링을 사용하는 경우
- 클래스의 속성값을 외부에서 접근하기 힘들게 할 때(private 화)
- 하위 클래스가 상위 클래스의 속성을 오버라이딩 하는 것을 막을 때
4.4 앞뒤로 underbar가 두 개씩 붙은 경우(ex: __ variable__)
- 파이썬이 특별히 정의한 변수나 함수에 사용되는 네이밍 룰 (예약어와 유사한 느낌)
- 직접 함수를 만들때는 사용할 수 없고 대부분 오버라이딩 할 때 사용함
- 이 네이밍 룰이 적용된 함수는 매직 메소드(Magic Method) 또는 던더 메소드(Dunder Method, Double Underscore Method)라고 부름
- 대표적인 예로 __ init__ 함수가 있음
홍길동
male
print(man.__age) # AttributeError 발생
AttributeError: 'TestClass' object has no attribute '__age'
print(dir(man))
- 맹글링 (1)
- 클래스의 속성값을 외부에서 접근하기 힘들게 할 때(private 화)
홍길동 21 도술쓰기
- 맹글링 (2)
- 하위 클래스가 상위 클래스의 속성을 오버라이딩 하는 것을 막을 때
한석봉 23 글쓰기
5. 자료형(Data Type)
- 파이썬에서는 데이터의 형태(자료형)을 직접 선언하지 않아도 됨(선언만 안하는거지 자료형은 존재하는 것임)
위 내용을 print를 통해 출력하면 아래와 같다.
1
-3
0.5
(4+5j)
Hi
안녕
- type()을 이용해서 자료형 확인
1 : <class 'int'>
-3 : <class 'int'>
0.5 : <class 'float'>
(4+5j) : <class 'complex'>
Hi : <class 'str'>
안녕 : <class 'str'>
- 변수명은 가능하면 쉽게 알아볼 수 있는 단어를 사용하는 것이 좋다.
- 변수의 이름은 기억하기 쉽고 구분하기 쉽게 작성하면 된다.
- 정해진 규칙은 없지만 언어에 따라, 또는 팀에 따라 권장하는 형태는 존재한다. (협업을 위해서는 규칙을 따르는것이 좋다)
정수부
10 <class 'int'>
2 <class 'int'>
8 <class 'int'>
16 <class 'int'>
1234567890123456789 <class 'int'>
실수부
1.0 <class 'float'>
3.14 <class 'float'>
1560.0 <class 'float'>
-7e-05 <class 'float'>
복소수
(1+7j)
<class 'complex'>
1.0
7.0
(2+3j)
연산
a와 b를 더한 값은 3 입니다
불리언
True
False
비교 연산자
False
True
False
True
True
논리연산자
and - 둘다 만족하는가
or - 둘 중 하나만 만족해도됨
not - 반대값 출력
False
True
True
False
False
True
& 연산자 (비트 AND 연산자)
두 비트가 모두 1일 때 결과가 1이 되는 연산자입니다.
- a & b
- a = 5 (이진수: 0101)
- b = 3 (이진수: 0011)
- a & b = 1 (이진수: 0001)
| 연산자 (비트 OR 연산자)
두 비트 중 하나라도 1이면 결과가 1이 되는 연산자입니다.
- a | b
- a = 5 (이진수: 0101)
- b = 3 (이진수: 0011)
- a | b = 7 (이진수: 0111)
^ 연산자 (비트 XOR 연산자)
두 비트가 서로 다를 때 결과가 1이 되는 연산자입니다.
- a ^ b
- a = 5 (이진수: 0101)
- b = 3 (이진수: 0011)
- a ^ b = 6 (이진수: 0110)
>> 연산자 (비트 우측 시프트 연산자)
비트를 오른쪽으로 이동시키는 연산자입니다. 오른쪽으로 이동하면 비트가 버려지고 왼쪽은 0으로 채워집니다.
- a >> n
- a = 8 (이진수: 1000)
- n = 2
- a >> 2 = 2 (이진수: 0010)
<< 연산자 (비트 좌측 시프트 연산자)
비트를 왼쪽으로 이동시키는 연산자입니다. 왼쪽으로 이동하면 비트가 버려지고 오른쪽은 0으로 채워집니다.
- a << n
- a = 3 (이진수: 0011)
- n = 2
- a << 2 = 12 (이진수: 1100)
0x60
0x63
0x3
0x30
0x184
변수들이 하나가 아니라 여러 개가 모여서 구성된 데이터의 형태
- 리스트, 튜플, 딕셔너리
리스트(List)
- 리스트는 대부분의 프로그래밍 언어에서 배열, Array라고 표현하는 것과 비슷함.
- 배열은 동일한 형태(실수끼리, 문자열끼리... 등)의 데이터 여러 개가 순서대로 모여 있는 것을 말하지만 파이썬의 List 는 꼭 동일한 형태가 아니어도 관계없다.
- 예를 들면 Java와 같은 언어에서의 Collection 이란 것과 비슷하다고 볼 수 있다.
- 리스트의 데이터는 대괄호 [ ]로 둘러싸서 표시하며 내부의 데이터는 콤마( , )로 구분한다.
- 리스트 속에 또 다른 리스트들이 들어갈 수 있다.
튜플(Tuple)
- 튜플은 리스트와 비슷한데 리스트는 안에 들어있는 값을 바꿀 수 있는 반면에 튜플은 바꿀 수 없다는 차이가 있다.
- 튜플의 데이터는 괄호 ( ) 로 둘러싸서 표시하며 안에 있는 데이터는 콤마( , )로 구분한다.
딕셔너리(Dictionary)
- 딕셔너리의 데이터는 중괄호 { } 로 둘러싸서 표시하며 내부의 데이터는 콤마( , )로 구분한다.
- 딕셔너리의 데이터는 "키:값"의 형태를 가진 한 쌍의 요소로 구성되어 있다.
- 리스트, 튜플과 달리 딕셔너리는 데이터에 인덱스가 지정되어있지 않다.
다음 포스팅에서 시퀀스 자료형에 대해서 자세하게 다룰 예정입니다!
'PYTHON-BACK' 카테고리의 다른 글
#파이썬 기초 5일차_1 (1) | 2024.07.03 |
---|---|
#파이썬 기초 4일차_2 (1) | 2024.07.02 |
#파이썬 기초 4일차_1 (0) | 2024.07.02 |
#파이썬 기초 3일차 (1) | 2024.07.01 |
#파이썬 기초 1일차 (0) | 2024.06.27 |