04-1 함수

파이썬 함수의 구조

def 함수명(입력 인수):
    <수행할 문장1>
    <수행할 문장2>
    ...
In [1]:
def sum(a, b):
    return a+b

a = 3
b = 4
c = sum(a, b)

print(c)
7

입력값과 결과값에 따른 함수의 형태

  • 일반적인 함수: 위 예제의 sum 함수
  • 입력값이 없는 함수
  • 결과값이 없는 함수
  • 입력값도 결과값도 없는 함수
In [2]:
# 입력값이 없는 함수

def say():
    return 'Hi'

a = say()

print(a)
Hi
In [3]:
# 결과값이 없는 함수

def sum(a, b):
    print("%d, %d의 합은 %d입니다." % (a, b, a+b))
    
sum(3, 4)
3, 4의 합은 7입니다.
In [4]:
a = sum(3, 4)

print(a)
3, 4의 합은 7입니다.
None
In [5]:
# 입력값도 결과값도 없는 함수

def say():
    print('Hi')
    
say()
Hi

입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?

  • 괄호 안의 입력 인수 부분이 *입력변수 로 바뀐다.
  • 입력변수 앞에 * 를 붙이면 입력값들을 전부 모아 튜플로 만들어서 전달해 준다.
def 함수이름(*입력변수):
    <수행할 문장>
    ...
In [7]:
# 여러 개의 입력값을 받는 함수 만들기

def sum_many(*args):
    sum = 0
    
    for i in args:
        sum = sum + i
        
    return sum
In [8]:
result = sum_many(1, 2, 3)
print(result)
6
In [9]:
result = sum_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(result)
55
In [14]:
# 고정 인자와 유동 인자 같이 사용하기

def sum_mul(choice, *args):
    if choice == "sum":
        result = 0
        for i in args:
            result += i
    elif choice == "mul":
        result = 1
        for i in args:
            result *= i
            
    return result
In [15]:
result = sum_mul("sum", 1, 2, 3, 4, 5)
print(result)
15
In [16]:
result = sum_mul("mul", 1, 2, 3, 4, 5)
print(result)
120

함수의 결과값은 언제나 하나이다

  • return 문이 하나이다.
In [17]:
# 결과값을 튜플로 반환하게 된다.

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

result = sum_and_mul(3, 4)

print(result)
(7, 12)
In [18]:
# 별도의 변수로 받기

sum, mul = sum_and_mul(3, 4)

print(sum)
print(mul)
7
12
In [19]:
# return 문이 두개일 경우 오류는 발생하지 않고, 첫번째 return 문만 실행한다.

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

result = sum_and_mul(3, 4)

print(result)
7

입력 인수에 초기값 미리 설정하기

  • 입력값을 주지 않는 경우 초기값을 설정하는 방법
  • 초기값을 설정해 놓은 인수 뒤에 초기값을 설정하지 않은 입력 인수는 사용할 수 없다.
In [1]:
def say_myself(name, old, man=True):
    print("나의 이름은 %s 입니다" % name)
    print("나이는 %d 살입니다" % old)
    
    if man:
        print("남자입니다")
    else:
        print("여자입니다")
        
say_myself("박응용", 27)
나의 이름은 박응용 입니다
나이는 27 살입니다
남자입니다
In [2]:
say_myself("박응용", 27, True)
나의 이름은 박응용 입니다
나이는 27 살입니다
남자입니다
In [3]:
say_myself("박응용", 27, False)
나의 이름은 박응용 입니다
나이는 27 살입니다
여자입니다

함수 안에서 선언된 변수의 효력 범위

In [4]:
a = 1

def vartest(a):
    a = a + 1
    
vartest(a)

print(a) # 2가 아니고 1
1

함수 안에서 함수 밖의 변수를 변경하는 방법

  1. return 이용하기
  2. global 키워드 이용하기
In [5]:
# return 이용하기

a = 1

def vartest(a):
    a = a + 1
    return a

a = vartest(a)

print(a)
2
In [8]:
# global 키워드 이용하기

a = 1

def vartest():
    global a
    a = a + 1
    
vartest()

print(a)
2

04-2 사용자 입력과 출력

사용자 입력

  • input의 사용
  • 프롬프트를 띄워서 사용자 입력 받기
In [9]:
# input의 사용

a = input()

print(a)
Life is too short, you need Python!
Life is too short, you need Python!
In [10]:
# 프롬프트를 띄워서 사용자 입력 받기

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

print(number)
숫자를 입력하세요: 3
3
  • 큰 따옴표(")로 둘러싸인 문자열은 + 연산과 동일하다.
In [11]:
print("life" "is" "too short")
print("life"+"is"+"too short")
lifeistoo short
lifeistoo short
  • 문자열 띄어쓰기는 콤마로 한다.
In [13]:
print("lift", "is", "too short")
lift is too short
  • 한 줄에 결과값 출력하기
In [14]:
for i in range(10):
    print(i, end=' ')
0 1 2 3 4 5 6 7 8 9 

04-3 파일 읽고 쓰기

파일 생성하기

  • 파일을 생성하기 위해서는 open 이라는 파이썬 내장함수를 사용한다.
  • open 함수는 "파일 이름"과 "파일 열기 모드"를 입력값으로 받고 파일 객체를 돌려준다.

파일 객체 = open(파일 이름, 파일 열기 모드)

  • 파일 열기 모드
파일 열기 모드 설명
r 읽기모드 - 파일을 읽기만 할 때 사용
w 쓰기모드 - 파일에 내용을 쓸 때 사용
a 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용
  • 파일을 쓰기 모드로 열게 되면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다.
f = open("C:/Python/새파일.txt", 'w')
f.close()

파일을 쓰기 모드로 열어 출력값 적기

In [1]:
for i in range(1, 11):
    data = "%d 번째 줄입니다.\n" % i
    print(data)
1 번째 줄입니다.

2 번째 줄입니다.

3 번째 줄입니다.

4 번째 줄입니다.

5 번째 줄입니다.

6 번째 줄입니다.

7 번째 줄입니다.

8 번째 줄입니다.

9 번째 줄입니다.

10 번째 줄입니다.

In [2]:
%ls
01장 파이썬이란 무엇인가?.ipynb
02장 파이썬 프로그래밍의 기초, 자료형.ipynb
03장 프로그램의 구조를 쌓는다! 제어문.ipynb
04장 프로그램의 입력과 출력은 어떻게 해야 할까?.ipynb
In [3]:
# 위 프로그램을 파일로 쓰면 다음과 같다.

f = open("04-새파일.txt", 'w')

for i in range(1, 11):
    data = "%d 번째 줄입니다.\n" % i
    f.write(data)

f.close()
In [4]:
%ls
01장 파이썬이란 무엇인가?.ipynb
02장 파이썬 프로그래밍의 기초, 자료형.ipynb
03장 프로그램의 구조를 쌓는다! 제어문.ipynb
04-새파일.txt
04장 프로그램의 입력과 출력은 어떻게 해야 할까?.ipynb
In [5]:
%more 04-새파일.txt
In [7]:
with open("04-새파일.txt", "r") as f:
    print(f.read())
1 번째 줄입니다.
2 번째 줄입니다.
3 번째 줄입니다.
4 번째 줄입니다.
5 번째 줄입니다.
6 번째 줄입니다.
7 번째 줄입니다.
8 번째 줄입니다.
9 번째 줄입니다.
10 번째 줄입니다.

In [8]:
!more 04-새파일.txt
1 번째 줄입니다.
2 번째 줄입니다.
3 번째 줄입니다.
4 번째 줄입니다.
5 번째 줄입니다.
6 번째 줄입니다.
7 번째 줄입니다.
8 번째 줄입니다.
9 번째 줄입니다.
10 번째 줄입니다.
In [9]:
!ls
01장 파이썬이란 무엇인가?.ipynb
02장 파이썬 프로그래밍의 기초, 자료형.ipynb
03장 프로그램의 구조를 쌓는다! 제어문.ipynb
04-새파일.txt
04장 프로그램의 입력과 출력은 어떻게 해야 할까?.ipynb

프로그램의 외부에 저장된 파일을 읽는 여러가지 방법

In [10]:
# readline() 함수 이용하기

f = open("04-새파일.txt", "r")
line = f.readline()
print(line)
f.close()
1 번째 줄입니다.

In [12]:
f = open("04-새파일.txt", "r")

while True:
    line = f.readline()
    if not line: break
    print(line, end="")
f.close()
1 번째 줄입니다.
2 번째 줄입니다.
3 번째 줄입니다.
4 번째 줄입니다.
5 번째 줄입니다.
6 번째 줄입니다.
7 번째 줄입니다.
8 번째 줄입니다.
9 번째 줄입니다.
10 번째 줄입니다.
In [15]:
# readlines() 함수 이용하기

f = open("04-새파일.txt", "r")
lines = f.readlines()

for line in lines:
    print(line, end="")

f.close()
1 번째 줄입니다.
2 번째 줄입니다.
3 번째 줄입니다.
4 번째 줄입니다.
5 번째 줄입니다.
6 번째 줄입니다.
7 번째 줄입니다.
8 번째 줄입니다.
9 번째 줄입니다.
10 번째 줄입니다.
In [16]:
# read() 함수 이용하기

f = open("04-새파일.txt", "r")
data = f.read()
print(data)
f.close()
1 번째 줄입니다.
2 번째 줄입니다.
3 번째 줄입니다.
4 번째 줄입니다.
5 번째 줄입니다.
6 번째 줄입니다.
7 번째 줄입니다.
8 번째 줄입니다.
9 번째 줄입니다.
10 번째 줄입니다.

파일에 새로운 내용 추가하기

In [17]:
f = open("04-새파일.txt", "a")

for i in range(11, 20):
    data = "%d 번째 줄입니다.\n" % i
    f.write(data)
    
f.close()
In [18]:
!more 04-새파일.txt
1 번째 줄입니다.
2 번째 줄입니다.
3 번째 줄입니다.
4 번째 줄입니다.
5 번째 줄입니다.
6 번째 줄입니다.
7 번째 줄입니다.
8 번째 줄입니다.
9 번째 줄입니다.
10 번째 줄입니다.
11 번째 줄입니다.
12 번째 줄입니다.
13 번째 줄입니다.
14 번째 줄입니다.
15 번째 줄입니다.
16 번째 줄입니다.
17 번째 줄입니다.
18 번째 줄입니다.
19 번째 줄입니다.

with 문과 함께 사용하기

f = open("foo.txt", 'w')
f.write("Life is too short, you need Python")
f.close
  • 파일을 열면 위와 같이 항상 close 해 주는 것이 좋다.
  • 아래와 같이 with 문을 사용하면 with 블록을 벗어나는 순간 자동으로 close 된다.
with open("foo.txt", 'w') as f:
    f.write("Life is too short, you need Python")

[sys 모듈로 입력 인수 주기]

In [28]:
%%writefile 04-sys1.py
import sys

args = sys.argv[1:]

for i in args:
    print(i)
Overwriting 04-sys1.py
In [29]:
!ls
01장 파이썬이란 무엇인가?.ipynb
02장 파이썬 프로그래밍의 기초, 자료형.ipynb
03장 프로그램의 구조를 쌓는다! 제어문.ipynb
04-sys1.py
04-새파일.txt
04장 프로그램의 입력과 출력은 어떻게 해야 할까?.ipynb
In [30]:
%run 04-sys1.py aaa bbb ccc ddd eee
aaa
bbb
ccc
ddd
eee
In [31]:
%%writefile 04-sys2.py
import sys
args = sys.argv[1:]
for i in args:
    print(i.upper(), end=' ')
Writing 04-sys2.py
In [32]:
!ls
01장 파이썬이란 무엇인가?.ipynb
02장 파이썬 프로그래밍의 기초, 자료형.ipynb
03장 프로그램의 구조를 쌓는다! 제어문.ipynb
04-sys1.py
04-sys2.py
04-새파일.txt
04장 프로그램의 입력과 출력은 어떻게 해야 할까?.ipynb
In [33]:
%run 04-sys2.py life is too short, you need Python
LIFE IS TOO SHORT, YOU NEED PYTHON