논리적 개념을 도식화 하기에 좋은 Graphviz anaconda에 설치하고 python언어를 이용하여 프로그램을 만들고 jupyter에서 간단한 예제를 해보려고 합니다.

아나콘다 설치는 매우 간단 해서 설명이 필요 없지만 한번 훑어보려면 아래 링크에서 아나콘다 부분만 보시면 됩니다.


[텐서플로우] 아나콘다(Anaconda)에 TensorFlow2 설치


그럼 아나콘다는 설치가 되어 있다고 치고 graphviz 설치를 시작해 봅니다.

 

Windows 7Graphviz 설치 방법


python graphviz install


먼저 시작버튼을 눌러 Anaconda Prompt를 실행하고 설치 명령어를 입력 합니다.

 

conda install graphviz

 

명령어를 입력하고 나면 잠시 후 설치하려는 프로그램 목록이 나타납니다기존에 파이선이 업데이트가 되어 있다면 설치할 package 개수가 적을 수도 있습니다.


python graphviz install




python graphviz install


진행 여부를 물어보면 y를 입력하거나 [y]가 선택되어 있으니 그냥 엔터를 처도 됩니다.


python graphviz install


기다리다 보면 설치가 완료 되었습니다.

 

conda 명령말고 pip를 이용해서 설치도 가능한데


pip install graphviz


명령어로도 설치할 수 있습니다.


python graphviz install


 

이미 설치되어 있다고 나오는군요.

 

간단한 예제를 하나 해보도록 하겠습니다. 기본적인 원형 도표를 만들고 png 이미지 파일을 만드는 프로그램 입니다.

 

from graphviz import Source

 

dot_digraph = """

digraph graphname {

    rankdir=LR;

     a -> b -> c -> e ->f;

     b -> d;

}

"""

s = Source(dot_digraph, filename='simple_digraph', format='png')

s.view()

 

그런데 프로그램을 실행하면 오류가 발생 합니다.


python graphviz install


graphviz는 설치하고 Path를 잡아줘야 합니다. 어디에 설치가 되었는지 설치 위치를 찾아야 설정을 하겠죠. graphviz 설치 위치는 아나콘다를 어디에 설치 했는가에 따라 폴더가 달라집니다. 저의 경우는


C:\ProgramData\Anaconda3\Library\bin\graphviz


요기에 설치가 되어 있습니다그럼 속성 항목에 path를 선택 해서 추가를 해 줍니다추가하는 방법은 변수 값 항목 제일 뒤에 세미콜론(;)을 추가하고 폴더 위치를 추가해 주면 됩니다.


;C:\ProgramData\Anaconda3\Library\bin\graphviz


python graphviz install


열린 시스템 속성 변수 창들을 [확인]버튼을 눌러 모두 닫아주면 시스템에 설정이 반영 됩니다그러나 이미 열려있는 jupyter notebook은 설정 값이 적용되어 있지 않는 상태 입니다새로 추가한 설정이 반영 되도록 jupyter noteboot을 종료 하고 다시 켜서 프로그램을 실행해 봅니다.


python graphviz install


잘 나오는 군요성공 입니다.

 

 

Windows 10Graphviz 설치 방법

 

Windows 10에서도 동일한 방법으로 설치와 테스트가 가능 합니다Windows 7과 방법이 동일해서 좀 성의 없이 요점만 설명을 하도록 하겠습니다.

 

Anaconda Prompt를 실행하고 설치 명령어를 입력 합니다.

 

conda install graphviz 


python graphviz install


pip 명령으로도 설치가 가능 하고요


pip install graphviz


python graphviz install


설치가 완료 되면 anaconda의 설치 위치를 알면 graphviz의 설치 위치도 찾을 수 있습니다.


C:\anaconda3\Library\bin\graphviz


python graphviz install


저는 이곳에 설치가 되어 있습니다.  환경 변수 path에 위치를 추가해 줍니다.


python graphviz install


설정 값을 반영하기 위해 주피터 노트북 창을 닫고 재시작 하여 프로그램을 시작해 봅니다.


python graphviz install


당연히 윈도우10에서도 잘 실행이 됩니다.


- copy coding -

 

8. 파일 입력 출력

 

8.1 파일 함수와 옵션

 

파일 오픈 함수는 생각보다 많은 매개변수가 있습니다.

open(filename, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

파일을 오픈 하기 위해 주로 사용하는 것은

- filename은 필수로 입력 합니다.

- mode r(읽기), w(쓰기), a(추가하기) 중 하나를 기입하고

- t(텍스트) b(바이너리)도 입력해야 하는데 생략시 t default로 설정됩니다.

- encoding은 생략시 utf-8로 설정 됩니다.

- 나머지는 필요에 따라 선택적으로 적용 합니다.

 

모드는 여러 가지의 조합으로 사용 됩니다.

모드

의미

r

읽기파일을 읽기 위해 오픈 (default). 파일 없으면 오류

w

쓰기파일을 쓰기모드로 오픈. 파일 없으면 생성, 있으면 삭제 생성

x

open for exclusive creation, failing if the file already exists

a

쓰기끝에 추가, 없으면 생성

b

이진 모드

t

텍스트 모드 (default)

+

업데이트용 파일 오픈 (읽기, 쓰기 가능)

 r+

읽기 또는 쓰기, 파일 없으면 오류. 파일 있으면 처음에 추가

 w+

읽기 또는 쓰기, 파일 없으면 생성. 파일 있으면 삭제 후 생성

 a+

읽기 또는 추가, 파일 없으면 생성. 파일 있으면 끝에 추가


python study

 


8.2 파일 생성 및 쓰기

 

f = open(“file_name”, ‘w’)

파일을 쓰기모드(w)로 열면 파일이 존재하지 않는 경우 새로 생성이 되지만 기존에 파일이 존재하는 경우 기존 파일 내용을 삭제하고 새로 쓰기를 하게 됩니다.

 

8.2.1 write() 함수

 

write(data) 함수는 data를 파일에 모두 출력 합니다. 

sum = 0

f = open("F:/Python/file_write01.txt", 'w')

for i in range(1,101):

           sum += i

           tmp_data = "sum( %d ) = %d + %d\n"  % (sum , sum, i)

           f.write(tmp_data)

 

print(sum)

f.close()

(base) F:\Python>python file_w01.py

5050

sum( 1 ) = 1 + 1

sum( 3 ) = 3 + 2

sum( 6 ) = 6 + 3

sum( 10 ) = 10 + 4

sum( 15 ) = 15 + 5

sum( 21 ) = 21 + 6

sum( 28 ) = 28 + 7

sum( 36 ) = 36 + 8

sum( 45 ) = 45 + 9

....(생략)

 

list를 파일로 출력하려면 문자열로 변환하여 출력 하여야 합니다.

list_data = ['aaaa', 'bbbb','cccc']

f = open("F:/Python/file_write02.txt", 'w')

 

f.write('\n'.join(list_data))

 

f.close()

(base) F:\Python>python file_w02.py

aaaa

bbbb

cccc

 

 

8.2.2 writelines() 함수

 

writelines 함수를 이용하면 리스트 형태의 자료를 파일로 출력 가능 합니다.  단점은 모두 한줄로 결합되어 출력이 됩니다.

list_data = ['aaaa', 'bbbb','cccc']

f = open("F:/Python/file_write03.txt", 'w')

 

f.writelines(list_data)

 

f.close()

(base) F:\Python>python file_w03.py

aaaabbbbcccc

 

 

8.3 파일 읽기

 

파일을 읽기 모드(r)로 오픈 하는 경우 파일이 존재 하지 않으면 오류가 발생 하므로 try ... except를 사용하여 오류 처리를 하거나 존재 유무를 확인 하고 읽기 모드로 오픈 합니다.

 

8.3.1 read() 함수

 

read(size)의 형태로 사용되면 size를 생략하면 파일을 하나의 문자열로 리턴 합니다.  문제는 파일의 크기가 가용 메모리 범위를 넘어가면 안되기 때문에 size가 큰 파일은 나누어서 읽기를 추천 합니다.  파일의 끝에 도달하면 빈 문자열(‘’)을 리턴 합니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data = f.read()

   print(data)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

전체 읽기

(base) F:\Python>python file_r01.py

sum( 1 ) = 1 + 1

sum( 3 ) = 3 + 2

sum( 6 ) = 6 + 3

sum( 10 ) = 10 + 4

sum( 15 ) = 15 + 5

sum( 21 ) = 21 + 6

...(생략)

 

read(size)를 이용하여 파일 읽기. size 만큼 읽어와 출력 합니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data = f.read(100)

   print(data)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

100 byte 읽기

(base) F:\Python>python file_r02.py

sum( 1 ) = 1 + 1

sum( 3 ) = 3 + 2

sum( 6 ) = 6 + 3

sum( 10 ) = 10 + 4

sum( 15 ) = 15 + 5

sum( 21 ) =

 

 

8.3.2 readline() 함수

 

열린 파일을 한 라인씩 읽어오는 함수 입니다.  한 라인씩 읽어 오는 동안 계속 해서 읽어올 라인이 없는지 확인 하고 없으면 break로 종료 합니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data = f.readline()

   print(data)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

한라인만 읽어와 출력 합니다.

(base) F:\Python>python file_r03.py

sum( 1 ) = 1 + 1

 

 

8.3.3 readlines() 함수

 

파일을 한꺼번에 읽어서 각 라인을 리스트 형태로 반환하는 함수 입니다.

try:

   f = open("F:/Python/file_write01.txt", 'r')

 

   data_list = f.readlines()

   data_length = len(data_list)

   print("list count : " + str(data_length))

   print(data_list[0])

   print(data_list)

 

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

파일의 라인 수와 List의 첫 번째 요소, 전체 출력

(base) F:\Python>python file_r04.py

list count : 100

sum( 1 ) = 1 + 1

 

['sum( 1 ) = 1 + 1\n', 'sum( 3 ) = 3 + 2\n', 'sum( 6 ) = 6 + 3\n', ...(생략)...]



 

8.4 + 사용


개인적으로는 ‘+’를 붙여 사용 하는 것보다 원래의 기능대로 사용하길 추천 합니다.

 

8.4.1 r+


mode‘r+’를 사용하면 읽기와 쓰기가 가능 합니다파일이 존재하지 않으면 오류를 발생 하고특별히 위치를 정하지 않는다면 파일의 처음에 추가가 됩니다.

try:

   f = open("F:/Python/file_write02.txt", 'r+')

 

   f.write("kkk")

  

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

# 실행 전 파일 file_write02.txt

aaaa

bbbb

cccc

# 실행 후 파일 file_write02.txt

kkka

bbbb

cccc

 

 

8.4.2 w+


mode‘w+’를 사용하면 읽기와 쓰기가 가능 합니다파일이 없으면 생성 하고 파일이 존재 하면 내용을 삭제하고 쓰기를 진행 합니다.

try:

   f = open("F:/Python/file_write02.txt", 'w+')

 

   f.write("kkk")

  

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

# 실행 전 파일 file_write02.txt

aaaa

bbbb

cccc

# 실행 후 파일 file_write02.txt

kkk

 

 

8.4.3 a+


mode‘a+’를 사용하면 읽기와 쓰기가 가능 합니다파일이 없으면 오류가 발성 하고 파일이 존재 하면 내용의 끝에 쓰기를 진행 합니다.

try:

   f = open("F:/Python/file_write02.txt", "a+")

  

   f.write("kkk")

  

except FileNotFoundError as e:

           print(e)

finally:

   f.close()

# 실행 전 파일 file_write02.txt

aaaa

bbbb

cccc

# 실행 후 파일 file_write02.txt

aaaa

bbbb

cccckkk


- copy coding -

 

7. 예외처리

 

코딩을 할 때 가장 중요한 건 오류가 발생하지 않도록 하는 것 이지만 데이터의 오류, 시스템 오류, 네트워크 오류는 어쩔 수가 없습니다.  오류를 예측하고 거기에 대한 대응을 미리 해놓을 수 있는 능력이 더 중요할 수 있습니다.

 

7.1 try ... except


try 블록을 실행 하는 동안 오류가 발생하면 곧바로 except 블록이 실행 되며 오류가 발생하지 않는다면 except 블록은 실행되지 않습니다.

 

7.1.1 발생오류를 모르는 경우

 

발생할 오류의 항목을 모르는 경우 오류 항목을 기입하지 않고 except만 적어서 처리를 하는 경우 입니다.

try:

   이런 저런 명령어 처리

except:

   print(“알 수 없는 오류로 인하여 프로그램이 종료 되었습니다.”)

 

python study

 


7.1.2 발생오류 명기


try 블록에서 발생할 오류에 대해 예상이 가능한 경우 오류 항목을 추가하여 처리하는 경우 입니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except FileNotFoundError:

   print(“요청하신 파일을 찾을 수 없습니다.”)

 

발생할 수 있는 오류가 여러 개인 경우 except를 추가 합니다. 

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except OSError:

   print(“OS 오류가 발생 했습니다.”)

except FileNotFoundError:

   print(“요청하신 파일을 찾을 수 없습니다.”)

except:

 print(“알 수 없는 오류가 발생 했습니다.”)

 

 

7.1.3 else (오류 없는 경우)

 

try 블록을 실행하는 동안 오류가 발생하지 않은 경우에만 실행을 하는 블록 입니다.  finally와의 차이점은 finally는 오류가 발생 해도 실행을 하는 블록 입니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except OSError:

   print(“OS 오류가 발생 했습니다.”)

except FileNotFoundError:

   print(“요청하신 파일을 찾을 수 없습니다.”)

except:

 print(“알 수 없는 오류가 발생 했습니다.”)

else:

   print(“오류가 발생하지 않았습니다.”)

 

 

7.1.4 pass (예외상황 회피)

 

예외 상황이 발생 했을 때 프로세스를 중단 하지 않으면서 예외사항을 무시하고 다음 단계로 넘어가기 위한 방법으로 아무일 없었다는 듯 하단 명령을 실행 합니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except OSError:

   print(“OS 오류가 발생 했습니다.”)

except FileNotFoundError:

   pass

 

 

7.1.5 as (오류 클래스 축약)

 

오류 클래스 명이 긴 경우 as를 이용하여 짧은 이름의  alias에 대입 하여 사용할 수 있습니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

except OSError as oe:

   print(oe)

except FileNotFoundError as e:

   print(e)

 

 

7.1.6 finally (무조건 실행)

 

try 블록을 실행 하는 동안 오류가 발생해서 프로그램이 종료 되더라도 꼭 실행을 해야 하는 명령어를 finally 블록에 추가 합니다.  대부분 리소스를 반납해야 하는 close 문들입니다.

try:

 fd = open(“filename.txt”, ‘r’)

   line = fd.readline()

finally:

   fd.close()

 

 

 

7.2 예외 만들기

 

raise를 이용하면 사용자가 임의로 예외를 발생시킬 수 있습니다.


7.2.1 내부 예외 클래스 호출


내부에 정의된 예외사항을 사용자가 임의로 호출하여 사용할 수 있습니다.

a = 100

 

if a <= 150:

           try:

                     raise ValueError

                     b = 2500 / a

           except ZeroDivisionError:

                     print("zero div")

           except ValueError:

                     print("number small")

결과

(base) F:\Python>python except001.py

number small

 

7.2.2 사용자 정의 예외 클래스 호출


사용자가 직접 Exception 클래스를 상속받아 새로운 예외 클래스를 생성하여 호출할 수 있습니다.

class UserError(Exception):

           def __init__(self, value):

                     self.value = value

           def __str__(self):

                     return self.value

 

# 신규 예외사항 사용

a = 100

 

if a <= 150:

           try:

                     raise UserError("Number error")

                     b = 2500 / a

           except ZeroDivisionError:

                     print("zero div")

결과

(base) F:\Python>python except002.py

Traceback (most recent call last):

  File "except002.py", line 12, in <module>

    raise UserError("Number error")

__main__.UserError: Number error

 

 

7.3 with

 

with문은 예외처리 라기 보다는 미리 후선 마무리 작업이 정의되어 있는 명령어 입니다.

with open(“filename.txt”) as fd:

    for line in fd:

        print(line, end="")

 

with문은 Object.enter를 호출하고 자동으로 Object.exit를 호출 하도록 만들어진 것으로 별도의 처리를 해주지 않아도 됩니다.

 

 

7.4 Exception 구조 (Python 3.7)

 

파이썬 내장 예외사항 클래스 계층 구조 입니다.  필요한 예외사항이 있으면 사용하면 됩니다.

BaseException

 +-- SystemExit

 +-- KeyboardInterrupt

 +-- GeneratorExit

 +-- Exception

      +-- StopIteration

      +-- StopAsyncIteration

      +-- ArithmeticError

      |    +-- FloatingPointError

      |    +-- OverflowError

      |    +-- ZeroDivisionError

      +-- AssertionError

      +-- AttributeError

      +-- BufferError

      +-- EOFError

      +-- ImportError

      |    +-- ModuleNotFoundError

      +-- LookupError

      |    +-- IndexError

      |    +-- KeyError

      +-- MemoryError

      +-- NameError

      |    +-- UnboundLocalError

      +-- OSError

      |    +-- BlockingIOError

      |    +-- ChildProcessError

      |    +-- ConnectionError

      |    |    +-- BrokenPipeError

      |    |    +-- ConnectionAbortedError

      |    |    +-- ConnectionRefusedError

      |    |    +-- ConnectionResetError

      |    +-- FileExistsError

      |    +-- FileNotFoundError

      |    +-- InterruptedError

      |    +-- IsADirectoryError

      |    +-- NotADirectoryError

      |    +-- PermissionError

      |    +-- ProcessLookupError

      |    +-- TimeoutError

      +-- ReferenceError

      +-- RuntimeError

      |    +-- NotImplementedError

      |    +-- RecursionError

      +-- SyntaxError

      |    +-- IndentationError

      |         +-- TabError

      +-- SystemError

      +-- TypeError

      +-- ValueError

      |    +-- UnicodeError

      |         +-- UnicodeDecodeError

      |         +-- UnicodeEncodeError

      |         +-- UnicodeTranslateError

      +-- Warning

           +-- DeprecationWarning

           +-- PendingDeprecationWarning

           +-- RuntimeWarning

           +-- SyntaxWarning

           +-- UserWarning

           +-- FutureWarning

           +-- ImportWarning

           +-- UnicodeWarning

           +-- BytesWarning

           +-- ResourceWarning

 

- copy coding -


6.3 내장 함수

 

앞의 예제에서 print 또는 del을 사용해 보았는데 이렇게 파이썬 내부에 정의되어 있는 함수를 내장 함수라 부릅니다그리고 내장 함수는 이미 존재하고 있는 함수로 import로 불러오지 않고 바로 호출해서 사용할 수 있는 함수 입니다.

함수는 이름만 잘 만들어도 반은 먹고 들어간다고 했는데 그 말이 사살인지 확인해 볼까요?

 


6.3.1 abs 


음수, 양수 관계없이 단순히 크기만을 나타내기 때문에 음수를 양수로 변환 하는데 사용하기도 합니다.

>>> abs(3)

3

>>> abs(-3)

3

>>> abs(0.0002)

0.0002

>>> abs(-0.0002)

0.0002

 

 

6.3.2 all


자료형을 입력 받아 내부 요소가 모두 참이면 True를 리턴 하고 하나라도 거짓이 있으면 False를 리턴 합니다.

>>> all([1,2,3])

True

>>> all([4,5,1,3])

True

>>> all([4,5,1,0,3])

False

>>> all(('a', 'b', 'c'))

True

>>> all(('a', 'b', 'c', ''))

False

   

python study



6.3.3 any


자료형을 입력 받아 내부 요소가 모두 거짓이면 False를 리턴 하고 하나라도 참이 있으면 True를 리턴 합니다.

>>> any([4,5,1,0,3])

True

>>> any(('', 0))

False


 

6.3.4 chr


아스키(ASCII) 코드값을 입력 받아 문자를 출력 합니다.

# 10 진수

>>> chr(112)

'p'

>>> chr(80)

'P'

# 16 진수

>>> chr(0x50)

'P'

>>> chr(0x70)

'p'

 

 

6.3.5 dir


dir는 입력 받은 객체에 대해 사용할 수 있는 변수와 메소드를 나열해 줍니다.

입력값이 숫자인 경우

>>> dir(1)

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

 

입력값이 문자인 경우

>>> dir('a')

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

 

 

6.3.6 divmod


함수 명에서도 알 수 있듯이 나눗셈의 몫과 나머지를 구하는 함수 입니다숫자가 2개 필요하고 결과를 튜플 형태로 리턴 합니다.

>>> divmod(20, 3)

(6, 2)


 

6.3.7 enumerate


리스트, 튜플, 문자열등을 입력 받아 인텍스와 함꼐 리턴 합니다.

>>> a = [1, 2, 3, 4, 5]

>>> for i, n in enumerate(a):

...   print(i, n)

...

0 1

1 2

2 3

3 4

4 5


  

6.3.8 eval


문자열을 명령어로 변환 하고 실행합니다변환된 명령어가 실행할 수 없으면 오류가 발생 합니다.

# 오류 발생

>>> eval('a' + 'b')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "<string>", line 1, in <module>

NameError: name 'ab' is not defined

 

# 정상 작동

>>> ab = 555

>>> eval('a' + 'b')

555


 

6.3.9 filter


filter(function, iterable)형태로 iterable 값들을 function을 통해 필터링 하여 결과 값을 반환 합니다. function에 어떤 조건의 데이터만 추출 하는지 정의가 되어야 합니다.

>>> def is_even(x):

...    if x % 2 == 0:

...       return True

...    else:

...       return False

...

>>> r = filter(is_even, [1,2, 3, 4, 5, 6,7])

>>> 

>>> for i in r:

...    print(i)

...

2

4

6

 

lambda도 함수와 같은 역할을 하고 반복 사용하지 않는다고 했는데 기억하시나요.

>>> r2 = list(filter(lambda x : x % 2 == 0,[1,2, 3, 4, 5, 6,7]))

>>> r2

[2, 4, 6]


 

6.3.10 hex


정수를 입력 받아 16진수를 리턴 합니다.

>>> hex(5)

'0x5'

>>> hex(10)

'0xa'

>>> hex(15)

'0xf'


 

6.3.11 id


입력된 객체의 주소값을 리턴 합니다.

>>> a = 'a'

>>> b = a

>>> id(a)

2998919036464

>>> id('a')

2998919036464

>>> id(b)

2998919036464

# a 값 변경

>>> a = 'b'

>>> id(a)

2998919034784

>>> id(b)

2998919036464

a, b, ‘a’는 모두 같은 주소를 바라보고 있습니다. a 값을 변경하면 a만 다른 주소를 바라보게 됩니다.


 

6.3.12 input


사용자로부터 입력값을 받아야 하는 경우 사용하며 input([prompt])를 이용하여 콘솔 창에 프롬프트가 나타나도록 할 수 있습니다.

>>> x = input()

Y

>>> x = input("계속 진행 하시겠습니까?(Y/N) :")

계속 진행 하시겠습니까?(Y/N) :Y

>>> x

'Y'


 

6.3.13 int


정수 형태의 문자나 정수, 실수 등을 입력 받아 정수를 반환 합니다반올림은 하지 않고 실수 형태의 문자는 오류가 발생 합니다.

>>> int('30')

30

>>> int('-45')

-45

>>> int(3.5444)

3

>>> int(-4.99999)

-4

>>> int('8.9999')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: invalid literal for int() with base 10: '8.9999'

 

다른 진수의 값을 10진수로 반환 합니다.

# 2진수 -> 10진수

>>> int('011', 2)

3

# 16진수 -> 10진수

>>> int('0xA', 16)

10

 


6.3.14 isinstance


isinstance(object, type) 형태로 사용하며 objecttype의 인스턴스 인가 확인하여 참이면 True, 거짓이면 False를 반환 합니다. type에는 복수의 데이터 형, 클래스 등이 포함될 수 있습니다.

# 정수가 정수냐?

>>> isinstance(3, int)

True

# 실수가 정수냐?

>>> isinstance(3.0, int)

False

# 실수가 정수 또는 실수냐?

>>> isinstance(3.0, (int, float))

True

# 클래스가 클래스냐?

>>> class OneClass:

...    a = 'aaa'

...

>>> b = OneClass()

>>> c = isinstance(b, OneClass)

>>> c

True

 


6.3.15 len


문자열의 길이 또는 요소의 개수를 리턴 합니다숫자의 개수는 구하지 못합니다.

>>> len('abcdefg')

7

>>> len([1, 2, 3, 4])

4

>>> len(['a', 'b', 'cc'])

3

>>> len((1, 2, 3, 4, 5))

5

>>> len(123)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: object of type 'int' has no len()

 


6.3.16 list


데이터를 입력 받아 list로 반환 합니다.

>>> list('abcdefg')

['a', 'b', 'c', 'd', 'e', 'f', 'g']

>>> list([1,2,3,4,5])

[1, 2, 3, 4, 5]

>>> list((1,2,3,4,5))

[1, 2, 3, 4, 5]


  

6.3.17 map


map(function, iterator)형태로 iterator의 요소들을 하나씩 function에 적용하여 값을 리턴 받아 옵니다.

>>> 

>>> def addFunc(n):

...    return n + n

...

>>> nums = (1, 2, 3, 4, 5)

>>> res = map(addFunc, nums)

>>> print(list(res))

[2, 4, 6, 8, 10]

 

lambda를 이용하여 function을 대체할 수 있습니다.

>>> nums = (1, 2, 3, 4, 5)

>>> result = map(lambda x: x + x, nums)

>>> print(list(result))

[2, 4, 6, 8, 10]

 


6.3.18 max


입력된 값 중 최대 값을 반환 합니다문자와 숫자는 비교할 수 없습니다.

>>> max("PYTHON python")

'y'

>>> max([1, 2, 3, 4.5])

4.5

  


6.3.19 min


입력된 값 중 최소 값을 반환 합니다. 문자와 숫자는 비교할 수 없고 문자 보다 blank가 작은 값입니다.


 

>>> min("PYTHON python")

' '

>>> min([1, 2, 3, 4.5])

1



6.3.20 oct


정수를 입력 받아 8진수로 변환 하여 리턴 합니다.

>>> oct(8)

'0o10'

>>> oct(10)

'0o12'

 


6.3.21 open


open(filename, [mode])의 형태로 filename의 파일을 오픈 합니다오픈 하는 조건은 mode에 따라 달라집니다모드가 생략 되면 읽기 모드로 오픈 합니다.

f = open(“test_file”, “r”)

 

 

6.3.22 ord


문자를 입력 받아 ASCII 코드의 10진수 번호로 리턴 합니다. chr()와 반대 개념입니다.

>>> ord('a')

97

>>> ord('A')

65


 

6.3.23 pow


pow(x, y)x의 값을 y만큼 제곱한 결과를 리턴 합니다.

>>> pow(2, 3)

8

>>> pow(3, 3)

27

 


6.3.24 range


range([start,] stop [,step])의 형태로 일련 번호를 리턴 하며 인수가 하나, , 셋 모두 선택적으로 사용 가능 합니다.


- 인수가 하나인 경우

0 부터 stop 보다 작으며 1씩 증가 하는 값. (0 <= list < stop) 

>>> range(10)

range(0, 10)

>>> list(range(10))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

- 인수가 둘 경우

start 부터 stop 보다 작으며 1씩 증가 하는 값. (start <= list < stop)

>>> range(5, 10)

range(5, 10)

>>> list(range(5, 10))

[5, 6, 7, 8, 9]

 

- 인수가 셋 경우

start 부터 stop 보다 작으며 step씩 증가 하는 값. (start <= list < stop)

. >>> range(5, 10, 2)

range(5, 10, 2)

>>> list(range(5, 10, 2))

[5, 7, 9]

 

 

6.3.25 round


round(number[, ndigits])의 형태로 자릿수가 생략 되면 반올림 한 값을 리턴하고 자릿수가 입력 되면 정해진 자릿수 까지 반올림 된 값으로 표현 합니다.

>>> round(3.5)

4

>>> round(4)

4

>>> round(4.55555, 3)

4.556

 

6.3.26 sorted


입력값을 정렬하여 리턴 하는 함수 입니다.

>>> sorted("python")

['h', 'n', 'o', 'p', 't', 'y']

>>> sorted(['a', 'd', 'b', 'k', 'c'])

['a', 'b', 'c', 'd', 'k']

>>> sorted([5,7,2,4,6,8])

[2, 4, 5, 6, 7, 8]

>>> sorted([5,7,2,4,6,8,2])

[2, 2, 4, 5, 6, 7, 8]

>>> sorted((5,7,2,4,6,8,2))

[2, 2, 4, 5, 6, 7, 8]

 

 

6.3.27 str


입력 받은 값을 문자열 형태로 반환 합니다숫자를 문자와 결합 할 수 있습니다.

>>> str(123)

'123'

>>> str(345) + "abc"

'345abc'

>>> str("python".upper())

'PYTHON'

 

6.3.28 sum


입력된 값을 모두 더한 합을 리턴 합니다.

>>> sum((1, 2, 3))

6

>>> sum([1, 2, 3])

6

 

6.3.29 tuple


입력된 값을 튜플로 형변환 하여 반환 합니다.

>>> tuple("python")

('p', 'y', 't', 'h', 'o', 'n')

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

(1, 2, 3)

>>> tuple(('a', 'b', 'c'))

('a', 'b', 'c')

 

6.3.30 type


입력 값의 자료형을 리턴 합니다.

>>> type('a')

<class 'str'>

>>> type(1)

<class 'int'>

>>> type([])

<class 'list'>

 

 

6.3.31 zip


반복형 데이트를 튜플 형태의 쌍으로 묶어 리턴 합니다.

>>> a = [1, 2, 3, 4, 5]

>>> b = ['a', 'b', 'c', 'd', 'e']

>>> for i in zip(a, b):

...    print(i)

...

(1, 'a')

(2, 'b')

(3, 'c')

(4, 'd')

(5, 'e')

>>> list(zip(a, b))

[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]

 

서로 쌍의 개수가 맞지 않으면 작은 요소의 수에 맞줍니다.

>>> a = [1, 2, 3, 4, 5]

>>> b = ['a', 'b', 'c', 'd']

>>> list(zip(a, b))

[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]


- copy coding -


12345

+ Recent posts