[Python] Python 함수
[점프 투 파이썬↗️]을 바탕으로 정리한 글입니다.
1. 함수 선언
1.1 함수 선언 및 호출
# TODO: 일반적인 함수
def add(a,b):
return a+b
a=3
b=4
c=add(a,b)
print(c) # 7
# TODO: 입력값이 없는 함수
def say():
print("hi")
say() # hi
# TODO: 리턴값이 없는 함수
def add(a,b):
print("%d %d의 합은 %d 입니다."%(a,b,a+b))
a=add(3,4) # 3 4의 합은 7 입니다.
# ! 함수는 값을 반환하지 않기 때문에 print(a)를 하면 None이 출력된다.
print(a) # None
# TODO: 매개변수를 지정하여 호출
def sub(a,b):
return a-b
result=sub(a=7,b=3)
print(result) # 4
result=sub(b=5,a=3)
print(result) # -2
1.2 입력 값 개수를 모를 때
# * 관례적인 사용: args
def add_many(*args):
result=0
for i in args:
result=result+i # args에 입력받은 모든 값을 더한다.
return result
result = add_many(1,2,3)
print(result) # 6
result = add_many(1,2,3,4,5,6,7,8,9)
print(result) # 55
1.3 입력 값 수량을 모를 때
# 다양한 매개변수 추가
def add_mul(choice,*args):
if choice=="add":
result=0
for i in args: result += i
elif choice =="mul":
result=1
for i in args:result*=i
return result
result=add_mul("add",1,2,3,4,5)
print(result) # 15
result=add_mul("mul",1,2,3,4,5)
print(result) # 120
1.4 키워드 매개변수, kwargs
kwargs처럼 매개변수 앞에 **을 붙이면 딕셔너리가 되며, 입력 값들은 해당 딕셔너리에 저장
def print_kwargs(**kwargs):
print(kwargs)
print_kwargs(a=1) # {'a': 1}
print_kwargs(name="foo",age=3) # {'name': 'foo', 'age': 3}
1.5 매개변수에 초기값 미리 설정하기
⚠️ 초기값이 설정된 매개변수는 가장 뒤쪽에 위치해야한다.
def say_myself(name,age,man=True):
print("나의 이름은 %s 입니다."%name)
print("나이는 %d 살입니다."%age)
if man:
print("남자입니다.")
else:
print("여자입니다.")
say_myself("박응용",27) # 나의 이름은 박응용 입니다.\n나이는 27 살입니다.\n남자입니다.
say_myself("박응용",27,True) # 나의 이름은 박응용 입니다.\n나이는 27 살입니다.\n남자입니다.
say_myself("박응선",27,False) # 나의 이름은 박응용 입니다.\n나이는 27 살입니다.\n여자입니다.
1.6 함수의 리턴과 튜플
⚠️ 함수의 리턴값은 하나? 여러개? => 하나!!
- 파이썬은 함수에서 여러 개의 값을 리턴할 때 tuple이라는 자료형으로 묶어서 리턴
- 즉 함수는 튜플 하나를 리턴함
# 명시적인 반환
def add_and_mul(a,b):
return a+b, a*b
result = add_and_mul(3,4)
print(result) # (7,12)
result1,result2=add_and_mul(3,4)
print(result1) # 7
print(result2) # 12
1.7 lambda 예약어
람다 예약어는 def와 동일한 역할이며, 한 줄의 간결한 사용 및 일회성 용도
return 명령어가 없어도 결과를 반환한다.
add=lambda a,b:a+b
result=add(3,4)
print(result) # 7
1.8 함수 내부 변수의 유효 범위
전역변수는 지역변수와 다른 별개의 변수로 취급
# 동일한 명칭으로 함수 외부에서 선언 & 내부에서 선언
a=1 # 전역 변수
def vartest(a):
a=a+1 # 지역변수
vartest(a)
print(a) # 1
a=1
def vartest(a):
a=a+1
return a
vartest(a)
b=vartest(a) # 함수가 반환한 값을 변수에 할당해야함
print(b) # 2
print(a) # 1
# global
a=1
def vartest():
global a # 함수 밖에 있는 변수 a 사용
a=a+1
vartest()
print(a) # 2
a=1
def vartest():
global a
return a+1
b=vartest()
print(b) # 2
print(a) # 1
2. 내장 함수
내장 함수는 import 키워드 없이 바로 사용
- 반복 가능한 데이터: 문자열, 리스트, 튜플, 딕셔너리, 집합
- ⚠️
sorted(x)
시 리스트로 변환된다는 점에 유의
# TODO: sorted(x)
# * 반복 가능한 데이터를 정렬하여 리스트로 반환
a= sorted([3,1,2])
print(a) # [1, 2, 3]
a=sorted("zero")
print(a) # ['e', 'o', 'r', 'z']
sorted({3,2,1})
print(a) # ['e', 'o', 'r', 'z']
# TODO: all(x) - 논리 곱셈
# * 반복 가능한 데이터의 x의 모든 요소가 참이면 Ture, 하나라도 거짓이면 False를 반환
a=all([1,2,3,0])
b=all([])
print(a) # False
print(b) # True
# TODO: any(x) - 논리 덧셈
# * 반복 가능한 데이터의 x의 모든 요소가 거짓이면 False, 하나라도 참이면 True를 반환
a=any([0,""])
b=any([])
print(a) # False
print(b) # False
# TODO: abs(i)
# * 숫자를 입력받았을 때 그 절대값을 반환
a=abs(-3)
print(a) # 3
# TODO: input(입력)
# * 사용자 입력을 받아 문자열을 반환
a=input()
print(a)
# TODO: int(x)
# * 문자열 형태의 숫자나 실수형 숫자를 정수로 반환
a=int("3")
print(a) # 3
a= int(3.4)
print(a) # 3
# TODO: tuple(x)
# * 반복 가능한 데이터를 튜플로 반환
print(tuple("abc")) # ('a', 'b', 'c')
print(tuple([1,2,3])) # (1, 2, 3)
print(tuple({1,2,3})) # (1, 2, 3)
# TODO: type(x)
# * x 입력값의 자료형을 반환
print(type([])) # <class 'list'>
print(type(open("test","w"))) # <class '_io.TextIOWrapper'>
# TODO: len(x)
# * 반복 가능한 데이터 입력값 x의 요소 개수, 즉 길이를 반환
print(len("python")) # 6
# TODO: list(x)
# * 반복 가능한 데이터를 입력 받아 리스트로 반환
print(list("python")) # ['p', 'y', 't', 'h', 'o', 'n']
# TODO: max(x)
# * 반복 가능한 데이터를 입력 받아 요소의 최대값을 반환
print(max("python")) # y
# TODO: min(x)
# * 반복 가능한 데이터를 입력 받아 요소의 최소값을 반환
print(min("python")) # h
# TODO: open(x, y)
# * 접근한 파일 객체를 반환: x 입력은 파일명, y 입력은 파일 접근 모드
f=open("bin_file","rb")
# TODO: pow(x, y)
# * x 입력값을 y 입력값으로 제곱한 결과 반환
print(pow(2,4)) # 16
# TODO: id(x)
# * 입력값이 저장된 메모리 주소를 반환
a=3
print(id(a)) # 140709100636664
# TODO: range(x, y, z)
# * 입력된 숫자에 해당하는 범위 값을 반환: x 값은 시작점, y 값은 종점, z 값은 스텝: x, z 값은 생략 가능
a=list(range(5))
print(a) # [0, 1, 2, 3, 4]
a=list(range(5,10))
print(a) # [5, 6, 7, 8, 9]
a=list(range(1,10,2))
print(a) # [1, 3, 5, 7, 9]
# TODO: str(x)
# * x 입력값을 문자열 형태로 반환
print(str(3)) # "3"
# TODO: sum(x)
# * x 입력 데이터의 요소(item) 합을 반환: 요소는 숫자형
print(sum([1,2,3])) # 6
# TODO: divmod(a,b)
# * a를 b로 나눈 몫과 나머지를 튜플로 반환
a=divmod(7,3)
print(a) # (2, 1)
# TODO: round(x, y)
# * x 값을 반올림한 결과를 반환: x 값은 숫자, y 값은 반올림 소수점의 자리수: y 값은 생략 가능
a=round(4.6)
print(a) # 5
a=round(5.678,2)
print(a) # 5.68
"""
아스키코드는 1바이트, 유니코드는 3바이트
"""
# TODO: chr(i)
# * chr() 함수는 아스키 코드와 유니코드 값을 문자로 변환
# 유니코드
print(chr(0xac00)) # 가
print(chr(0xac01)) # 각
print(chr(0xac02)) # 갂
print(chr(0xac03)) # 갃
print(chr(0xac04)) # 간
# 아스키코드
print(chr(64)) # @
print(chr(65)) # A
print(chr(66)) # B
# TODO: ord(c)
# * 입력된 한 문자의 유니코드 숫자 값을 반환
# * ord() 함수는 아스키코드 및 유니코드 문자를 숫자로 변환 (한 개의 문자만 입력 가능)
a = ord("가")
print(a) # 44032
# TODO: hex(i)
# * 정수를 입력 받아 16진수 문자열로 반환
print(hex(234)) # 0xea
# TODO: oct(i)
# * 정수를 입력 받아 8진수 문자열로 반환
print(oct(34)) # 0o42
# TODO: eval(표현식)
# * 문자열의 표현식을 입력 받아 이의 실행 결과를 반환
a=eval("1+2")
print(a) # 3
a=eval("divmod(4,3)")
print(a) # (1, 1)
# TODO: filter(x, y)
# * x 입력은 함수, y 입력은 반복 가능한 데이터 y 데이터를 x 함수에 적용, 결과가 참인 입력값만 묶어 반환
def positive(x): return x>0
a=list(filter(positive,[1,-3,2,0,-5,6]))
print(a) # [1, 2, 6]
a=list(filter(lambda x: x>0,[1,-3,2,0,-5,6]))
print(a) # [1, 2, 6]
# TODO: dir(x)
# * 객체가 지닌 변수나 함수를 보여 주는 함수
a=dir([1,2,3])
b=dir({"1":"a"})
print(a) # ['__add__', '__class__', '__class_getitem__', '__con ...
print(b) # ['__class__', '__class_getitem__', '__conta ...
# TODO: enumerate(x)
# * 순서가 있는 데이터(리스트, 튜플, 문자열)를 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴
for i, name in enumerate(["body","foo,bar"]):
print(i,name)
# 출력 결과
# 0 body
# 1 foo,bar
# TODO: int(x, radix)
# * radix 진수로 표현된 문자열 x를 10진수로 반환
a=int("11",2)
print(a) # 3
# TODO: isinstance(object, class)
# * 첫 번째 인수로 객체, 두 번째 인수로 클래스 입력으로 받은 객체가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 반환
class Person:pass
a = Person()
print(isinstance(a, Person)) # True
# TODO: map(x, y)
# * 입력 y 데이터의 각 요소에 함수 x를 적용한 결과를 반환: x 입력은 함수, y 입력은 반복 가능한 데이터
def two_times(x):return x*2
a=list(map(two_times,[1,2,3,4]))
print(a) # [2, 4, 6, 8]
a=list(map(lambda a:a*2,[1,2,3,4]))
print(a) # [2, 4, 6, 8]
# TODO: zip(x)
# * 반복 가능한 데이터를 여러 개 입력받아 묶음으로 반환
a=list(zip([1,2,3],[4,5,6]))
print(a) # [(1, 4), (2, 5), (3, 6)]
a=list(zip([1,2,3],[4,5,6],[7,8,9]))
print(a) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
a=list(zip("abc","def"))
print(a) # [('a', 'd'), ('b', 'e'), ('c', 'f')]
댓글남기기