input이 들어와 function(함수)을 거쳐 output 출력
입력과 출력이 없을 수 있음
아래 구조에서
매개변수가 input,리턴값이 output,수행할 문장이 function
def 함수명(매개변수):
<수행할 문장1>
<수행할 문장2>
...
return 리턴값
함수를 정의하기만 하면 아무것도 출력X
함수를 사용하는 것을 함수 호출이라 함
def sum(a,b): #함수 정의
result = a+b
return result
print(sum(1,2)) #함수 호출
1) 입력값만 없는 경우
def say():
return "Hi"
print(say()) #Hi 출력
2) 출력값만 없는 경우
def sum(a,b):
print("%d, %d의 합은 %d입니다" %(a,b,a+b))
3) 입출력값 둘 다 없는 경우
def say():
print("Hi") #Hi 출력
print(say()) #None 출력
🔅 list의 메소드(함수st) 중 print했을 때 값이 나오는 경우가 있고 아닌 경우 존재
print(<메소드>) 했을 때 값이 나오면 출력(return)이 있는것, 값이 none이면 출력이 없는 것
*args: 여러 개의 입력 받기
**kwargs: 딕셔너리 형태의 입력 받기
둘 다 변수 바꿔도 되지만 일반적인 형태로 주로 쓰이므로 위와 같이 사용
💡 example
#1
def sum_many(*args): #*args: 여러개의 값 입력하라는 의미, args 대신해 다른 변수명 써도되지만 일반적으로 args 사용
sum = 0
for i in args: #args가 리스트처럼 여러 개 요소 담고 있음
sum = sum+i
return sum
#2
def print_kwargs(**kwargs): #**kwargs: 딕셔너리 형태로 입력받음
for k in kwargs.keys(): #key를 k변수에 담음
if (k == "name"):
print("당신의 이름은: "+kwargs[k]) #kwargs[k]에서 k는 key이므로 해당 key에 관한 value 값 출력
print(print_kwargs(name="int조수", b="2"))
💡 example
def sum_and_mul():
return a+b, a*b, a-b #return 값은 언제나 하나이므로 튜플 형태로 return
print(sum_and_mul(1,2)) #(3,2,-1) 출력(튜플 형태)
print(sum_and_mul(1,2)[0]) #3 출력
해당 인수를 넣지 않아도 기본으로 설정한 값 출력
맨 뒤에 있어야 생략 가능, 가운데에 있을 경우 반드시 써야함
💡 example
def say_myself(name,old,man=True):
print("나의 이름은 %s입니다" %name)
print("나이는 %d입니다" %old)
if man:
print("남자입니다")
else:
print("여자입니다")
say_myself("라이유튜브",20,True)
say_myself("라이유튜브",20) #직전 코드와 같은 결과, man=True를 쓰지 않을 경우 오류 발생
say_myself(old=20, name="라이유튜브",man=True) #순서가 바뀔 경우 각각의 맵핑해야함
함수 내에 존재하는 변수는 함수 밖에 영향을 주지 않음
💡 example
a = 1
def vartest(a): #이 함수 내에 존재하는 a는 함수 밖에 영향을 주지 않음(return 값 X)
a = a+1
vartest(a)
print(a) #1 출력
1) return
💡 example
a = 1
def vartest(a):
a = a+1
return a
a = vartest(a)
print(a) #2 출력
2) 예약어 global
💡 example
a = 1
def vartest():
global a
a = a+1
vartest()
print(a)
함수를 간단하게 표현하는 방법
함수명 없을 수도 있음
1) Lambda 기본 구조
#1
def add(a,b):
return a+b
#2 위 코드와 같은 결과
add = lambda a,b : a+b
2) 기존 함수 정의 사용 못하는 경우에도 사용 가능
💡 example (Lambda 사용 예제)
myList = [lambda a,b:a+b, lambda a,b:a*b] #myList는 [덧셈, 곱셈] 함수가 각각 들어있음, 이 때 이름X
print(myList[0](1,2)) #3 출력, a+b
print(myList[1](1,2)) #2 출력, a*b
input과 같이 사전에 정의된 함수를
내장함수,
def를 사용해 함수를 정의한 함수를사용자 정의 함수라 부름
🔅 알고리즘 문제 해결할 때 주로 쓰임
💡 example
number = input("숫자를 입력하세요: ")
print(number) #입력한 숫자 출력
기본적으로 하나 출력 후 다음 줄로 넘어가서 출력
1) 띄어쓰기
print("life""is""too short") #lifeistoo short 출력, 자동으로 + 생성
print("life"+"is"+"too short") #직전 코드와 같은 결과
print("life","is","too","short") #life is too short 출력
2) end=" " 또는 end=' '
한 줄 씩 내려가지말고 옆으로 주어진 문자를 넣고(end=" "은 띄어쓰기) 출력
for i in range(10):
print(i, end=" ") #1 2 3 4 5 6 7 8 9 10 출력
for i in range(10):
print(i) #1(\n)2(\n)3(\n)4(\n)5(\n)6(\n)7(\n)8(\n)9(\n)10
for i in range(10):
print(i, end="hi") #1hi2hi3hi4hi5hi6hi7hi8hi9hi10
텍스트파일 열고 작성한 후 파일 닫고 저장하는 개념
🔅 파일을 open 했으면 반드시 close 해야함. 하지 않을 경우 오류 발생 가능성 존재
f = open("새파일.txt", "w") #상대주소
f.close()
| 파일열기모드 | 설명 |
|---|---|
| r | 읽기모드-파일을 읽기만 할 때 사용 |
| w | 쓰기모드-파일에 내용을 쓸 때 사용 |
| a | 추가모드-파일의 마지막에 새로운 내용을 추가시킬 때 사용 |
🔅 w은 기존 파일의 내용을 삭제하고 작성하는 것이고, a는 기존 파일 뒤에 내용을 추가하는 것
주소 작성
절대주소: 처음부분(C:/)부터 주소 작성
상대주소: 현재 실행하는 파일을 기준으로 상대적인 경로 작성, 현재 폴더에 작성
🔅 크롤링할 때 유용하게 사용 가능
✔ write() 함수 사용
💡 example
f = open("C:/Python/새파일.txt", "w", encoding="UTF-8") #절대주소, 한글깨지지않도록
for i in range(1,11):
data = "%d 번째 줄입니다.\n" %i
f.write(data)
f.close
1) 파일 한 줄 씩 읽어오기
✔ readline() 함수 사용
: 파일을 한 줄 씩 읽어오는 함수
💡 example
f = open("새파일.txt","r", encoding="UTF-8")
line = f.readline()
print(line)
f.close()
2) 파일 여러 줄 씩 읽어오기
✔ readline() 함수 사용
f = open("새파일.txt","r",encoding="UTF-8")
while True:
line = f.readline()
if not line: break #빠져나갈 조건, 무한반복X, line값이 없을 경우 빠져나감
print(line)
f.close()
✔ readlines() 함수 사용
🔅리스트형태
f = open("새파일.txt","r",encoding="UTF-8")
lines = f.readlines() #리스트 형태
for line in lines:
print(line)
f.close()
🔅 기존 파일에 한 문장이 끝날 때마다 \n이 존재하는데,
print는 기본적으로 한문장씩 내려가므로 두번 내려가는 것처럼 보임.
방지하려면 end=" "또는 .strip("\n") 작성
3) 파일 한 번에 읽어오기
✔ read() 함수 사용
f = open("새파일.txt", "r", encoding="UTF-8")
data = f.read()
print(data)
f.close()
f = open("새파일.txt","a")
for i in range(11,20):
data="%d번째 줄입니다. \n" %i
f.write(data)
f.close()
close() 사용하지 않아도 자동으로 파일 닫는 기능
with open("새파일.txt","w",encoding="UTF-8") as f:
f.write("Life is too short, you need python")