과일, 설탕 <입력>
↓
믹서<함수>
↓
과일 주스 <출력>
input이 들어와 functin(함수)을 거쳐 output 출력
입력과 출력이 없을 수 있음
매개변수=input
리턴값=output
수행할 문장=function
def 함수명(매개변수): <수행할 문장1> <수행할 문장2> ... return 리턴값
함수를 정의하기만 하면 아무것도 출력X
함수를 사용하는 것 : 호출
def sum(a, b): #함수 정의
result = a+b
return result
print(sum(1,2)) #함수 호출
>>> 3
def say():
return "Hi~"
print(say())
>>> Hi~
def sum(a, b):
print("%d, %d의 합은 %d입니다." % (a, b, a+b))
sum(1, 3)
print(sum(1, 3))
>>> 1, 3의 합은 4입니다.
None -> return 값이 없는 함수이므로!
Q. 함수 사용 시 어떤건 print가 되고, 어떤건 안되는데 이유가 뭘까?!
myList = [1, 2, 3]
print(myList.append(4))
>>> None
myList = [1, 2, 3]
print(myList.pop())
>>> 3
def say():
print('Hi')
print(say())
>>> Hi
None
입력값 여러 개일 때 매번 결과값이랑 맞춰서 인자를 적어주는건 불편함 -> *args 사용!! *args는 몇개든 상관없이 다 들어갈 수 있다.
*args
: 여러 개의 입력 받기
**kwargs
: 딕셔너리 형태의 입력 받기
둘 다 다른 변수명 사용해도 되지만 일반적으로 저렇게 많이 사용함
💡 example
#1
def sum_many(*args):
sum = 0
for i in args:
sum += i
return sum
print(sum_many(1, 2, 3))
>>> 6
#2
def print_kwargs(**kwargs):
for k in kwargs.keys(): #kwargs의 key를 k변수에 담음
if(k == "name"):
print("당신의 이름은: " + kwargs[k]) #kwargs[k]에서 k는 key이므로 해당 key에 관한 value값 출력
print(print_kwargs(name="홍길동", b="2"))
>>> 당신의 이름은: 홍길동
None
def sum_and_mul(a,b):
return a+b, a*b
print(sum_and_mul(3,6))
print(sum_and_mul((3,6)[1])
>>> (9, 18) #튜플 형태로 출력 = return값 1개
18 #인덱스 1 값 출력 = a*b
def say_myself(name, old, man=True): #man=True (True로 초기설정)
print("나의 이름은 %s 입니다." % name)
print("나이는 %d 입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
say_myself('홍길동', 19, 0)
say_myself('홍길동', 19) #남자입니다. -> man=True로 초기설정 했으므로 안적으면 남자로 출력!
>>> 나의 이름은 홍길동 입니다.
나이는 19 입니다.
여자입니다.
a = 1
def vartest(a):
a = a + 1
vartest(a)
print(a)
>>> 1
a=2 라고 생각할 수 있지만
함수 내에서 사용하는 변수는 함수 안에서만 쓰인다! 따라서 어디서든 함수 밖에 있는 a = 1이 출력되는 것!!
✔ 지역변수
함수 내에 존재하는 변수는 함수 밖에서 영향을 주지 않음
1) return
a = 1
def vartest(a):
a = a + 1
return a
a = vartest(a)
print(a)
>>> 2
2) 예약어 global
a = 1
def vartest():
global a #global 선언 : 전체에서 사용하는 변수임
a = a + 1
vartest()
print(a)
>>> 2
함수를 간단하게 표현하는 방법
함수명이 없을 수도 있음
💡 example
def add(a,b):
return(a+b)
print(add(1,2))
>>> 3
위 코드는 간단한 코드인데 꽤 길어서 쓰기 귀찮기도 하고 def 못쓰는 함수도 있음(list에는 def 사용 불가)
이럴 때 람다 사용!!
#1
add = lambda a, b: a+b
print(add(1,2))
>>> 3
#2
myList = [lambda a, b: a+b, lambda a, b: a*b]
print(myList[0](1,2))
print(myList[1](2,3))
>>> 3
6
🔅 알고리즘 문제 해결할 때 주로 쓰임
input(), print() 등.. 과 같이 사전에 정의된 함수를
내장함수
,
def를 사용해 새로 정의한 함수를사용자 정의 함수
라고 함
number = input("숫자를 입력하세요: ")
print(number) #3 입력
>>> 숫자를 입력하세요: 3
3 #입력한 숫자 그대로 출력!
기본적으로 하나 출력 후 다음 줄로 넘어가서 출력 -> 자동개행
💡 example
#1 콤마 안넣고 스트링 여러개 쓴 경우
print("life" "is" "too short")
>>> lifeistoo short -> 띄어쓰기 X
#2 콤마로 연결한 경우
print("life", "is", "too short")
>>> life is too short -> 자동 띄어쓰기
#3 end 옵션
for i in range(10):
print(i, end=' ')
>>> 0 1 2 3 4 5 6 7 8 9 -> 개행하지 않고 출력
텍스트 파일을 열고 작성한 후, 다시 파일 닫고 저장하는 개념
🚨 파일을 open 했으면 반드시 close 해야함. 하지 않을 경우 오류 발생 가능성이 존재함
f = open("새파일.txt", 'w') #같은 폴더 내 새파일.txt 생성
f.close()
r : 읽기모드 - 파일을 읽기만 할 때 사용
w : 쓰기모드 - 파일에 내용을 쓸 때 사용
a : 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용
🚨 w는 기존 파일의 내용을 날리고 새로 작성하는 것이고, a는 기존 파일 뒤에 내용을 추가하는 것
write()
함수 사용
🔅 크롤링할 때 유용하게 사용 가능함
f = open("/Users/choihyerin/eclipse-workspace/jocoding/새파일.txt", 'w') #절대주소 사용
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
결과값 >>>
1) 파일 한 줄씩 읽기
readline()
함수 사용 : 어떤 파일을 한 줄씩 읽어오는 함수
f = open("새파일.txt", 'r') #상대주소 사용
line = f.readline()
print(line)
f.close()
>>> 1번째 줄입니다.
2) 파일 내 모든 줄 읽기
readline()
함수 + while문
f = open("새파일.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번째 줄입니다.
or
readlines()
함수 + for문 -> 리스트형태
f = open("새파일.txt", 'r')
lines = f.readlines()
for line in lines:
print(line.strip("\n"))
f.close()
>>> 1번째 줄입니다.
2번째 줄입니다.
3번째 줄입니다.
4번째 줄입니다.
5번째 줄입니다.
6번째 줄입니다.
7번째 줄입니다.
8번째 줄입니다.
9번째 줄입니다.
10번째 줄입니다.
🚨 기존 파일에 한 문장이 끝날 때마다 \n이 들어가는데, print는 자동개행이므로 한 줄 더 내려감
print할 때 end=" "
또는 .strip("\n")
작성하여 빈 줄 제거해준 것!!
2) 파일 한 번에 읽기
read()
함수 사용
f = open("새파일.txt", 'r')
data = f.read()
print(data)
f.close()
>>> 1번째 줄입니다.
2번째 줄입니다.
3번째 줄입니다.
4번째 줄입니다.
5번째 줄입니다.
6번째 줄입니다.
7번째 줄입니다.
8번째 줄입니다.
9번째 줄입니다.
10번째 줄입니다.
f = open("새파일.txt", 'a')
for i in range(11, 20):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
결과값 >>>
close() 함수를 사용하지 않아도 자동으로 파일 닫아줌
with open("foo.txt", 'w') as f:
f.write("Life is too short, you need python")
결과값 >>>
Reference
참고한 영상