파이썬 함수의 구조
def 함수명(매개변수) :
<수행할 문장1>
<수행할 문장2>
return 리턴 값
기본적인 함수의 형태
def sum(a, b):
result = a+b
return result
# 함수를 사용하는걸 호출이라고 함
print(sum(1, 2))
# 매개변수가 없는 함수
def say():
return 'Hi'
print(say())
# 리턴값이 없는 함수
def sum(a, b):
print("%d, %d의 합은 %d입니다." % (a, b, a+b))
sum(1, 2)
#-----------------------------#
myList = [1, 2, 3]
print(myList.append(4))
# append는 함수인데 출력이 없는 함수이다.
print(myList.pop())
# pop은 함수인데 리턴값이 있는 함수
#-----------------------------#
# 입력 출력도 없는 함수
def say():
print('Hi')
print(say())
여러개의 입력값을 가지는 함수
def sum_many(*args): # *args 몇개든 상관없다 넣어라!! 라는 뜻
sum = 0
for i in args:
sum = sum + i
return sum
print(sum_many(1, 2, 3, 4, 5))
딕셔너리 형태(key, value)를 다 받기 위해 ** 사용
def print_kwargs(**kwargs): # 딕셔너리 형태로 key와 value값이 들어왔을때 다 받을수 있게하려고!!!
for k in kwargs.keys():
if(k == "name"):
print("당신의 이름은 :" + k)
print(print_kwargs(name="int 조수", b="2"))
여러개의 값을 한번에 return
def sum_and_mul(a, b):
return a+b, a*b, a-b # 여러개의 값을 리턴할 수 있고
print(sum_and_mul(1, 2)[0]) # 튜플로 되므로 골라서 사용할 수 있다!!
함수의 값을 미리 설정하고 사용
def say_myself(name, old, man=True):
# 함수의 기본값을 미리 설정할 수 있다
# 주의할점 함수의 기본값을 설정하는 값은 맨 뒤에 위치해야한다.
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
say_myself("옥돌", 20, False)
#-----------------------------------#
def say_myself(name, man=True, old ): # 기본값 설정한거는 맨 뒤에있어야함!!
...
...
...
say_myself("옥돌", 20) # 기본값이 설정되어있다고 이렇게 중간을 비우면 에러발생!!!!
함수안에서 선언된 변수의 효력범위
a = 1
def vartest(a): # 이 함수내에서 쓴거는 지역변수!!
a = a + 1 # 함수 내에서만 쓰인다.
# 즉 1이 들어가서 연산되도 함수 안에서만 2로 머물러있음
vartest(a) # a가 2가나와야하지않나? 하는데 1이나옴
print(a) # 결과값 : 1
#-----------------------------#
# 2가 나오게하려면 어떻게 해야할까?
a = 1
def vartest(a):
a = a + 1
return a # return을 해줌으로써 a라는값을 돌려준다!(받아온다)
a = vartest(a) # return 한거를 다시 a에 넣어줬기때문에
print(a) # 결과값 : 2가 나옴
#-----------------------------#
a = 1
def vartest():
global a # global은 전역변수의 개념/전체에서 사용할수 있는 변수
a = a+1
vartest()
print(a)
Lamda 함수
- 함수를 굉장히 편리하게 정의할 수 있다.
- 이름도 정하지 않고 사용할 수 있다.
- List나 어디에다 넣어서 사용할 수 있다.
- 간단한 식을 표현할 때 많이 쓴다!
# def add(a,b):
# return a+b
# 위처럼 def해서 선언할 수 있지만 lambda를 쓰면 한줄로 편하게 함수선언 할 수 있다!!!
add = lambda a, b : a+b
print(add(1, 2))
# myList에는 두개의 함수가 담겨져있음
# 이렇게 넣어서 사용할 수 있다
myList = [lambda a, b: a+b, lambda a, b: a*b]
# myList 에서 첫번째 함수를 불러서 1,2를 넣어준다
print(myList[0](1, 2))
# 결과값 3
사용자 입력과 출력
# 사전에 정해져있는 함수로 내장함수라고 함
# input 입력을 받는 함수
a = input()
print(a)
print("life" "is" "too short") # 콤마없이 쓰면 저절로 + 해서연결해준다
print("life", "is", "too short") # 콤마를 써주면 알아서 띄어쓰기를 해준다
for i in range(10):
print(i, end=" ") # end 라는걸 써주면 뒤에 띄어쓰기를 넣어준다
입력과 출력 종합예시(쓰기 모드)
f = open("새파일.txt", 'w')
# 그냥 파일명 쓰면 같은위치에 파일 생성
# 'w'는 쓰기모드
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
입력과 출력 종합예시(입력 모드)
f = open("새파일.txt", 'r', encoding="UTF-8") # 'r'은 입력모드
line = f.readline() # readline을 통해서 한줄을 읽어올수 있다!
print(line)
f.close() # file을 오픈을 하면 아래에 닫아줘야함!!!
#--------------------------------------------#
# 여러줄을 읽어주기 위해 반복문 사용
f = open("새파일.txt", 'r')
while True:
line = f.readline()
if not line:
break
# 빠져나갈 조건 명시
# line이 not 일 경우 즉 라인이 없을경우 break 해라!!
print(line)
f.close()
#--------------------------------------------#
# 여러줄을 읽어주기 위해 readlines() 함수사용
f = open("새파일.txt", 'r')
lines = f.readlines()
for line in lines:
print(line)
f.close()
#--------------------------------------------#
f = open("새파일.txt", 'r', encoding="UTF-8")
data = f.read()
# read() 함수는 모든 걸 통째로 가져와서 data에 넣어준다!
print(data)
f.close()
입력과 출력 종합예시(추가 모드)
f = open("새파일.txt", 'a', encoding="UTF-8")
# 'a'는 추가모드로 기존에 새파일.txt에 있는 내용뒤로 추가해준다 add의 의미
# 'w'는 전체를 갈아엎고 새로쓰기 vs 'a'는 추가의 개념
for i in range(11, 20):
data = "%d번째 줄입니다. \n" % i
f.write(data)
f.close()
with문과 함께라면 close 안해도 된다!!
with open("foo.txt", "w") as f:
f.write("Life is too short, you need python")
# 파일을 쓰기모드로 열어서 f라는 변수에 저장한다.
# 여기에선 지역변수 개념으로 : 뒤로 f.write에만 사용되고 아래에선 자동으로 close 된다!!
'Dev > python' 카테고리의 다른 글
파이썬 self & __init__ (0) | 2020.09.28 |
---|---|
파이썬 모듈 (0) | 2020.09.21 |
파이썬의 제어문 (0) | 2020.09.16 |
파이썬 자료형(2) (0) | 2020.09.15 |
파이썬 자료형 (0) | 2020.09.15 |