미오스
미오스의 제로투원 데이터 일지
미오스
전체 방문자
오늘
어제
  • 🗄 전체보기 (61)
    • 📝 개발일지 (0)
    • 💻 파이썬 머신러닝 완벽 가이드 (14)
    • 코딩 (5)
      • 💻 백준 (3)
      • 💻 이것이 코딩테스트다 (0)
      • 💻 Python (2)
    • 📂 데이터 아티클 (41)
    • 🚀 스타트업 (0)
    • 🌱 일상 (0)
    • 📚 독서 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ML
  • CLASSFICATION
  • 인공지능
  • 데이터
  • NLP
  • AI
  • 분석
  • Dimension Reduction
  • 머신러닝
  • 딥러닝
  • 파머완
  • CounterVectorizer
  • Cluster Evaluation
  • mechinelearning
  • 분류
  • study
  • AI study
  • SQL
  • 평균 이동
  • 확률 기반 군집화
  • 데이터사이언스
  • 밀도 기반 군집화
  • Python
  • clustering
  • 빅데이터
  • mechinelearing
  • 파이썬
  • mechinelearining
  • 데이터분석
  • 자연어처리

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
미오스

미오스의 제로투원 데이터 일지

Python 파이썬 함수 인수 | 가변 인수
코딩/💻 Python

Python 파이썬 함수 인수 | 가변 인수

2021. 12. 24. 17:54

 

인수


인수는 함수로 전달되는 작업거리이며, 호출하는 쪽과 함수를 연결한다는 의미로 [매개변수]라고도 불린다.

함수 정의문의 인수를 [형식 인수]라고 하고, 함수 호출문에서 전달하는 인수를 [실인수]라고 한다.

아래의 예시의 경우에는 'n' 이 형식 인수, 10이 실인수다.

 

def calsum(n):

    sum = 0

    for num in range(n+1):

        sum += num

    return sum

 

print(calsum(10))          # 10까지의 수의 합을 구하는 함수 및 프린트

 

 

가변 인수


함수를 호출할 때 함수 정의문의 형식 인수 갯수만큼 실인수를 전달해야한다.

 

def calsum(ints):

    sum = 0

    for num in ints :

        sum += num

    return sum

 

print(calsum(1,2,3))      # 1,2,3의 합을 구하고 싶은 함수

===> 에러

 

이 경우에는 형식 인수는 ints 하나인데, 실인수는 1,2,3 세개이므로 에러가 난다.

이에 비해 [가변 인수]는 임의 개수의 실인수를 받는다.

형식 인수 이름 앞에 * 기호를 붙이면, 이 자리에 여러 개의 인수가 올 수 있다.

 

 

def calsum(*ints) :

    sum = 0

    for num in ints :

        sum += num

    return sum

 

print(calsum(1,2,3))      # 1,2,3의 합을 구하고 싶은 함수

==> 6

 

 

위처럼 * 기호를 붙인 가변 인수의 경우,

calsum의 함수는 정수의 합계를 구하되 갯수는 미리 정해져 있지 않다.

 

가변 인수는 이후의 모든 인수를 다 포함하게 때문에, 인수 목록의 마지막에 와야 한다.

가변 인수 앞에는 일반 인수가 올 수 있지만 뒤쪽에는 올 수 없다.

가변 인수 뒤에 일반 인수가 더 있으면 어디까지 가변인수인지 잘 구분되지 않기 때문이다.

 

 

calsum(s, *ints)                   #가능

calsum(*ints, s)                   #에러

calsum(*ints, *others)        #에러

 

 

같은 이유로, 가변 인수가 2개 이상 있어도 안된다.

제일 마지막에 딱 하나만 와야한다.

 

가변인수의 가장 대표적인 사례가 print문이다.

개수와 타입에 상관 없이 콤마로 구분하여 전달하면 된다.

 

 

인수의 기본값


다음은 step인수를 추가하며, 2씩 건너 뛰면서 합을 구하는 함수다.

첫번째 print "1~10"은 1부터 2씩 건너뛰며 홀수의 합을 구하고,

두번째 print "2~10"은 2부터 2씩 건너뛰며 짝수의 합을 구한다.

 

 

def calstep(begin, end, step) :

    sum = 0

    for num in range(begin, end + 1, step):

        sum += num

    return sum

 

print("1 ~ 10 = ", calstep(1, 10, 2))        # 1부터 2씩 건너뛰며 10까지의 홀수 합을 구함

print("2 ~ 10 = ", calstep(2, 10, 2))      # 2부터 2씩 건너뛰며 10까지의 짝수 합을 구함

===> 1 ~ 10 = 25

===> 2 ~ 10 = 30

 

 

인수가 추가 되면 더 세밀한 작업지시가 가능하져 다양하게 활용이 가능하지만,

증감값이 1인 경우에도 꼭 1을 전달해야 하는 불편함이 있다.

 

예를 들어, 위 함수를 앞으로 ~N까지의 합계를 구하는데 계속 사용할 것이다.

100까지의 모든 정수의 합계를 구하려면 항상 다음과 같은 형식으로 호출해야한다.

 

calstep(1, 100, 1)

 

이 함수를 사용할 때는 증감값은 웬만하면 1인 경우가 대부분인데,

이 값을 일일이 전달해야하니 불편함이 발생한다.

 

이처럼 잘 바뀌지 않는 인수는 인수 목록에 기본값을 지정해두면 편하다.

기본값이 있는 인수는 일종의 옵션으로 취급되어 생략이 가능하다.

 

예를들어 print("a","b") 를 돌리면

<a b> 다음과 같이 한칸 띄어서 출력된다.

print의 기본값이 있는 인수 sep이 자동으로 한칸을 띄어서 출력해주는 것이다.

 

이제 calstep 함수에 기본값을 적용해보면 다음과 같다.

 

 

def calstep(begin, end, step = 1) :

    sum = 0

    for num in range(begin, end + 1, step):

        sum += num

    retunr sum

 

print("1 ~ 100 = ", calstep(1, 10))

print("1 ~ 100 = ", calstep(1, 10, 2))

 

 

step 인수에 기본값을 입력했으므로,

첫번째 print "1~100" 에서는 step 인수를 따로 주지 않아도 기본값 = 1이 적용되어

1~100까지의 모든 정수의 합이 출력된다.

두번째 print "1~100" 에서는 step 인수에 2를 주었기 때문에

1~100까지의 모든 짝수의 합이 출력된다.

'코딩 > 💻 Python' 카테고리의 다른 글

Python 파이썬 함수 기본 구조  (0) 2021.12.24
    '코딩/💻 Python' 카테고리의 다른 글
    • Python 파이썬 함수 기본 구조
    미오스
    미오스

    티스토리툴바