Try 와 Except

try : 
    a = int(input("First number : "))
    b = int(input("Second number : "))
    c = a / b
    print("Division result :", c)
except : 
    print("Error")

try는 코드를 일단 실행을 하는 것이고, except는 try 블럭 안에 있는 코드를 실행 도중 예외(에러)가 발생하게 되면 실행된다.

위 코드의 경우, 0으로 나누면 except의 print("Error") 코드가 실행된다.

 

 

 

 

Except 적용 시점

try : 
    a = int(input("First number : "))
    print(a)
    b = int(input("Second number : "))
    print(b)
    c = a / b
    print("Division result :", c)
except : 
    print("Error")


## 실행

First number : 3
3
Second number : 0
0
Error

Except의 적용 시점은 당연한 이야기이지만 error가 발생한 시점에서 실행되게 된다.

아까 코드에서 print 함수를 넣어 확인해보면 명확히 알 수 있는데, Python은 기본적으로 Interpreter 언어이기 때문에 try문을 사용했다고 해서

오류가 발생하지 않는 경우에만 실행되는 것이 아니다.

 

 

 

 

Except 옵션

try : 
    c = 3 / 0
    print("Division result :", c)
except error :
    print("Error")


--> File "test.py", line 4, in <module>
    except error :
NameError: name 'error' is not defined

 -----------------------

try : 
    a = int(input("First number : "))
    b = int(input("Second number : "))
    c = a / b
    print("Division result :", c)
except ZeroDivisionError :
    print("Error")
    
    
--> Error


 -----------------------
 
try : 
    c = 3 / 0
    print("Division result :", c)
except ZeroDivisionError as e :
    print(e)
    
    
--> division by zero

Except 는 " except 발생 오류 as 오류 메시지 "의 형식을 가지고 있으며, 발생 오류만 사용하는 것도 가능하다.

발생 오류를 지정하면 지정된 발생 오류 발생시에만 해당 except문이 실행된다.

위의 코드에서는 기보넞그올 정의되어 있는 ZeroDivisionError를 이용하였다.

발생 오류와 오류 메시지는 예외처리를 더 빠르고 편리하고 쉽게 보여주기 위해서 사용한다. 

 

 

except 문에서 옵션으로 에러는 복수 지정이 가능하여

 

except error1 as e : 
	print(e)
except error2 as e :
    print(e)

형식으로 사용이 가능하며,

아래와 같이 복수의 오류를 한번에 처리하는 것 또한 가능하다.

except (error1, error2) as e : 
	print(e)

 

 

 

 

Finally

try : 
    c = 3 / 0
    print("Division result :", c)
except ZeroDivisionError as e :
    print(e)
finally : 
    print("Program end")
    
    
--> division by zero
Program end

finally 옵션은 try문에서의 에러 발생여부와 관계없이 마지막에 실행되는 코드이다.

이는 file 등을 조작할 때 열어놓은 파일을 닫기 위해서 사용하는 등 오류와 관계없이 처리해야 하는 코드에 적용한다.

 

 

 

 

 

Pass

try : 
    c = 3 / 0
    print("Division result :", c)
except ZeroDivisionError :
    pass

예외처리를 할 때, 오류문구가 나오지않고 지나가게 하려면 "pass"를 통하여 스킵하면 된다.

 

 

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

'컴퓨터 > Python' 카테고리의 다른 글

#12 : Python의 표준 출력  (0) 2020.01.23
# 11 : Python의 패키지  (0) 2020.01.13
#10 : Python의 모듈  (0) 2020.01.13
#09 : Python의 기타 데이터 형태  (0) 2019.12.30
#08 : Python 리스트를 이용한 행렬  (0) 2019.12.27

Print 함수

pinrt('Artyrie')
>>> Artyrie
# print 함수는 이미 알고있는대로 값을 출력한다.

print 함수는 여러가지 인자를 가질 수 있는데,

python의 help 함수를 통해 자세히 확인할 수 있다.

help(print)
>>>
print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

print함수의 세부 정보를 확인할 수 있고, 

예시는 다음과 같다.

print('a', 3)
>>> a 3
#value는 출력할 값이고, print(value1,  ..., valueN) 은 value들을 띄어쓰기 ' ' 로 합쳐서 출력한다.

 ----------------------

print('a', 3, sep='')
>>> a3
#sep는 이 value들을 합칠 때 구분자를 지정해주는 것이다. 기본 값은 ' ' 띄어쓰기 이다.

 ----------------------

print('a', 3, end='end')
>>> a 3end
#end는 value들을 모두 출력하고 마지막에 출력할 값을 지정하는 것으로, 기본 값은 '\n' 줄바꿈 문자이다.

 ----------------------
 
file = open('test.txt', 'w')
print("Hello", file=file)
file.close()
# test.txt 파일에 'Hello'라는 문자열이 저장된다.
# 출력이 되는 곳을 file로 바꾼다.

flush의 경우 실시간 디버깅을 위한 모듈 제작에 사용한다거나 하는 특수한 경우에 사용하므로 생략한다.

 

 

 

Formatting

 

출력할 문자열의 형식을 지정하기 위해 사용하는 것이다.

print함수에서 출력할 value를 작성한 후, 뒤에 메소드처럼 '.format(arg...)' 를 붙혀 사용한다.

 

예시는 다음과 같다.

 

name = 'Artyrie'
print('My name is {}.'.format(name))
>>> My name is Artyrie.
# {} 위치에 format 의 첫번째 arg인 name이 출력되었다.

 ----------------------
 
name = 'Artyrie'
print('{0} s {1} study.'.format(name, 'Python'))
>>> Artyrie s Python study.
# format에 arg가 여러개 들어가는 경우, {}안에 숫자로 몇번째 arg인지 지정이 가능하다.

 ----------------------
 
print('{name} s {lang} study.'.format(name='Artyrie', lang='Python'))
>>> Artyrie s Python study.
# {}안에 변수처럼 이름을 넣을 수 있으며, 이 경우 format의 arg에 값을 지정해준다.

 

 

formatting 을 할 때, {}에 옵션을 주어 데이터의 길이와 정렬 위치 등을 지정해 줄 수 있는데,

 

기본 구조는 {[인덱스]:[채움문자][정렬][길이][,|_][형식문자]} 이고, 해당 양식에 따라 작성해서 나타낼 수 있다.

print('{0:10} s {1:10} study.'.format('Artyrie', 'Python'))
>>> Artyrie   s Python     study.
# Artyrie 와 Python의 문자열 길이가 10으로 지정되어 빈 공간이 default 값인 ' ' 로 채워진다.

 ----------------------
 
print('{1:10} s {0:10} study.'.format('Artyrie', 'Python'))
>>> Python    s Artyrie    study.
# 지정된 index 에 따라 format 의 arg를 선택하여 출력한다.

 ----------------------
 
print('{0:<10} s {1:>10} study.'.format('Artyrie', 'Python'))
>>> Artyrie    s     Python study.
# 정렬은 '<'가 왼쪽 정렬, '>'가 오른쪽 정렬이다.
# 가운데 정렬은 '^'를 사용한다.

 ----------------------
 
print('{0:A<10} s {1:B>10} study.'.format('Artyrie', 'Python'))
>>> ArtyrieAAA s BBBBPython study.
# 빈 공간을 채우는 문자는 default 값이 ' ' 공백으로,
# 정렬문자 앞에 추가함으로써 바꿔줄 수 있다.

이외에 형식문자로 2진법인 b, 8진법 o, 16진법 x, 16진법 대문자 X 를 추가할 수 있다.

 

 

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

'컴퓨터 > Python' 카테고리의 다른 글

#13 : Python의 예외처리  (0) 2020.02.11
# 11 : Python의 패키지  (0) 2020.01.13
#10 : Python의 모듈  (0) 2020.01.13
#09 : Python의 기타 데이터 형태  (0) 2019.12.30
#08 : Python 리스트를 이용한 행렬  (0) 2019.12.27

Package

패키지는 모듈의 모음으로, 모듈들을 좀 더 쉽게 사용하고 효율적으로 관리하기 위한 체계이다.

패키지의 구조는 다음과 같다.

 

main folder

ㄴ main.py

ㄴ package1 folder

    ㄴ __init__.py

    ㄴ module1.py

    ㄴ module2.py

    ...

ㄴ package2 folder

    ㄴ __init__.py

    ㄴ module1.py

    ㄴ module2.py

    ...

 

이 패키지 구조는 패키지 안에 패키지가 들어가도 된다.

'__init__.py' 파일은 해당 폴더가 패키지임을 나타내는 파일로 파이썬 3.3 버전 이후로는 없어도 인식이 된다.

그러나 호환성을 위하여 만들어두는 습관을 가지는 것이 좋다.

 

 

사용 예제

 

폴더 구조

폴더 구조

 

 

__init__.py


 가장 간단한 경우, 이 파일은 빈 파일로 놓을 수 있다.

패키지에 대한 초기화 코드를 실행하거나 __all__ 변수를 설정할 수 있다.

 

 

 

prints.py

def printOnly(str):
    print(str)


def printNote(str):
    print(str + ' Note')

 서브모듈 1로, 받은 문자열을 그대로 출력하는 printOnly와 받은 문자열에 ' Note'를 추가하여 출력하는 printNote 함수를 정의하였다.

 

 

 

operation.py

def merge(str1, str2):
    return str1 + str2

 서브모듈 2로, 받은 문자열을 합쳐서 반환해주는 merge 함수를 정의하였다.

 

 

 

main.py

import str.prints
# 기존의 import 와 같이 부르면 된다.

from str.operation import merge
# 모듈에서 함수를 불러오듯 내부의 함수만을 불러올 수도 있다.

str1 = 'Artyrie Python'
str2 = ' Note'

str.prints.printOnly(str1)
>>> Artyrie Python
# prints.py 내부의 printOnly 함수를 실행한다.

print(merge(str1, str2))
>>> Artyrie Python Note
# operation.py 내부의 merge 함수를 실행한다.

 모듈을 불러올 때와 마찬가지로 모듈 내부에 존재하는 함수를 부르듯

패키지또한 비슷하게 'from str.operation import merge' 처럼 구체적으로 불러올 수 있다.

패키지에서 모듈을 불러올 때는 ' . ' 온점을 이용하여 패키지 폴더의 내부 메소드처럼 위치를 정의해줄 수 있어

'import str.prints' 처럼 작성이 가능하며, 'from str import prints' 처럼 사용할 수도 있다.

 

 

 

 

General Package

위의 예제와 같이 현재 폴더에 패키지가 있는 경우가 아니라면,

파이썬은 특정한 위치에서 패키지를 검색한다.

 

해당 위치는

 

import sys
sys.path
>>> ['C:\\Users\\Artyrie\\Desktop\\Study\\python',
'C:\\Program Files (x86)\\Python38-32\\python38.zip',
'C:\\Program Files (x86)\\Python38-32\\DLLs',
'C:\\Program Files (x86)\\Python38-32\\lib',
'C:\\Program Files (x86)\\Python38-32',
'C:\\Users\\Artyrie\\AppData\\Roaming\\Python\\Python38\\site-packages',
'C:\\Program Files (x86)\\Python38-32\\lib\\site-packages']

# sys 모듈의 path에는 패키지를 찾는 경로가 들어있다.

 

sys 모듈의 path를 통하여 위와 같이 알 수 있으며,

'C:\\Users\\Artyrie\\AppData\\Roaming\\Python\\Python38\\site-packages'

해당 위치에 pip으로 설치한 패키지가 들어간다.

즉, 이곳에 제작한 모듈 혹은 패키지를 넣으면 해당 모듈 혹은 패키지를 사용하는 모든 파이썬 파일에서 불러올 수 있다.

 

'C:\\Program Files (x86)\\Python38-32\\lib\\site-packages'

해당 위치는 가상 환경에서 패키지와 모듈을 관리할 경우 들어가는 위치이며,

자세한 내용은

 

 

The Python Tutorial — Python 3.8.1 documentation

The Python Tutorial Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic typing, together with its int

docs.python.org

파이썬 공식 튜토리얼을 통해 참고하면 된다.

 

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

 

'컴퓨터 > Python' 카테고리의 다른 글

#13 : Python의 예외처리  (0) 2020.02.11
#12 : Python의 표준 출력  (0) 2020.01.23
#10 : Python의 모듈  (0) 2020.01.13
#09 : Python의 기타 데이터 형태  (0) 2019.12.30
#08 : Python 리스트를 이용한 행렬  (0) 2019.12.27

Module 이란?

Python의 Module은 파이썬 코드의 집합으로 볼 수 있다.

프로그램이 매우 커지고 코드가 길어지면,

함수를 정의하고 사용함에 있어서 어디에 있는지 파악하기 어렵고 어떠한 함수가 있는지 조차 확인하기가 어렵다.

그래서 자주쓰는 코드나 혹은 자주 수정해줘야할 코드들, 따로 관리할 필요성이 있는 코드들을 작성하여

다른 파일로 만들어 둔 것을 모듈 이라고 한다.

간단하게 말하면 모듈은 파이썬 파일이다.

 

 

 

예제 1

str.py

def fun(str):
    print(str)

output.py

import str
str.fun('Artyrie')

이런식으로 str.py 라는 모듈을 만들어 자주 쓸 것으로 생각되는 함수 fun을 정의하고,

이 것을 main 파일인 output.py 에서 'import str'로 str.py 를 불러온다.

그러면 str의 메소드 형태로 fun 이라는 함수를 사용할 수 있게된다.

 

 

 

 

예제 2

str.py

def fun(str):
    print(str)

output.py

from str import fun
fun('Artyrie')

이와 같이 다른 파이썬 파일 내에 있는 함수만을 호출 할 수도 있다.

이 경우 불러올 함수 이름을 써서 import 를 하여

'import fun'을 쓰고, 어디에서 가져오는 지를 나타내기 위하여 'from str'을 '앞'에 붙인다.

 

* 뒤에 from 을 붙이면 에러가 난다.

 

 

물론 불러오는 이름을 바꿀 수도 있다.

이 경우, output.py 를 이와같이 변경하면 된다.

from str import fun as strprint
strprint('Artyrie')

'from str import fun' 에서 fun 함수를 str.py에서 불러오는데, 'as strprint'로 strpirnt '로써' 불러온다 는 뜻이다.

영문 그대로 해석하면 간단하다.

 

 

 

 

 

모듈 찾기

str.py

def fun(str):
    print(str)


def fun2(str):
    print(str + ' Note')

output.py

import str

print(dir(str))
--> ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__',
'__name__', '__package__', '__spec__', 'fun', 'fun2']

dir 함수는 불러온 모듈에 정의된 이름들을 찾아준다.

__블라블라__ 는 파이썬에서 제공하는 표준 모듈로,

 

 

The Python Tutorial — Python 3.8.1 documentation

The Python Tutorial Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic typing, together with its int

docs.python.org

 

위의 파이썬 공식 튜토리얼 사이트를 참고하면 된다.

dir() 함수를 통하여 불러온 모듈을 인자로 넘겨주면, 다음과 같이 표준 모듈을 포함하여 정의된 이름들을 반환해준다.

이를 통하여 해당 모듈 즉, 파일에 어떠한 함수 등이 존재하는지 확인할 수 있다.

 

 

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

'컴퓨터 > Python' 카테고리의 다른 글

#12 : Python의 표준 출력  (0) 2020.01.23
# 11 : Python의 패키지  (0) 2020.01.13
#09 : Python의 기타 데이터 형태  (0) 2019.12.30
#08 : Python 리스트를 이용한 행렬  (0) 2019.12.27
#07 : Python의 함수  (0) 2019.12.24

Del Statement

a = [1,2,3,4,5]
del a[0]
print(a)
>>> [2, 3, 4, 5]
# del statement를 사용하면 리스트 내의 원소를 없앨 수 있다.
# list.remove(element)는 list내의 arg로 받은 element와 같은 값인 가장 맨 앞의 원소를 지운다.
# del은 위치를 지정하여 지울 수 있다.

a = [1,2,3,4,5]
del a[2:4]
print(a)
>>> [1, 2, 5]
# del a[start:end]는 start + 1 번 원소부터 end 번 원소까지 없앤다.

a = [1,2,3,4,5]
del a[:]
print(a)
>>> []
# 전체 범위를 지정하면 빈 리스트가 된다.

del a
print(a)
>>> Error
# 리스트 자체를 제거할 수도 있다.

 Del statement는 리스트의 원소를 index를 지정하여 제거할 수 있다.

 

 

 

 

Sequence

string = 'Artyrie'
print(string[0])
>>> A
# string 자료형에서 인덱스로 각 알파벳을 부를 수 있는 것은 sequnce 자료형이기 때문이다.

 ----------------------

list = ['Artyrie', 'Python', 'Note']
print(list[0])
>>> Artyrie

 ----------------------

tuple = ('Artyrie', 'Python', 'Note')
print(tuple[0])
>>> Artyrie

 Sequence 는 여러 객체(데이터)를 가지는 자료형으로, 각 객체(데이터)의 순서를 가지고 있다는 것이 특징이다.

Sequence에는 String, List, Tuple이 있다.

string = 'Artyrie'

list = ['Artyrie', 'Python', 'Note']

tuple = ('Artyrie', 'Python', 'Note')

해당 자료형들은 string에서 설명한 특징들 ( +* 연산, slice (s[ : ]), len()함수 등) 을 지니고 있다.

 

 

 

 

 

Tuple

a = (1,2,3,4,5)
print(a)
>>> (1, 2, 3, 4, 5)
# 튜플은 소괄호인 '(' ')'로 정의한다.

a = (1)
print(a)
>>> 1
# 튜플을 정의할 때 1개의 원소만 넣을 경우에는 a = (1)처럼 정의할 경우,
# 사칙연산의 우선순위를 나타내는 소괄호로 인식하여 1로 출력된다.

a = (1,)
print(a)
>>> (1,)
# 따라서 원소를 하나만 갖는 경우에는 쉼표를 뒤에 붙여주어야한다.

a = 1,2,3,4,5
print(a)
>>> (1, 2, 3, 4, 5)
# 튜플을 정의할 때, 소괄호가 없더라도 똑같이 적용된다.

 ----------------------
 
a = 1,2,3,4,5
a[0] = 5
>>> Error
# 튜플의 데이터는 변경할 수 없다.

 ----------------------
 
a = 1,2,3,4,5
del a[0]
>>> Error
# 튜플은 데이터를 변경할 수 없기에 제거또한 불가능하다.

a = 1,2,3,4,5
del a
print(a)
>>> Error
# del을 이용한 전체 제거는 가능하다.
# a 라는 변수 자체를 제거했기 때문에, 출력이 안된다.

 ----------------------
 
a = 1,2,3,4,5
print(a[2:4])
>>> (3, 4)
# 리스트와 마찬가지로 데이터 일부만을 호출하는 것은 가능하다.

print(a)
>>> (1, 2, 3, 4, 5)
# 그러나 내부 데이터가 변경되는 것은 아니다.

 ----------------------

Tuple은 list와 비슷하게 생긴 자료형으로, 사용법또한 비슷하다고 볼 수 있지만

가장 큰 차이점은 값을 변화시킬 수 있는지에 대한 여부이다.

위의 예처럼 튜플은 내부의 값을 변경할 수 없다.

튜플또한 리스트처럼

슬라이스 (t[start:end]), 덧셈 곱하기 연산, len() 함수 등을 이용할 수 있다.

 

 

 

Set

s = set([1,2,3])
print(s)
>>> {1, 2, 3}
# 집합 자료형은 set 키워드를 통해 만들 수 있다.

s = set('Artyrie')
>>> {'i', 'r', 't', 'A', 'y', 'e'}
# 스트링을 넣으면 자동으로 각 알파벳 별로 나뉘어 저장된다.
# 집합 자료형은 중복을 허용하지 않고 순서가 없기 때문에,
# 뒤죽박죽 섞인 것처럼 보이기도 한다.
# 매번 눈에 보이는 순서는 바뀐다.

! 숫자(int형 데이터)는 set에 바로 넣을 수 없다.

 ----------------------
 
s = set('Artyrie')
print(s[0])
>>> Error
# 집합에는 순서가 없기때문에 인덱싱으로 접근할 수 없다.

l = list(s)
l[0]
>>> r
# 집합에서 인덱싱을 통하여 저장된 값에 접근하려는 경우, 리스트나 튜플로 변환한 후 해야 한다.
 
 ----------------------

s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1 & s2)
>>> {4, 5, 6}
# '&' 연산은 교집합으로, 집합의 교집합을 간단히 구할 수 있다.
# s1.intersection(s2) 와 같은 결과이다.

 ----------------------
 
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1 | s2)
>>> {1, 2, 3, 4, 5, 6, 7, 8, 9}
# '|' 연산은 합집합으로, 집합의 합집합을 간단히 구할 수 있다.
# s1.union(s2)와 같은 결과이다.

 ----------------------
 
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1 - s2)
>>> {1, 2, 3}
# '-' 연산은 차집합으로, 집합의 차집합을 간단히 구할 수 있다.
# s1.difference(s2) 와 같은 결과이다.

  set은 말그대로 집합으로, 집합연산인 합집합, 교집합, 차집합 등을 수행할 수 있다.

 

 

Set의 메소드

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])

print(s1.intersection(s2))
>>> {4, 5, 6}
# s1과 s2의 교집합을 구한다.

print(s1.union(s2))
>>> {1, 2, 3, 4, 5, 6, 7, 8, 9}
# s1과 s2의 합집합을 구한다.

print(s1.difference(s2))
>>> {1, 2, 3}
# s1과 s2의 차집합을 구한다.

 ----------------------
 
s1 = set([1, 2, 3])
s1.update([4, 5, 6])
print(s1)
>>> {1, 2, 3, 4, 5, 6}
# 집합은 update 메소드를 이용하여 값을 추가할 수 있다.
# set.update(arg) 는 arg를 set에 원소로 추가하는 것이다.
# extend의 개념이 적용된다.

 ----------------------
 
s1 = set([1, 2, 3])
s1.remove(3)
print(s1)
>>> {1, 2}
# 집합은 remove 메소드를 이용하여 특정한 값을 제거할 수 있다.
# set.remove(arg) 는 arg를 set에서 찾아 제거하는 것이다.

 

 

 

Set 메소드 정리

메소드 의미
set1.intersection(set2) set1과 set2의 교집합을 구한다. # set1 & set2
set1.union(set2) set1과 set2의 합집합을 구한다. # set1 | set2
set1.difference(set2) set1과 set2의 차집합을 구한다. # set1 - set2
set.update(arg) set에 arg로 받은 원소들을 추가한다.
set.remove(arg) set에서 arg인 값을 찾아 제거한다.

 

 

 

 

Dictionaries

dic = {}
# dictionary 자료형으로 dic을 선언한다.

dic = dict()
# dictionary 자료형으로 dic을 선언한다.

----------------------

dic = {'key1': 'str', 'key2': 1}
dic['key3'] = True
print(dic)
>>> {'key1': 'str', 'key2': 1, 'key3': True}
# Dictionary는 key와 value 값을 1:1 매칭하여 저장하는 자료형이다.
# 위와 같이 value의 자료형 제한은 없다.

 ----------------------
 
dic = {'a' : 1, 'b' : 2}
print(dic[0])
>>> Error
# Dictionary는 순서 즉, index가 없으므로 index로 접근이 불가능하다.

print(dic['a'])
>>> 1
# 따라서 key값을 통하여 값에 접근해야 한다.

 ----------------------
 
dic = {'a' : 1, 'b' : 2}
dic['a'] = 3
print(dic)
>>> {'a': 3, 'b': 2}
# key값을 통하여 value값을 변경할 수 있다.

 ----------------------
 
dic = {'a' : 1, 'b' : 2}
del dic['a']
print(dic)
>>> {'b': 2}
# dictionary 자료형의 값은 del statement를 이용하여 제거해야한다.

Dictionary 자료형은 이름에 걸맞게 사전처럼 단어를 찾아 그 뜻을 확인하는 구조를 지녔다.

index를 숫자가 아닌 어떠한 값을 Key로써 지정하고 그 key에 값을 저장한다.

그래서 dic = { 'key' : value } 의 구조를 지닌다.

여기에는 각각의 다른 값이 들어갈 수 있다.

 

 

 

 

Dictionary와 관련된 함수

dic = {'a' : 1, 'b' : 2}
dic = list(dic)
print(dic)
>>> ['a', 'b']
# list 함수를 이용하면 dictionary 자료형을 list로 바로 변환할 수 있다.
# 값은 key값만 저장이 된다.

 ----------------------

dic = {'b' : 1, 'a' : 2}
>>> {'b': 1, 'a': 2}

dic = sorted(dic)
print(dic)
>>> ['a', 'b']
# sorted 함수를 사용하면 dic의 key값을 정렬한 list를 반환해준다.

 ----------------------
 
dic = dict([('a', 1), ('b', 2)])
print(dic)
>>> {'a': 1, 'b': 2}
# dict 함수를 이용하면 바로 키와 값을 할당하며 선언할 수 있다.

dic = dict(a=1, b=2)
print(dic)
>>> {'a': 1, 'b': 2}
# 동일한 방법이다.

 

 

 

 

Dictionary 관련 함수 정리

함수 의미
list(dic) dic에서 key 값으로 구성된 list를 반환한다.
sorted(dic) dic에서 key 값을 정렬하여 list로 반환한다.
dict(arg) arg를 dictionary 자료형으로 만들어 반환한다.

 

 

 

 

Dictionary의 메소드

dic = {'a': [1, 2, 3], 'b': 2}
dic2 = dic.copy()
print(dic2)
>>> {'a': [1, 2, 3], 'b': 2}
# dic2에 dic이 복사되었다.

dic2['c'] = 3
print(dic2)
>>> {'a': [1, 2, 3], 'b': 2, 'c': 3}

print(dic)
>>> {'a': [1, 2, 3], 'b': 2}
# dic2의 변화는 dic과 무관한 듯 보인다.

dic2['a'].append(4)
print(dic)
>>> {'a': [1, 2, 3, 4], 'b': 2}

print(dic2)
>>> {'a': [1, 2, 3, 4], 'b': 2, 'c': 3}
# 그러나 dic2에 있는 a의 value값인 list 자료형을 수정하니 dic의 값또한 수정이 된다.

	-- PLUS --
	dic = {'a': [1, 2, 3], 'b': 2}
	dic2 = dict(dic)
    
	dic2['a'].append(4)
	print(dic)
    >>> {'a': [1, 2, 3, 4], 'b': 2}
    
	print(dic2)
    >>> {'a': [1, 2, 3, 4], 'b': 2}
    # dict()로 새로 선언을 한다고 한들 동일하게 변한다.
    
 ----------------------
 
import copy
# copy 라는 모듈을 사용한다고 선언한다.

dic = {'a': [1, 2, 3], 'b': 2}
dic2 = copy.deepcopy(dic)
# copy 모듈 안의 deepcopy 메소드를 통해 dic을 복사한다.

dic2['a'].append(4)
print(dic)
>>> {'a': [1, 2, 3], 'b': 2}

print(dic2)
>>> {'a': [1, 2, 3, 4], 'b': 2}
# deepcopy를 통해 dictionary를 복사한 결과, 내부 리스트를 수정해도 같이 변화하지 않는다.
# 즉, dictionary의 copy 메소드는 value값이 list 같은 자료형일 경우 메모리값을 복사한다.
# 그러므로 dic의 a값의 value 와 b값의 value는 같은 변수를 가르킬 것이다.

 ----------------------
 
dic = {'a': 1, 'b': 2, 'c': 3}
dic.update({'b': 4, 'a': 2})
print(dic)
>>> {'a': 2, 'b': 4, 'c': 3}
# dic의 update 메소드를 통해 여러 값을 한번에 수정할 수 있다.

 

 

 

 

Dictionary 메소드 정리

메소드 의미
dic.copy() dic을 복사하여 반환한다.
dic.update(dic2) dic2값을 dic에 업데이트한다. #key가 없으면 추가한다.

dic 안의 list형 value가 존재한다면, copy 모듈을 import 하여

copy.deepcopy(dic) 을 통하여 반환값 안의 list와 피복사 값 안의 list가

각각의 다른 주소값을 가진 list로 dic을 복사할 수 있다.

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

'컴퓨터 > Python' 카테고리의 다른 글

# 11 : Python의 패키지  (0) 2020.01.13
#10 : Python의 모듈  (0) 2020.01.13
#08 : Python 리스트를 이용한 행렬  (0) 2019.12.27
#07 : Python의 함수  (0) 2019.12.24
#06 : Python의 반복문  (0) 2019.12.24

 

dan3 = []
for i in range(1, 10):
    dan3.append(i * 3)
print(dan3)
>>> [3, 6, 9, 12, 15, 18, 21, 24, 27]
# list에 append 메소드를 사용하여 구구단 3단을 만든다.

dan3 = [i * 3 for i in range(1, 10)]
print(dan3)
>>> [3, 6, 9, 12, 15, 18, 21, 24, 27]
# list를 정의할 때 내부에 for문을 사용하여도 같은 결과가 나타난다.

dan3 = list(map(lamda x: x * 3, range(10))
# map 함수를 사용하여도 같은 결과를 나타낼 수 있다.
# map(func, list) 는 list의 각 원소들을 func 에 넣은 값을 list로 반환해준다.

 ----------------------
 
print([(x, y) for x in range(1, 10) for y in [x*3]])
>>> [(1, 3), (2, 6), (3, 9), (4, 12), (5, 15), (6, 18), (7, 21), (8, 24), (9, 27)]
# for문을 굳이 두번 쓸 필요가 없지만, 이처럼 for문을 두개 같이 적용하여 쓸 수도 있다.
# 이 것은 아래의 코드와 같다.

dan3 = []
for x in range(1, 10):
    for y in [x*3]:
        dan3.append((x, y))
print(dan3)

 ----------------------
 
matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
]
# list 구조를 2중으로 넣으면 matrix를 표현할 수 있다.

colset = [row[i] for row in matrix for i in range(4)]
print(colset)
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
# 'for row in matrix' 안에 'for i in range(4)'가 들어가 각 row의 원소들을 colset에 추가한다.

colset = [[row[i] for row in matrix] for i in range(4)]
print(colset)
>>> [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
# 대괄호가 추가됨으로써, 'for i in range(4)' 안에 'for row in matrix'가 들어가
# 각 matrix row의 같은 column 값들을 하나의 list로 묶는다.

	-- for문 적용이 바뀌는 추가 예제--
    gugudan = [[x*y for x in range(1, 3)] for y in range(1, 10)]
    print(gugudan)
    >>> [[1, 2], [2, 4], [3, 6], [4, 8], [5, 10], [6, 12], [7, 14], [8, 16], [9, 18]]
    # for문 두개에 괄호가 생김으로써 뒤에서부터 for문이 적용됨
    # 이는 아래의 코드와 같다.
    
    gugudan.clear()
    # gugudan 리스트 를 초기화.
    for y in range(1, 10):
        dan = []
        for x in range(1, 3):
            dan.append(x*y)
        gugudan.append(dan)
    print(gugudan)
    >>> [[1, 2], [2, 4], [3, 6], [4, 8], [5, 10], [6, 12], [7, 14], [8, 16], [9, 18]]

 

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

'컴퓨터 > Python' 카테고리의 다른 글

#10 : Python의 모듈  (0) 2020.01.13
#09 : Python의 기타 데이터 형태  (0) 2019.12.30
#07 : Python의 함수  (0) 2019.12.24
#06 : Python의 반복문  (0) 2019.12.24
#05 : Python의 조건문  (0) 2019.12.23
def factorial(n):
    res = 1
    for i in range(1, n+1):
        res *= i
    return res

s = factorial(5)
print(s)
>>> 120
# Python에서 함수의 정의는 'def funcName(arg) : ' 의 형식으로 이루어진다.

 ----------------------
 
def factorial(n=3):
    res = 1
    for i in range(1, n+1):
        res *= i
    return res


s = factorial()
print(s)
>>> 6
# 함수를 정의할 때 'arg=n' 으로 작성하게 되면, default 값으로 arg에 n 값이 들어간다.

 ----------------------
 
num = 3

def func(arg=num) :
	return arg

num = 7
print(func())
>>> 3
# default 값으로 변수값을 주면 함수를 정의하기 직전의 값이 된다.

 ----------------------
 
def func(str='Artyrie') :
	return str
    
print(func())
>>> Artyrie

print(func(str='Test'))
>>> Test
# 함수의 arg를 함수에서 사용하는 arg를 키워드처럼 넘길 수 있다.

 ----------------------
 
def keyword(name, *langs, **keys):
    print(name)
    print('-- Language -- ')
    for lang in langs:
        print(lang)
    print('-' * 10)
    for key in keys:
        print(key, ":", keys[key])

keyword('Artyrie', 'Python', 'Java', Web='Flask', Web2='Django')
>>> Artyrie
-- Language --
Python
Java
----------
Web : Flask
Web2 : Django

# ' *arg '는 지정된 파라미터 외에 값을 저장하고,
# ' **arg '는 keyword와 함께 주어진 파라미터를 딕셔너리 형식으로 저장한다.

 ----------------------
 
plus = lambda x : x + 3
print(plus(0))
>>> 3
# 'plus = lambda x : x + 3' 은 'def plus(x): return x + 3' 과 동일하다.
# 함수는 lambda 표현식으로도 나타낼 수 있으며, 람다 표현식은 익명 함수를 만든다.
# 함수를 편리하게 작성할 수 있기에 사용하지만, VSCode의 extension Python을 사용하면
# lambda 표현식을 자동으로 def 형식의 함수로 만들어준다.

 

유용한 룰

의미
def func(*args) args에 지정된 파라미터 외에 값을 저장한다.
def func(**keys) keys에 딕셔너리 형식으로 key와 value 값을 저장한다.
funcName = lambda x : x ~ funcName(n)으로 인자를 주면 x : 뒤에 표현식을 처리한 값을 반환한다.

 

 

 

메소드

def str():
    """Artyrie

    Python Note. """

print(str.__doc__)
>>> Artyrie

    Python Note.
# 함수의 Method 로써 __doc__ 을 불러주면, 함수 안에 있는 내용을 문서처럼 반환해준다.

 ----------------------
 
def str(arg1: str) -> str:
    return arg1

print(str.__annotations__)
>>> {'arg1': <class 'str'>, 'return': <class 'str'>}
# __annotations__ 는 해당 함수의 인자와 리턴값에 대한 정보를 제공해준다.
# return값에 대한 정보는 (arg1: str) 뒤의 '-> str' 부분으로,
# return값이 str 형식이라는 것을 지정해주고 있다.
# 이름 그대로 주석이기 때문에 결과와 무관하게 출력된다.

 

 

메소드 정리

메소드 의미
function.__doc__ 함수 내부의 내용을 문서처럼 반환한다.
function.__annotations__ 함수의 인자(arguments) 와 return 값에 대한 정보를 반환한다.

 

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

'컴퓨터 > Python' 카테고리의 다른 글

#09 : Python의 기타 데이터 형태  (0) 2019.12.30
#08 : Python 리스트를 이용한 행렬  (0) 2019.12.27
#06 : Python의 반복문  (0) 2019.12.24
#05 : Python의 조건문  (0) 2019.12.23
#04 : Python의 사용자 입출력  (0) 2019.12.23
s = ['a', 'b', 'c']
for word in s :
	print(word)
>>> a
b
c
# Python의 for문은 'in'을 통해 foreach 처럼 리스트에 들어있는 원소들을 부를 수 있다.

 ----------------------

s = 'Artyrie'
for alphabet in s :
	print(alphabet)
>>> A
r
t
y
r
i
e
# String 또한 해당 로직에 따라 부를 수 있다.

 ----------------------
 
s = 'abc'
for alpha in s :
	if alpha == 'a' :
    	alpha = ''
    print(alpha)
    print(s)
>>> 
abc
b
abc
c
abc
# 문자열 s에서 부른 각각의 알파벳 alpha 를 변경해도 s에는 영향을 끼치지 못한다.
# 이는 리스트에도 동일하다.

 ----------------------
 
for i in range(5) : 
	if i == 2 :
    	break
    print(i)
>>> 0
1
# break는 해당 반복문을 탈출시킨다.

 ----------------------
 
for i in range(5) :
	if i % 2 == 0 :
    	print('even', i)
        continue
    print('odd', i)
>>> even 0
odd 1
even 2
odd 3
even 4
# continue는 continue 뒤에 있는 코드를 넘기고 반복문의 다음 순서를 진행시킨다.

 ----------------------
 
for i in range(5) : 
	if i % 2 == 0 :
    	pass
    else :
    	print(i)
>>> 1
3
# pass는 아무것도 하지 않는다.

 

 

함수 정리

range 함수 설명

 --> https://dozina-tenshi-no-giftbox.tistory.com/30?category=782162

함수 의미
range(a) 0부터 a-1 까지의 숫자 범위를 나타낸다.
range(a,b) a부터 b-1까지의 숫자 범위를 나타낸다.
range(a,b,c) a부터 b-1까지의 숫자에서 c만큼의 간격으로 숫자 범위를 나타낸다.

 

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

'컴퓨터 > Python' 카테고리의 다른 글

#08 : Python 리스트를 이용한 행렬  (0) 2019.12.27
#07 : Python의 함수  (0) 2019.12.24
#05 : Python의 조건문  (0) 2019.12.23
#04 : Python의 사용자 입출력  (0) 2019.12.23
#03 : Python의 리스트  (0) 2019.12.23
number = int(input('Enter the number : '))
Enter the number : 5

if number < 5 : # 첫번째 조건문
 print('under')
elif number == 5 : # 두번째 이후 조건문
 print('same')
else : # 마지막 조건문
 print('upper')
 
>>> same
# number에 저장한 값이 5이기 때문에, elif (else if) 문에 걸려 'same'이 프린트 된다.
# 'if 조건절 :' 의 형태를 갖는다.

 ----------------------
 
num = int(input('Enter the number : '))
Enter the number : 3

if num in (1,2,3,4) :
	return 'under 5'
else :
	return 'over 4'
>>> under 5    
# if 문 조건절에 데이터의 집합인 리스트 또한 사용할 수 있다.

 if 문은 'if 조건절 : ' 로 시작하여, 조건을 만족했을 때 처리할 내용을 그 아래 적는다.

이 때, 처리할 내용은 if 앞의 띄어쓰기보다 한개 이상 더 많아야한다.

Python은 저 띄어쓰는 것을 기준으로 조건문에 해당할 경우 실행하는 코드인지를 구분하기 때문에 반드시 띄어쓰기가 더 있어야한다.

 

저 띄어쓰기가 없으면 'IndentationError: expected an indented block' 에러가 나타난다.

 

특이하게 Python에는 Switch / Case 문이 존재하지 않는다.

 

논리연산자 의미
a < b a가 b보다 작으면 True
a == b a와 b가 같으면 True
a != b a와 b가 같지않으면 True
a > b a가 b보다 크면 True
a <= b a가 b보다 작거나 같으면 True
a >= b a가 b보다 크거나 같으면 True
a and b a와 b가 모두 True이면 True
a or b a와 b 중 하나라도 True이면 True
not a a가 False 이면 True (거꾸로)

 

Python은 C와는 다르게 이런 방식도 적용이 된다.

s = 5
3 < s < 11
--> True
# 해당 형식처럼 논리연산자를 여러개 넣은 경우도 적용된다.

 

유용한 룰

 

의미
if condition in [...list...] condition이 list 안에 있으면 True

 

 

함수

bool(0)
>>> False

bool(1)
>>> True

bool([])
>>> False

bool('')
>>> False

bool(' ')
>>> True

 

 

함수 정리

함수 의미
bool(something) something가 True 인지 False 인지 확인하여 값을 리턴한다.

 

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

'컴퓨터 > Python' 카테고리의 다른 글

#07 : Python의 함수  (0) 2019.12.24
#06 : Python의 반복문  (0) 2019.12.24
#04 : Python의 사용자 입출력  (0) 2019.12.23
#03 : Python의 리스트  (0) 2019.12.23
#02 : Python의 문자열  (0) 2019.12.23
s = input()
Artyrie
s
>>> 'Artyrie'
# input()함수는 사용자에게서 입력을 받는다.

 ----------------------

s = input('Enter the number : ')
Enter the number : 6
s
>>> 6
# input안에 string을 넣으면 해당 string이 같이 나타난다.

 ----------------------
 
s = 'Artyrie'
print(s)
>>> Artyrie
# print는 안에 넣은 자료를 출력한다.
 
 ----------------------

print('Arty' 'rie')
>>> Artyrie
# 쉼표 없이 여러 문자열을 넣으면 더하여 출력한다.

 ----------------------
 
print('Arty', 'rie')
>>> Arty rie
# 여러 스트링 사이의 쉼표는 띄어쓰기 역할을 한다.

 ----------------------
 
print('Artyrie', end=' Python')
>>> Artyrie Python
# 출력을 끝낼 때 뒤에 붙일 것을 지정할 수 있다.
# default 가 '\n' 줄바꿈 문자이기에 실제로는 보기 안좋게 출력되므로, 적절히 사용해야한다.
# (Example)
# >>> print('Artyrie', end=' Python')
# Artyrie Python>>>

Python의 사용자 입출력은 input()의 입력과 print()의 출력을 기본으로 사용한다.

 

 

유용한 룰

의미
input('string') 입력을 받을 때 string이 같이 나온다.
print('string1' 'string2') string1과 string2를 덧셈 연산하여 출력한다.
print('string1', 'string2') string1과 string2를 띄어쓰기로 구분하여 출력한다.
print('string', end='something') string을 출력하고 끝에 something을 붙인다.

 

 

Hello! Python

s = input('Enter the Name : ')
Artyrie
hello = 'Hello! Python and'
print(hello, s)
>>> Hello! Python and Artyrie

 

 

 

! 주의

해당 내용은 개인 정리를 위하여 작성한 내용으로, 틀린 내용이 존재할 수 있습니다.

잘못된 정보의 경우 댓글로 알려주시면 감사하겠습니다.

'컴퓨터 > Python' 카테고리의 다른 글

#06 : Python의 반복문  (0) 2019.12.24
#05 : Python의 조건문  (0) 2019.12.23
#03 : Python의 리스트  (0) 2019.12.23
#02 : Python의 문자열  (0) 2019.12.23
#01 : Python의 숫자 연산  (0) 2019.12.22

+ Recent posts