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()