이번에는 Python 함수에 대해서 알아보도록 하겠습니다.

함수

함수는 자주 사용되는 코드를 함수라는 형태로 만듦으로써 반복된 작업과 기하급수적으로 증가하는 코드량을 줄일 수 있습니다.

함수 구조

def 함수이름(매개 변수):
    처리 명령어
    return 반환 

함수 타입 #1 (매개변수: X, 리턴값: X)

def printMyName():
    print 'Jungwoon'

printMyName()

결과


Jungwoon

함수 타입 #2 (매개변수: O, 리턴값: X)


# coding=utf-8

def calculatePlus(a, b):
    print "Sum is %d" % (a + b)

calculatePlus(19, 32)

결과


Sum is 51

함수 타입 #3 (매개변수: X, 리턴값: O)


# coding=utf-8

def getMyBirthDay():
    return "12.05."

print 'My birth is %s' % getMyBirthDay()

결과


My birth is 12.05.

함수 타입 #4 (매개변수: O, 리턴값: O)


# coding=utf-8

def plus(a, b):
    return a + b

print 'Sum is %s' % plus(12, 78)

결과


Sum is 90

입력값이 정해지지 않았을때 (파이썬에 있는 특별한 기능)


# coding=utf-8


def plus(*values):
    tot = 0

    for value in values:
        tot = tot + value

    return tot


print 'Sum is %s' % plus(12, 78, 23, 44, 634)

결과


Sum is 791

return의 다른 사용법 (return의 의미)

# coding=utf-8


def sayNickname(nickname):

    if nickname == 'idiot':
        return

    return nickname


print 'My Nickname is %s' % sayNickname("Pretty")
print 'My Nickname is %s' % sayNickname("idiot")

결과

My Nickname is Pretty
My Nickname is None

여러개의 리턴값을 받기 (튜플 사용)

# coding=utf-8


def calculate(a, b):
    return a + b, a * b


print calculate(12, 23) # 결과값이 여러개일때는 '한 개'의 튜플로 받는다
print calculate(12, 23)[0] # 더하기한 결과 값만 가져오기
print calculate(12, 23)[1] # 곱하기한 결과 값만 가져오기

결과

(35, 276)
35

매개변수의 default값 설정하기

# coding=utf-8


def checkBreakfast(name, room, meal=True):
    print "Name : %s" % name
    print "Room : %d" % room

    if meal:
        print "include breakfast"
    else:
        print "no breakfast"

checkBreakfast("Jungwoon", 302)
print '--------------'
checkBreakfast("Bokyung", 303, False)

결과

Name : Jungwoon
Room : 302
include breakfast
--------------
Name : Bokyung
Room : 303
no breakfast

default를 준 매개변수 뒤에 따라오는 매개변수도 항상 default 값을 설정해야 한다

로컬 변수에 대한 개념

아래 사진과 같이 같은 이름이라도 블록에 따라서 변수가 영향을 미칠 수 있는 범위가 달라진다

global 명령어 이용

아래 소스와 같이 global를 명시함으로써 임의로 글로벌 변수를 사용할 수 있는데 비추

# coding=utf-8

a = 123

def checkLocalValue():
    global a # 글로벌 변수 a를 사용하겠다는 의미
    a = 32
    print a

checkLocalValue() 
print a

결과

32
32

Quiz) 계산기 만들기

문제) plus(), minus(), multiply(), divide() 를 다 구현하고 각각의 결과를 print() 문으로 출력하세요


input()를 이용하여 직접 입력받기

직접 특정 데이터를 입력 받아서 처리하고 싶을때가 있는데, 그때 input()을 쓰면 입력을 받을 수 있습니다.

기본 사용방법

data = input()
# coding=utf-8

data = input()

print data

결과

12
12

문구를 사용하여 입력받기

# coding=utf-8

number = input("숫자를 입력하세요: ")

print number

결과

숫자를 입력하세요: 2
2

Quiz) input()을 이용하여 입력받은 행만큼 아래 도형이 생기도록 코드를 작성하세요

    *
   ***
  *****
 *******
*********

print()의 다른 기능들

print()는 이미 많이 사용했겠지만, 이번에는 print()에 있는 다른 기능들을 설명하려고 합니다.


버전에 따른 print() 사용법

# coding=utf-8

print "Hello World" # version 2.x

print("Hello World") # version 3.x

한 줄 띄지 않고 옆에다 붙여서 사용하기

# coding=utf-8

#  version 2.x
for i in range(10):
    print i,


# version 3.x
for i in range(10):
    print(i, end=' ')

파일 읽고 쓰기

이번에는 실제 파일을 만드는 방법에 대해서 설명하려고 합니다.

기본 형식

# coding=utf-8

file = open("파일이름(확장자 포함)", '파일 열기 모드') # 파일 열어주기
file.write("데이터") # 파일 쓰기
file.read() # 파일 읽기 (파일의 내용 전체를 읽음)
file.readline() # 파일을 한 줄씩 읽음
file.close() # 위에서 open()을 해주었기 때문에 close() 해주어야 함

파일 열기 모드

리스트 튜플
r 읽기 모드
w 쓰기 모드
a 추가 모드 - 파일의 마지막에 새로운 내용 추가할때

파일 생성 예제

# coding=utf-8

newFile = open("/Users/jungwoon/PycharmProjects/Test/newFile.txt", 'w') # 쓰기모드로 파일 생성
newFile.close # 닫아주기


파일 쓰기 예제

# coding=utf-8

newFile = open("/Users/jungwoon/PycharmProjects/Test/newFile.txt", 'w')

for i in range(20):
    newFile.write("%d Hello World\n" % i)

newFile.close()


파일 읽기 예제 - read()

파일 전체를 string으로 읽어옵니다.

# coding=utf-8

newFile = open("/Users/jungwoon/PycharmProjects/Test/newFile.txt", 'r')
print newFile.read()
newFile.close()

결과

0 Hello World
1 Hello World
2 Hello World
3 Hello World
4 Hello World
5 Hello World
6 Hello World
7 Hello World
8 Hello World
9 Hello World
10 Hello World
11 Hello World
12 Hello World
13 Hello World
14 Hello World
15 Hello World
16 Hello World
17 Hello World
18 Hello World
19 Hello World

파일 읽기 예제 - readline()

한줄씩 읽어옵니다.

# coding=utf-8

newFile = open("/Users/jungwoon/PycharmProjects/Test/newFile.txt", 'r')
print newFile.readline()
newFile.close()

결과

0 Hello World

만약 여러번 호출하면 그 다음 줄을 읽어옵니다

# coding=utf-8

newFile = open("/Users/jungwoon/PycharmProjects/Test/newFile.txt", 'r')
print newFile.readline()
print newFile.readline()
print newFile.readline()
newFile.close()

결과

0 Hello World

1 Hello World

2 Hello World

readline()을 이용해서 전체 데이터 읽어오기

# coding=utf-8

newFile = open("/Users/jungwoon/PycharmProjects/Test/newFile.txt", 'r')

while True:
    line = newFile.readline()
    if not line: break;
    print line

newFile.close()

결과

0 Hello World

1 Hello World

2 Hello World

3 Hello World

4 Hello World

5 Hello World

6 Hello World

7 Hello World

8 Hello World

9 Hello World

10 Hello World

11 Hello World

12 Hello World

13 Hello World

14 Hello World

15 Hello World

16 Hello World

17 Hello World

18 Hello World

19 Hello World

파일 읽기 예제 - readlines()

readlines()는 한번에 라인을 리스트 형태로 가져옵니다.

# coding=utf-8

newFile = open("/Users/jungwoon/PycharmProjects/Test/newFile.txt", 'r')

lines = newFile.readlines()

for line in lines:
    print line

newFile.close()

결과

0 Hello World

1 Hello World

2 Hello World

3 Hello World

4 Hello World

5 Hello World

6 Hello World

7 Hello World

8 Hello World

9 Hello World

10 Hello World

11 Hello World

12 Hello World

13 Hello World

14 Hello World

15 Hello World

16 Hello World

17 Hello World

18 Hello World

19 Hello World

with문 사용하기

위에서는 파일을 open() 했으면 게속 close() 했어야 했는데, with를 사용하면 별도로 close() 하지 않아도 됩니다.

# coding=utf-8

with open("/Users/jungwoon/PycharmProjects/Test/newFile.txt", 'r') as newFile:
    lines = newFile.readlines()

    for line in lines:
        print line

결과

0 Hello World

1 Hello World

2 Hello World

3 Hello World

4 Hello World

5 Hello World

6 Hello World

7 Hello World

8 Hello World

9 Hello World

10 Hello World

11 Hello World

12 Hello World

13 Hello World

14 Hello World

15 Hello World

16 Hello World

17 Hello World

18 Hello World

19 Hello World