파이썬: 입출력(함수)

Ju_Nik_e·2023년 4월 25일

PYTHON

목록 보기
3/9

함수

  • 입력값을 가지고 어떤 일을 수행 후 그 결과물을 내놓는 것

    입력값 ---> 함수 ----> 리턴값

함수를 사용하는 이유

  • 반복적으로 사용되는 가치있는 부분을 한 뭉치로 묶어서 편하게 사용가능
  • 프로그램 흐름과 오류 파악 용이

파이썬 함수의 구조

def 함수명(매개변수):
    <수행할 문장1>
    <수행할 문장2>
    ...

이 함수의 이름은 add이고 입력으로 2개의 값을 받으며 리턴(출력)값은 2개의 입력값을 더한 값 이다.

def add(a, b): 
    return a + b
  • 아래와 같이 함수를 변수에 담을 수 있음
>>> a = 3
>>> b = 4
>>> c = add(a, b)
>>> print(c)
7

매개변수와 인수

  • 매개변수 : 함수에 전달된 값을 저장하는 변수
  • 인수 : 전달하는 값
def add(a, b):  # a, b는 매개변수
    return a+b

print(add(3, 4))  # 3, 4는 인수

함수의 형태

  • 입력값과 리턴값의 존재 유무에 따라 4가지 유형으로 나뉨

1. 일반적인 함수

  • 입력값이 있고 리턴값이 있는 일반적인 함수
def 함수이름(매개변수):
    <수행할 문장>
    ...
    return 리턴값

예시

def add(a, b): 
    result = a + b 
    return result
>>> a = add(3, 4)
>>> print(a)
7

2. 입력값이 없는 함수

  • 파라미터를 쓰지 말아야함.

예시

>>> def say(): 
...     return 'Hi' 
>>> a = say()
>>> print(a)
Hi

3. 리턴값이 없는 함수

예시

>>> def add(a, b): 
...     print("%d, %d의 합은 %d입니다." % (a, b, a+b))
... 
>>>
  • 위 코드를 실행하려면 아래와 같이 실행해야 함.
>>> add(3, 4)
3, 4의 합은 7입니다.
  • 해당 함수를 변수에 담아 print하면 아무 값도 반환하지 못함.

4. 입력값도 리턴값도 없는 함수

>>> def say(): 
...     print('Hi')
... 
>>>
  • 사용하려면 함수이름에 아무 파라미터도 넣지 않는 방법밖에 없음
>>> say()
Hi

매개변수 지정하여 호출하기

  • 함수를 호출하면서 매개변수를 지정할 수 있음
  • 순서에 상관없이 사용할 수 있음
>>> def sub(a, b):
...     return a - b
>>> result = sub(b=5, a=3)  # b에 5, a에 3을 전달
>>> print(result)
-2

입력값의 갯수가 정해지지 않은 함수

기본형태

  • 괄호 안의 매개변수 부분에 *을 붙혀 주면 됨
def 함수이름(*매개변수): 
    <수행할 문장>
    ...

예시

  • add_many(1, 2)이면 3을, add_many(1,2,3)이면 6을, add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)이면 55를 리턴하는 함수
>>> def add_many(*args): 
...     result = 0 
...     for i in args: 
...         result = result + i 
...     return result 
... 
  • 2개 이상의 매개변수도 사용 가능
>>> def add_mul(choice, *args): 
...     if choice == "add": 
...         result = 0 
...         for i in args: 
...             result = result + i 
...     elif choice == "mul": 
...         result = 1 
...         for i in args: 
...             result = result * i 
...     return result
>>> result = add_mul('add', 1,2,3,4,5)
>>> print(result)
15
>>> result = add_mul('mul', 1,2,3,4,5)
>>> print(result)
120

함수의 리턴값

  • 함수의 리턴값은 언제나 하나임.
  • 아래와 같이 2개 이상의 값을 리턴할 경우, 튜플형태로 저장돼서 리턴함.
>>> def add_and_mul(a,b): 
...     return a+b, a*b
>>> result = add_and_mul(3,4)
result = (7, 12)
  • return 명령어를 2개 이상 사용하더라도, 첫 return문을 만나는 순간 리턴값을 돌려준 후 함수를 빠져나감.

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

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

vartest(a)
print(a)
1
  • 위와 같이 함수 안에서 사용하는 매개변수는 함수 밖의 변수 이름과는 전혀 상관이 없음.

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

1. return 사용하기

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

a = vartest(a)
print(a)
  • 위 식에서도 vartest 함수 안의 a 매개변수는 함수 밖의 a와는 다름

2. global 명령어 사용

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

vartest() 
print(a)
  • global a문장은 함수 안에서 함수 밖에서 a 변수를 직접 사용하겠다는 뜻.

lambda식

  • 함수 생성 시 사용하는 예약어로 def와 동일한 역할
  • 복잡하지 않은 함수나, 함수를 한줄로 간결하게 만들 때 사용.

    함수명= = lambda 매개변수1, 매개변수2, ...: 매개변수를 이용한 표현식

예시

>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7
  • lambda함수는 return 명령어가 없어도 표현식의 결괏값을 리턴함

입출력

사용자 입력

input()

  • 사용자가 키보드로 입력한 모든 것을 문자열로 저장
>>> a = input()
Life is too short, you need python
>>> a
'Life is too short, you need python'

출력

연속되는 큰따옴표 문자열

    • 연산과 동일
>>> print("life" "is" "too short") # 1
lifeistoo short
>>> print("life"+"is"+"too short") # 2
lifeistoo short

띄어쓰기는 콤마로 표현

>>> print("life", "is", "too short")
life is too short

한 줄로 결괏값 출력하기

>>> for i in range(10):
...     print(i, end=' ')
...
0 1 2 3 4 5 6 7 8 9
  • end의 기본값은 줄바꿈(\n)임.

파일 읽고 쓰기

파일 생성

파일 객체 = open(파일 이름, 파일 열기 모드)
f = open("새파일.txt", 'w')
  • 파일이름 뒤에 붙는 것은 파일 열기 모드임
    r : 읽기모드
    w : 쓰기모드(해당 파일이 존재할 경우 원래 있던 내용이 모두 사라지고, 존재하지 않으면 새로운 파일 생성)
    a : 추가모드(파일의 마지막에 새로운 내용 추가)

경로지정 후 생성하기

f = open("C:/doit/새파일.txt", 'w')

내용 작성하기

# writedata.py
f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()
  • write() 함수를 이용해서 글 작성가능
  • close() 함수로 닫아줘야 함, 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류 발생

파일 읽기

readline 함수

# readline_test.py
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
  • 해당 파일의 가장 첫 번째 줄만 가져옴

readlines 함수

f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()
  • 해당 파일의 모든 줄을 읽어서 각 줄을 리스트 형식으로 리턴함.

read 함수

f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()
  • 파일 내용 전체를 문자열로 리턴

내용추가하기

f = open("C:/doit/새파일.txt",'a')
for i in range(11, 20):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()
  • a를 사용해야만, 파일 내용을 유지한 채 뒤에 내용을 추가함

with문으로 사용하기

f = open("foo.txt", 'w')
f.write("Life is too short, you need python")
f.close()
  • 위 식의 close함수를 대신해주는 것이 with문으로 아래와 같이 사용함
with open("foo.txt", "w") as f:
    f.write("Life is too short, you need python")

0개의 댓글