-함수를 작성하는 방법과 모듈을 작성하는 방법을 학습한다.
-함수,모듈로 이전에 만든 웹어플리케이션 예제를 리팩토링 해본다.
-생활코딩 파이썬 강의를 바탕으로 학습 및 보충학습 하였다.
-파이썬은 3.9.2 ver를 사용한다.
함수 사용법
파이썬에서 함수 작성법은 다음과 같다.
def 함수명():
코드...
평균값을 구하는 함수를 작성하면 다음과 같다.
func.py
#평균을 구하는 함수
def average(a,b,c):
s=a+b+c
r=s/3
return r
#합을 구하는 함수
def plus(a,b):
return a+b
#pi값
pi = 3.14
#평균값 출력
print(average(10,20,30))
def라는 키워드는 함수의 시작을 의미한다. average() 함수를 예로 살펴보면, 함수명은 average이고 괄호 안에는 입력받은 파라미터를 정의한다. a,b,c라는 파라미터를 받아 내부 로직을 돌린 후 평균값을 return하는 함수이다.
모듈 사용법
위의 함수를 다른 곳에서 사용하려면 모듈을 사용하는 것이 효율적이다. 같은 함수를 복붙하여 사용하면 중복이 발생하기 때문이다. 모듈은 함수를 정의해둔 후 import하여 사용하면 된다. 아래와 같이 mathModule.py 파일에 함수를 정의해둔 후 module.py 파일에서 불러와서 사용해봤다.
mathModule.py
def average(a,b,c):
s=a+b+c
r=s/3
return r
def plus(a,b):
return a+b
pi = 3.14
module.py
import mathModule #함수들을 정의한 mathModule 모듈 파일을 불러온다
#mathModule.함수명()의 방식으로 사용
print(mathModule.average(1,2,3))
print(mathModule.plus(1,2))
print(mathModule.pi)
함수 및 모듈 활용
이전 포스트에서 만든 웹어플리케이션 예제의 코드들을 함수와 모듈을 사용하여 정리한다. 기존 코드는 다음과 같다.
index.py
#!Python
print("Content-Type: text/html")
print()
#1.모듈
import cgi, os
#2.목록 리스트 셋팅하기
files = os.listdir('data') #[CSS,HTML,JavaScript]
listStr = ''
for item in files:
listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
#3.a태그 클릭시 id값에 따른 pageId 분기처리
form = cgi.FieldStorage()
if 'id' in form:
pageId = form["id"].value
description = open('data/'+pageId,'r').read() #open함수로 내용 불러오기
update_link = '<a href="update.py?id={}">update</a>'.format(pageId)
delete_action= '''
<form action="process_delete.py" method="post">
<input type="hidden" name="pageId" value="{}">
<input type="submit" value="delete">
</form>
'''.format(pageId) #delete버튼을 form방식으로 만든다
else :
pageId = 'welcome'
description = 'Welcome!'
update_link = ''
delete_action = ''
#4.화면 그리기
print('''<!doctype html>
<html>
<head>
<title>WEB1 - Welcome</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="index.py">WEB</a></h1>
<ol>
{listStr}
</ol>
<a href="create.py">create</a>
{update_link}
{delete_action}
<h2>{title}</h2>
<p>{desc}
</p>
</body>
</html>
'''.format(
title=pageId,
desc=description,
listStr=listStr,
update_link=update_link,
delete_action=delete_action))
create.py
#!Python
print("Content-Type: text/html")
print()
#1.모듈
import cgi, os
#2.목록 리스트 셋팅하기
files = os.listdir('data') #[CSS,HTML,JavaScript]
listStr = ''
for item in files:
listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
#3.a태그 클릭시 id값에 따른 pageId 분기처리
form = cgi.FieldStorage()
if 'id' in form:
pageId = form["id"].value
description = open('data/'+pageId,'r').read() #open함수로 내용 불러오기
else :
pageId = 'welcome'
description = 'Welcome!'
#4.화면 그리기
print('''<!doctype html>
<html>
<head>
<title>WEB1 - Welcome</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="index.py">WEB</a></h1>
<ol>
{listStr}
</ol>
<a href="create.py">create</a>
<form action="process_create.py" method="post">
<p><input type="text" name="title" placeholder="title"></p>
<p><textarea rows="4" name="description" placeholder="description"></textarea></p>
<p><input type="submit"></p>
</form>
<h2>{title}</h2>
<p>{desc}
</p>
</body>
</html>
'''.format(
title=pageId,
desc=description,
listStr=listStr))
update.py
#!Python
print("Content-Type: text/html")
print()
#1.모듈
import cgi, os
#2.목록 리스트 셋팅하기
files = os.listdir('data') #[CSS,HTML,JavaScript]
listStr = ''
for item in files:
listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
#3.a태그 클릭시 id값에 따른 pageId 분기처리
form = cgi.FieldStorage()
if 'id' in form:
pageId = form["id"].value
description = open('data/'+pageId,'r').read() #open함수로 내용 불러오기
else :
pageId = 'welcome'
description = 'Welcome!'
#4.화면 그리기
print('''<!doctype html>
<html>
<head>
<title>WEB1 - Welcome</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="index.py">WEB</a></h1>
<ol>
{listStr}
</ol>
<a href="create.py">create</a>
<form action="process_update.py" method="post">
<input type="hidden" name="pageId" value="{form_default_title}">
<p><input type="text" name="title" placeholder="title" value="{form_default_title}"></p>
<p><textarea rows="4" name="description" placeholder="description">{form_default_description}</textarea></p>
<p><input type="submit"></p>
</form>
<h2>{title}</h2>
<p>{desc}
</p>
</body>
</html>
'''.format(
title=pageId,
desc=description,
listStr=listStr,
form_default_title=pageId, form_default_description=description))
예제 웹어플리케이션 화면은 아래와 같다.
위의 코드로 작성된 화면을 함수 및 모듈을 사용하여 정리하려고 한다. index.py와 create.py, update.py 모두 작성법이 같으므로 index.py만 예시로 정리한다. 우선 index.py에서 목록 리스트를 불러오는 함수를 아래와 같이 함수화한 후, format을 수정한다.
index.py 일부
#2.목록 리스트 셋팅하기(함수화)
def getList():
files = os.listdir('data') #[CSS,HTML,JavaScript]
listStr = ''
for item in files:
listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
return listStr
#4.화면 그리기(format 수정)
print('''<!doctype html>
<html>
<head>
<title>WEB1 - Welcome</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="index.py">WEB</a></h1>
<ol>
{listStr}
</ol>
<a href="create.py">create</a>
{update_link}
{delete_action}
<h2>{title}</h2>
<p>{desc}
</p>
</body>
</html>
'''.format(
title=pageId,
desc=description,
listStr=getList(), #listStr에 위에서 정의한 getList()함수를 넣어준다
update_link=update_link,
delete_action=delete_action))
위와같이 함수를 통하여 정리가 가능하다. 그러나 update.py 등에서도 위와 같이 똑같이 정의해야하는데 중복이 발생하기 때문에 모듈을 만들어 모듈에 함수를 정의한 후 import해서 사용하는 것이 좋을 것이다. 아래와 같이 view.py라는 모듈 파일을 만든 후 getList()함수를 정의한다. 이후 view 모듈을 불러와 사용한다.
view.py
import os
#2.목록 리스트 셋팅하기(모듈에서 불러오기)
def getList():
files = os.listdir('data') #[CSS,HTML,JavaScript]
listStr = ''
for item in files:
listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
return listStr
모듈화를 하여 완성된 index.py는 아래와 같다.
index.py
#!Python
print("Content-Type: text/html")
print()
#1.모듈
import cgi, os, view #우리가 만든 view 모듈을 import
#3.a태그 클릭시 id값에 따른 pageId 분기처리
form = cgi.FieldStorage()
if 'id' in form:
pageId = form["id"].value
description = open('data/'+pageId,'r').read() #open함수로 내용 불러오기
update_link = '<a href="update.py?id={}">update</a>'.format(pageId)
delete_action= '''
<form action="process_delete.py" method="post">
<input type="hidden" name="pageId" value="{}">
<input type="submit" value="delete">
</form>
'''.format(pageId) #delete버튼을 form방식으로 만든다
else :
pageId = 'welcome'
description = 'Welcome!'
update_link = ''
delete_action = ''
#4.화면 그리기
print('''<!doctype html>
<html>
<head>
<title>WEB1 - Welcome</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="index.py">WEB</a></h1>
<ol>
{listStr}
</ol>
<a href="create.py">create</a>
{update_link}
{delete_action}
<h2>{title}</h2>
<p>{desc}
</p>
</body>
</html>
'''.format(
title=pageId,
desc=description,
listStr=view.getList(), #view모듈에서 getList() 호출
update_link=update_link,
delete_action=delete_action))
index.py에서 작성한 getList()함수를 view.py로 옮겨서 import하여 사용한다. format을 보면 veiw.getList()로 호출하여 사용하는 것을 확인할 수 있다. 127.0.0.1/index.py를 실행하면 위와 같이 똑같은 화면이 나옴을 확인할 수 있다.
'개발자 일지 > Phython' 카테고리의 다른 글
[인프런]파이썬 알고리즘 기초 문법 정리2 (0) | 2021.04.18 |
---|---|
[인프런]파이썬 알고리즘 기초 문법 정리1 (0) | 2021.04.11 |
[파이썬 기초] XSS(Cross-Site Scripting) 개념 및 방어 방법 (0) | 2021.04.04 |
[파이썬 기초]form 데이터 전송 및 처리방법(CRUD-Delete) (0) | 2021.03.24 |
[파이썬 기초]form 데이터 전송 및 처리방법(CRUD-Update) (0) | 2021.03.24 |
[파이썬 기초]form 데이터 전송 및 처리방법(CRUD-Create,Read) (0) | 2021.03.21 |
[파이썬 기초]반복문(for,range,while) 및 반복문 활용 (0) | 2021.03.19 |
[파이썬 기초]데이터타입 - list, 기타 컨테이너 타입(튜플,딕셔너리) (0) | 2021.03.16 |