Python(파이썬) 내장함수

안요한·2022년 5월 18일
0

Python 기초

목록 보기
6/8
  • 내장 함수
내장 함수명기능
print()화면에 데이터 값을 출력함
input()키보드를 통해 데이터를 입력받음
range()정수의 범위를 설정함
list()리스트를 생성함
abs()숫자의 절대값을 구함
len()문자열, 리스트, 튜플, 딕셔너리 등의 길이를 구함
round()소수점 이하 반올림 값을 구함
int()문자열이나 실수형 숫자를 정수형 숫자로 변환함
float()문자열이나 정수형 숫자를 실수형 숫자로 변환함
  • 함수를 변수에 담아 사용하기
def print_something(a):
		print(a)

p = print_somethig #()없이 함수의 이름만을 변수에 저장합니다.
p(123) #변수의 이름 뒤에 ()를 붙여 함수처럼 호출하면 됩니다.

---------------------

def plus(a, b):
    return a+b

def minus(a, b):
    return a-b

flist = [plus, minus] #plus 함수와 minus 함수를 리스트의 요소로 집어넣는다.
flist[1](1, 2) #filst[1]은 flist의 1번째 인덱스 즉 minus를 뜻함
  • 함수를 변수에 담아 사용하기
    • 파이썬이 함수를 일급 객체로 다루고 있음

    • 일급 객체는 매개변수로 넘길 수 있고 함수가 반환할 수도 있으며 변수에 할당이 가능

    • 파이썬에서는 함수를 매개변수로도, 함수의 결과로도 반환 가능

    • 함수 이름은 주소이고, 변수가 함수 이름을 대신함

      def hello_korean():
          print('안녕하세요')
      
      def greet(hello):
          hello()
      
      greet(hello_korean)
      
      #실행결과
      안녕하세요
      
      -------------------
      
      def hello_korean():
          print('안녕하세요')
      
      def hello_english():
          print('hi')
      
      def get_greeting(where):
          if where == 'K':
              return hello_korean
          else:
              return hello_english
      hello = get_greeting('K')
      hello()
      hello = get_greeting('zz')
      hello()
      
      #실행결과
      안녕하세요
      hi
  • 중첩 함수 - 함수 안에 정의된 함수
  • 클로저

    • 어떤 함수의 내부함수가 외부함수의 변수(프리 변수)를 참조 할 때, 외부함수가 종료된 후에도 내부함수가 외부함수의 변수를 참조 할 수 있도록 해 주는 함수
    • 외부함수 바깥의 전역 변수에 내부함수가 할당 될 때 생성
    • 외부에서 내부함수에 접근하여 실행될 때, 해당 클로저를 참조
    • 어떤 함수의 내부함수이어야함
    • 그 내부함수가 외부함수의 변수를 참조해야함
    • 외부함수가 내부함수를 리턴해야함
  • 프리변수(공인된 이름은 아님)

    • 어떤 함수에서 사용 되지만, 그 함수 내부에서 선언 되지 않은 변수(즉, 외부함수에만 선언 된 변수)
  • 람다 함수(익명함수)

    • 함수를 한 줄로 간단하게 만들어줌(반드시 단일 표현식이어야함)

    • lambda arg1, arg2 .... argN: arg를 사용한 표현식

    • 함수 이름으로 치환

      #일반식
      def addFun(num1, num2):
          result = num1 + num2
          return result
      print(addFun(10,20))
      
      #람다식
      addFun = lambda num1, num2 : num1 + num2
      print(addFun(10,20))
      #print((lamda num1, num2 : num1+num2)(10, 20))
  • 매개변수
def color(name, color, amount) :
    if(amount == 1):
        print('%s님은 %s을 좋아하지 않습니다.' %(name, color))
    elif(amount == 2):
        print('%s님은 %s을 조금 좋아합니다.' %(name,color))
    else :
        print('%s님은 %s을 매우 좋아합니다.' %(name, color))

color('박지성', '빨강', 3)
color('손흥민', '노랑', 1)
color('차범근', '검정', 2)

#실행결과
박지성님은 빨강을 매우 좋아합니다.
손흥민님은 노랑을 좋아하지 않습니다.
차범근님은 검정을 조금 좋아합니다.

def average(*scores) :
    sum = 0
    for i in range(len(scores)) :
        sum += scores[i]
    avg = sum/len(scores)
    print('%d과목의 평규: %.2f'%(len(scores), avg))

average(80,90,100)
average(75,80,45,33)
average(1,2,3,4)

#실행결과
3과목의 평규: 90.00
4과목의 평규: 58.25
4과목의 평규: 2.50
  • 파이썬의 값, 레퍼런스에 의한 호출
#값 호출
#서브 루틴 : func()함수
def func(x) :
    x = 100
    print('func() = x', x,', id=', id(x))

#메인 루틴
x = 10
print('메인:x =',x,', id=',id(x))
func(x)
print('메인:x =',x,', id=',id(x))

#서브루틴 func(x)의 x값과, 메인 루틴의 x값은 다른 주소값을 갖고 있는 다른 x이다.
#실행결과
메인:x = 10 , id= 1853529260560
func() : x 100 , id= 1853529263440
메인:x = 10 , id= 1853529260560

#레퍼런스에 의한 호출
#서브 루틴 : func()함수
def func(x) :
    x[0] = 100
    print('func() = x', x,', id=', id(x))

#메인 루틴
x = [1,2,3]
print('메인:x =',x,', id=',id(x))
func(x)
print('메인:x =',x,', id=',id(x))

#서브루틴을 통한 레퍼런스에 의한 호출은 메인 루틴에 영향을 준다.
#메인x의 주소값에 100이 저장됨
#실행결과
메인:x = [1, 2, 3] , id= 3041862133504
func() = x [100, 2, 3] , id= 3041862133504
메인:x = [100, 2, 3] , id= 3041862133504
  • 함수 값의 반환
def circle_area(r):
    area = r * r * 3.14
    return area

radius = int(input('원의 반지름을 입력하세요 :'))
result = circle_area(radius)
print('반지름은 %d, 원의 면적 : %.2f' %(radius, result))

#실행결과
원의 반지름을 입력하세요 :13
반지름은 13, 원의 면적 : 530.66
  • 함수로 정수 합계 구하기
def sum(start, end): #시작과 끝의 수를 입력받는 함수
    total = 0        #합계 초기화
    for i in range(start, end+1):   #반복문을 통해 시작수와 끝수를 반복해서 더해줌
        total += i
    print('%d ~ %d의 정수 합계 : %d' %(start,end,total))

sum(10, 100)
sum(100, 1000)
sum(1000, 10000)
  • 함수로 배수 합계 구하기
s = int(input('시작 수를 입력하세요'))
e = int(input('끝 수를 입력하세요'))
b = int(input('합계를 구할 배수를 입력하세요'))

def besu(s, e, b): #시작 끝 배수를 입력받는 함수
    sum = 0        #합계 초기화
    for i in range(s, e+1): #시작값과 끝값 e+1을해야 100까지 계산
        if i % b == 0 :     #i값을 b로 나누어 0으로 떨어져야 b의 배수
            sum += i        #i값을 총합에 더함
    return sum

result = besu(s,e,b)        #총 결과값에 저장

print('%d~%d의 정수 중 %d의 배수의 합: %d'%(s,e,b,result))

데코레이터

  • 어떤 함수 이름을 인자로 받아 꾸며 준 후, 다시 해당 함수 호출을 리턴하는 함수
  • 데코레이트 할 함수의 정의부 위에 @데코레이터명 추가
  • 함수 내부에 변화를 주지 않고 로직을 추가 하고 싶을 때 사용
  • 코드 중복 최소화, 재사용성 향상
  • 중첩 가능 - 함수와 가까운(안쪽) 데코레이터가 원, 가독성 및 디버깅 어려움
  • 필수 항목 - *args와 **kwargs, 내부 함수, 함수이름 매개변수
def deco(func):
    def deco_func(*args, **kwargs):
        print("decorate") #데코 부분
        return func(*args, **kwargs) #바깥함수의 입력인자로 받은 함수를 리턴
    return deco_func      #실제 데코레이터 함수 이름 리턴

@deco
def original_func():
    print("original")
original_func()

#original_func() 번역 순서
# 1) original_func()
# 2) deco(original_func)() #실제 데코레이터 함수이름 리턴
# 3) deco_func() #사실은 deco_func의 레퍼런스, 실제 데코레이터 함수 호출
# 4) print("decorate")
#    original_func()
# 5) print("decorate")
#    print("original")
profile
걍이렇게돼브렀다리

0개의 댓글