파이썬 스터디 2주차 : 함수, 사용자 입출력, 파일 읽고 쓰기
도전한 점
[목차]
04-1 함수
04-2 사용자 입출력
04-3 파일 읽고 쓰기
04-1 함수
Q. 기본 강의 + 점프투 듣고 궁금한 점 생김.
손이 아프니까 등의 이유로 def 함수를 만들고,
map은 하나하나 반복해주는 것인데
함수 + 반복문 하면 되는 거 아닌가?
프로그래밍에서의 함수는 입력 또는 출력이 없을 수 있다.
매개변수와 인수
def add(a, b): <- a, b는 매개변수
return a + b
print(add(3, 4)) <- 3, 4는 인수
매개변수 = parameter = 인자 = 파라미터 = 함수에서 정의되어 사용되는 변수
인수 = arguments = 함수를 호출할 때(사용할 때) 건네주는 변수
Q. 기본 강의 듣다가 None 값이 아래에 출력되었는데 이유를 알아냈다.
A. 리턴 값이 없는 함수였다. print 값이랑 임의로 만든 함수의 return 값은 다르다.
여러 개의 입력 값을 받는 함수 만들기
def add_many(*args):
저렇게 임의로 인수 줄임말을 넣었지만 통용되며 쓰이고 실상 별표시(*)가 기능을 한다.
인수에 몇 개의 값이 들어올지 모르겠으나, 몇 개라도 받아주겠다!라는 의미고 튜플로 만들어버린다.
튜플은 콤마로만 이루어진 순서형의 불변형 리스트형식 데이터 타입이고 할 수 있다.
키워드 매개변수 = **kwargs = (**)
def print_kwargs(**kwargs):
들어오는 값은 모두 딕셔너리로 받아주겠다는 의미이다. 딕셔너리로 만들어버린다.
return 이 없어도 None이 나오지 않음.
보통 print_kwargs(a=1, b=2) 가 주어졌을 때, 함수 내에서 'a', 'b'의 값을 따로 출력할 수 있다.
key와 value를 나눠서 활용할 때 쓴다.
def print_kwargs(**kwargs):
print(kwargs['a']) -> 값은 1
print(kwargs['b']) -> 값은 2
함수의 리턴 값은 몇개?
함수의 리턴 값은 언제나 하나이다. 함수 자체가 하나에서 종료되니까.
함수 안에 있는 a는 지역 변수고, 함수가 끝나면 없어진다.
밖에 있는 메인 변수는 전역 변수라고 한다.
진짜 진짜 중요하고 어려운 개념인데 아래 예시만 이해하면 다 했다.
b = [1, 2, 3]
def vartest(b)
b = b.pop()
return b
b = vartest(b)
print(b)
1. vartest 함수에 b 값을 입력한다.
2. vartest 함수 안에 b라는 리스트 값이 들어간다.
3. pop당해서 들어간 리스트는 [1, 2]가 된다.
4. 하지만 b에 넣을 변수는 pop의 retrun값이다.
5. return 되는 값은 pop 된 3이다.
6. 전역변수 b = 3이다.
7. print(b)의 출력 값은 3이다.
lambda 함수
def add(a, b):
return a+b
add = lambda a, b: a+b
*함수 이름을 쓰지 않는 것이 특징이다. add라는 새로운 변수를 만들어주면 된다.
04-2 사용자 입출력
한 줄에 결괏값 출력하기
for i in range(10):
print(i, end=' ')
이유 : end 매개변수의 초깃값은 줄바꿈(\n) 문자라는 것을 기억해두자!
04-3 파일 읽고 쓰기
파일 생성하기 : 스크립트를 실행한 위치에 생성된다.
f = open('새파일.txt', 'w')
f.colse()
자동으로 종료해주는 기능이 필요한가?
with open("foo.txt", "w") as f:
f.write("Life is too short, you need pyton")
*with문과 write함수를 이용해서 함수가 끝나면 자동으로 종료된다. with구문은 지역변수이다.
파일을 쓰기 모드로 열었는데 깨졌을 때 : 인코딩 하기
f = open("C:/doit/새파일.txt", 'w', encoding = "UFT-8")
여러 줄을 읽는 것은 while문을 이용한다.
이 때, 줄바꿈 문자를 제거하는 방법 2가지(strip, replace)
for line in lines:
line = line.strip()
print(line)
for line in lines:
line = line.replace('\n', ' ')
잊지말 점
*함수 안에서 함수 밖에 변수를 변경하는 방법_작동 순서
1번 방법 : a에 덮어쓰기
b = 1
def func(a):
a = a + 1
return a
d = func(b)
print(d)
2번 방법 : 새로운 e 만들기
b = 1
def func(a):
e = a + 1
return e
d = func(b)
print(d)