Programming 기초/Python

[Python 기초 #6] 함수, 사용자 입력과 출력, 파일 읽고 쓰기

코딩상륙작전 2023. 4. 19. 16:50

* 파이썬 함수의 구조

def 함수 이름(매개변수)
     수행할 문장1
     수행할 문장 2
     ...
  • def는 함수를 만들 때 사용하는 예약어(keyword)
  • 매개변수(parameter) : 함수에 입력으로 전달된 값을 받는 변수.
  • 인수(arguments) : 함수를 호출 할 때 전달하는 입력값.
  • 매개변수와 인수는 혼용해서 사용됨. 

 

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

  • 일반적인 함수 
결괏값을 받을 변수 = 함수 이름(입력 인수1, 입력 인수2, ...)
예)
def add(a, b):
     result = a + B
     result result                 # a+b의 결괏값 반환
  • 입력값이 없는 함수
결괏값을 받을 변수 = 함수 이름()
예)
def say():
     return 'Hi'
  • 결과값이 없는 함수
함수 이름(매개변수1, 매개변수2,...)
예)
def add(a,b):
     print("%d, %d의 합은 %d입니다." % (a, b, a+b))

>>>a = add(3,4)
3, 4의 합은 7입니다.
>>>print(a)
None                                # '거짓'값 출력됨.
  • 입력값도 결괏값도 없는 함수
함수 이름()
예)
def say():
     print('Hi')

 

* 입력값이 몇 개가 될지 모를 때 함수 정의법

def 함수이름(*매개변수):
     수행할 문장

매개변수 앞에 *을 붙인다.

def add_mul(choice, *args):		# 매개변수로 choice와 *args를 받음.
    if choice == "add":
        result = 0
        for i in args:
            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)

result = add_mul('mul', 1, 2, 3, 4, 5)
print(result)

 

* 키워드 파라미터

딕셔너리를 매개변수로 쓰고자 할 때 사용된다. 매개 변수 앞에 **이 붙는다.

def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(a=1)	#keyword =a, value =1 딕셔너리 입력

print_kwargs(name='foo', age=3)
-------------------------------------------
{'a': 1}
{'name': 'foo', 'age': 3}

 

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

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

result = add_and_mul(3, 4)
print(result)
-----------------------------
(7, 12) # 1개의 튜플 값으로 출력된다.

 

* 매개변수에 초깃값 미리 설정하기

- 초기화시키고 싶은 매개변수는 항상 뒤에 놓아야 한다.

def say_myself(name, age, man=True):
    print("나의 이름은 %s" % name)
    print("나이는 %d 입니다." % age)
    if man:
        print("남자입니다.\n")
    else:
        print("여자입니다.\n")


say_myself("김유빈", 20)
#say_myself("김유빈", 20, True)  두 문장은 완전히 같다.

say_myself("김유빈", 25, False)
---------------------------------
나의 이름은 김유빈
나이는 20 입니다.
남자입니다.

나의 이름은 김유빈
나이는 25 입니다.
여자입니다.

 

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

1. return 사용

2. global 명령어 사용 : 사용을 권장하지 않는다. 

- 리스트, 딕셔너리, 집합은 mutable(변할 수 있는 자료형)로, 함수 내에서 바뀐 값이 함수 밖에서도 바뀐다. C언어에서 '참조에 의한 호출'과 같은 개념으로, 포인터로 생각하면된다.

- 정수, 실수,  문자열, 튜플은 변하지 않는 자료형이다.

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

vartest()
print(a)
--------------------
2

 

* lambda

- 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다. 

- 보통 함수를 한 줄로 간결하게 만들 때 사용한다.

lambda 매개변수1, 매개변수2, .. : 매개변수를 사용한 표현식
>>> add=lambda a, b: a+b
>>> result = add(3,4)
>>> print(result)
7

 

* input()

a = input("내용을 입력하세요: ")	# input()로 써도 됨.
print(a)
------------------------------
내용을 입력하세요: life is too short, you need python
life is too short, you need python

 

*print()

print("Life" "is" "too short")
print("Life"+"is"+"too short")	# +연산은 위 문장과 동일하다.

print("Life", "is", "too short") # 문자열 띄어쓰기는 콤마로 한다.
----------------------------------
Lifeistoo short
Lifeistoo short
Life is too short

(복습) 한 줄에 결괏값 출력하기 - for 구문에서 배웠던 end=""

for i in range(10):
    print(i, end=" ")
---------------------
0 1 2 3 4 5 6 7 8 9

 

* 파일 읽고 쓰기

파일 객체 = open(파일 이름, 파일 열기 모드)
f = open("절대주소/새파일.txt", 'w') #절대주소에 '새파일'을 생성한다. 쓰기모드 w
f.close()	# 파일 객체를 닫아 주는 역할.
파일 열기 모드 설명
r 읽기 모드 - 파일을 읽기만 할 때 사용
w 쓰기 모드 - 파일에 내용을 쓸 때 사용
a 추가 모드 - 파일의 마지막에 새로운 내용을 추가할 때 사용

 

* 파일을 쓰기 모드로 열어 출력값 적기(w)

- 쓰기모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 된다. (추가할 때는 'a' 사용.)

f = open("C:/(절대주소)/새파일.txt", 'w', encoding="UTF-8")	# encoding 형식을 지정해준다.
for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)   # data를 파일 객체 f에 써라.
f.close()

 

* readline 함수 

- 외부 파일을 읽어 줄 단위로 출력

f = open("C:/(주소)/새파일.txt", 'r', encoding="UTF-8")
while True:
    line = f.readline()	# 첫 번째 줄을 읽고 그 다음 줄을 차례로 읽는다.
    if not line:
        break
    print(line)
f.close()

 

* readlines 함수

- 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 돌려준다.

f = open("C:/주소/새파일.txt", 'r', encoding="UTF-8")
lines = f.readlines()	#lines의 자료형은 '리스트'이다.
for line in lines:
    print(line.strip("\n"), end= " ")	# strip은 내용 제거모듈이다.
f.close()

 

* read 함수

파일의 내용 전체를 문자열로 돌려준다. 

f = open("C:/주소/새파일.txt", 'r', encoding="UTF-8")
data = f.read()	# data는 파일 전체 내용이다.
print(data)
f.close()

 

* 파일에 새로운 내용 추가하기(a)

f = open("C:/주소/새파일.txt", 'a', encoding="UTF-8")
for i in range(11, 20):	# 11부터 19까지 i에 대입
    data = "%d번째 줄입니다.\n" % i
    f.write(data)   # data를 파일 객체 f에 추가하라.
f.close()

 

* with문

- 파일을 열고 닫는 것을 자동으로 처리해주는 역할

- with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 close 된다.

with open("C:/주소/새파일.txt", 'a', encoding="UTF-8") as f:
    f.write("Life is too short, you need python\n")

위 문장과 아래 문장은 같은 문장이다.

f = open("C:/주소/새파일.txt", 'a', encoding="UTF-8")
f.write("Life is too short, you need\n")
f.close()