Python & Ruby

함수 (function)

함수란 무엇인가?

함수 만들기

Python

def a3():
    print('aaa')
a3()

Ruby

def a3()
    puts('aaa')
end
a3()

실행결과

aaa

Python | Ruby 

리턴값

Python

def a3():
    return 'aaa'
print(a3())

Ruby

def a3()
    return 'aaa'
end
puts(a3())

실행결과

aaa

Python | Ruby 

입력값

 Python

def a(num):
    return 'a'*num
print(a(3))

Ruby

def a(num)
    return 'a'*num
end
puts(a(3))

실행결과

aaa

Python | Ruby

여러개의 입력값

 Python

def make_string(str, num):
    return str*num
print(make_string('b', 3))

Ruby

def make_string(str, num)
    return str*num
end
puts(make_string('b', 3))

실행결과

aaa

Python | Ruby

로그인 애플리케이션 (루비)

puts("아이디를 입력해주세요")
input_id = gets.chomp()

def login(_id)
  members = ['egoing', 'k8805', 'leezche']
  for member in members do
      if member == _id
          return true
      end
  end
  return false
end

if login(input_id)
  puts('Hello, '+input_id)
else
  puts('Who are you?')
end

 ideone.com

로그인 애플리케이션 (파이썬)

input_id = input("아이디를 입력해주세요.\n")
def login(_id):
    members = ['egoing', 'k8805', 'leezche']
    for member in members:
        if member == _id:
            return True
    return False
if login(input_id):
    print('Hello, '+input_id)
else:
    print('Who are you?')

ideone.com

참고

github.com

댓글

댓글 본문
작성자
비밀번호
  1. 닐반
    2018. 10. 10.
  2. 남연수
    좋은 강의 감사합니다.
    몇 가지 질문이 있습니다. 시간이 되신다면 답변 부탁드립니다. 혹시 답을 알고 계신 학습자분이 계시면 알려주시면 감사하겠습니다.

    첫째, 함수의 정의 내에 있는 print라는 명령어의 실행이 일관적이지 않습니다.
    ------------
    1.입력값
    def a3():
    print('aaa')
    a3()

    결과값
    aaa
    -------------
    2.입력값
    def a3():
    print('before')
    return 'aaa'
    print('after')
    print(a3())
    결과값
    before
    aaa
    -----------------------------
    1과 2의 출력이 일관적이지 않습니다. 일관적이려면
    1의 결과값이
    aaa
    aaa
    이 되어야 할 듯합니다.<--왜냐하면 2처럼 함수정의 내의 before의 print명령이 실행되어야 하므로....


    둘째, 함수 정의가 실행되는 시간입니다.
    -------------------
    입력
    def a(num):
    print(num)
    return 'a'*num
    a(100)

    출력
    100
    --------------------------------
    함수가 먼저 정의되었고 당시 num은 변수라 print명령이 되지 않아야 하는데......



    <--------------------------- 자답 달았습니다. 함수가 호출 될 때마다 해당 정의를 확인해서 실행하는 것으로

    이해 하면 위의 문제가 다 해결됩니다. 질문하는 과정에서 궁금증이 해결되어 지울까하다가 곰곰히 생각하는 과정에서 해법을 찾아내는 것이 언어를 체득하는데 중요한 부분이라 생각되어 남겨둡니다. 다시 한번 강의 감사드립니다.
  3. 김수
    20180906 고마워용
  4. 양디비
    2018-08-19 함수 완료! 강의 감사합니다.
  5. jinnie0820
    Done!
  6. 유닉스가이
    Thank you
  7. 해릭
    180711 감사합니다.
  8. 준혁짱짱맨
    시작 합니다!!
  9. Ji Yeoun Park
    2018.6.24 감사합니다. 381번
  10. Junbeom Jeong
    잘 봤습니다. 6월 17일 완료
  11. Jaeduk Jang
    완료했습니다. 감사합니다.
  12. 저도 배우는 입장이라 잘은 모르지만...return 가르쳐주실 때, return값이 나오고 나면 함수가 종료(?)된다고 하셨는데 그래서 exit을 안 붙여도 괜찮은 것 같습니다. 그리고 true가 리턴값으로 나오고 나면 함수는 종료되니까 false는 적용되지 않는 것이구요.
    대화보기
    • 궁금궁금
      def login(_id)

      members = ['egoing', 'k8805', 'leezche']

      for member in members do

      if member == _id

      return true

      end

      end

      return false

      end


      궁금한게 이 코드에서는 왜 return true 다음에 exit 을 쓰지 않나요? 이전 강의에서는 exit을 사용해서 그 다음에 오는 코드가 적용되지 않고 종료되도록 했는데 왜 여기에서는 안 하는지 답이 나오지 않네요ㅠㅠ 이렇게 코드를 쓴다면 return false도 같이 적용될 것 같아 혼선이 생길 것 같은데 강의 상에서는 문제 없이 작동하는 것이 신기합니다
    • 다람쥐
      감사합니다.
    • ddogagi
      음 저는 원래 다른언어를 사용하는 사람이고,
      루비를 공부하려고 듣고 있는사람이라, 루비에서의 규칙은 아직 잘 모르겠지만요..

      함수(메소드)의 경우,
      입력 값은 어떤 형태로 받고, 리턴 값으로 어떤 형태를 드릴께요 하고 약속을 해요.
      약속은 일관성이 있어야 하구요
      (누가 어떤식으로 사용할 지 모르니까, 리턴값은 배열로 드릴께요, 아님, 문자열로 드릴께요,
      boolean형태(true/false)로 드릴께요 란 식으로, 물론, 복합 형태도 있어요!)
      어떤 경우는 리턴값을 주고, 어떤 경우는 안주고 하면,
      함수를 사용하는 쪽에선 무슨 값이 돌아올지 몰라서 당황하게 되잖아요~

      단순 return만 적은경우는, null값을 준건지, false값을 준건지 알 수 없구요
      (이건, 앞으로 프로그램 하다보면 무슨 말인지 알 수 있으실 거에요)

      이번의 경우는 아이디가 있으면 안녕, 없으면, 누구세요 하고 물어보는 처리이지만,

      만약, 아이디가 없는경우, 아이디를 입력해주세요 하는 처리를 할 경우는,
      if !login(input_id)
      puts('아이디를 입력해주세요')
      end
      이런식으로 false인가 아닌가만 알고싶은 경우도 있을수도 있구요

      함수를 작성할 때에는 지금 당장만 사용하는게 아니라 범용성도 생각하면서 작성해야 돼요~
      한번만 쓰고 말 처리라면, 굳이 함수를 만들 필요가 없으니까요
      대화보기
      • 민호
        감사합니다.
      • 성현아빠
        완료
      • 두물
        return값과 변수의 다른점은 무엇인가요?
      • Oct 24 2017
      • Gyoil Gu
        ->입력값 부터 공부하기!
      • dlrbrhkdww@hotmail.com
        감사합니다
        그럼 else 라는 조건이 붙어있을때는 굳이 false 를 써도 되지 않아도 되는것인지요 ?
        대화보기
        • Hello
          마지막 if문에서
          else를 써서 그런 것입니다.
          참이 아닌 값들을 모두 else가 처리해 주니까요..

          만약 else 대신
          elif False 를 쓰고 아이디를 틀리게 되면 아무것도 출력되지 않습니다.
        • dlrbrhkdww@hotmail.com
          return false 쓰는이유야 프로그램을 종료시켜서 그뒤에것들을 안나오게 하는것인데 return false 부분코드를 지워도 who are you 가 나오지않네요
          그럼애초에 return false 라는코드는 필요없어도 되는거아닌가요 ?
          return false 가잇어도 제대로되고 없어도 제대로 작동외는데 잇는이유를 잘 이해를못하겟네요
        • GoldPenguin
          완료했습니다.
        • 김태윤
          함수 완료!
        • hello world~
          함수(function) 완료
          감사합니다~
        • 파이떤
          for 문에서 가지고있는 값을 돌리고, 거기서 입력한 값과 같느냐를 확인해주려고 member == _id 를 지정해주는겁니다.
          예를들어 님이 로또를 한다 가정하고, 30번 번호를 입력하고 그 30번 공을 가지고 있습니다. 그리고 추첨기계를 1-45번 공을 순서대로 확인해서 같은게 있냐 확인하는겁니다.
          당신이 가지고 있는 공 = [30]
          추첨기계공=[1,2,3,4,5,,,,,,,,,,44,45]

          30==1? who are you
          30==2? who are you
          .
          .
          .
          30==30? hello
          대화보기
          • J.Y.Oh
            좋은 정리 감사드립니다. 많이 배우고 갑니다.
          • ikjus1
            input_id = input("아이디를 입력해주세요.\n")
            def login(_id):
            members = ['egoing', 'k8805', 'leezche']
            for member in members:
            if member == _id:
            return True
            return False
            if login(input_id):
            print('Hello, '+input_id)
            else:
            print('Who are you?')

            for member in members:
            ----if member==_id: => 만약 member 에 있는 인자가 _id와 같다면 결과값이 True다

            라고 저는 생각햇는데 최초에 input_id 값이 무슨 값을 넣어서 member 인자와 _id가 같을수 없는것 아닌가요??? _id값을 설정하는 곳이 if login(input_id):라는 곳에서 최소에 넣은 input_id값이 =>_id=[]값으로 들어가서 Hello, input_id=[최초값]이 나오느것 아닌가요..? 이해가 안가네요...

            요지는 for문 에서 member == _id를 왜 지정했는 가입니다 _id값이 =[] 항상 지정되지 않아서 member==_id 이 될수없는것아닌가요?
          • 미림_likelion
            수강 완료했습니다. 감사합니다.
          • bumdori2
            else 구문에서 리턴을 해버려서 그렇습니다.
            else 구문에 암것도 안쓰시면 되요.
            대화보기
            • 조유빈
              (첫번째 질문에 대해서만 답글 달겠습니다.)

              많이 헷갈리는 부분이며, 사람이 보기엔 한끗 차 같지만
              컴퓨터는 전혀 다르게 인식하고 작동하는 대표적인 예입니다.

              for 구문을 통해서
              'member'라는 object는
              members list 내부의 sy, hj, hw를
              순차적으로 가져다쓰는데요

              즉,

              member = sy
              member = hj
              member = hw

              가 for 구문 내에서 차례대로 돌게 됩니다.

              1) sy를 썼을 경우

              member = sy
              → 조건문 비교 sy == sy
              → return True (바로 함수 종료)
              → login(input_id) = True
              → print("hello"+input_id)실행

              (문제없어보입니다만,,,,,질문하신 바와 같이 아래가 문제입니다.)

              2) hj(혹은 hw)를 썼을 경우
              member = sy (← for in 구문은 상술한 바와 같이 list의 값을 처음부터 차례차례 모두 데려옵니다.)
              → 조건문 비교 sy == hj
              → if 뒤의 값 False
              → else로 이동(***)
              → return False (함수 종료)
              → login(input_id) = False
              → print("누구세요") 실행

              따라서 (***)부분은 우리가 의도한 바가 아니며,
              for 구문이 첫값인 sy외에 나머지 hj, hw도 가져올때까지는
              아직 False를 return하면 안되겠죠?
              (말하자면 for in 구문이 members 내부의 값을 다 찾는 동안 '기다려줘야' 합니다.)

              즉, False가 return되어야할 시점은 for in 구문이 종료된 이후입니다.
              대화보기
              • dkfdktjanjgkrp
                2가지 질문을 하려고 합니다.. 혹시 아시는 분 계시면 답글 부탁드려요~
                1. input_id= input("아이디를 입력해주세요.\n")
                def login(_id):
                members=['sy', 'hj', 'hw']
                for member in members:
                if member==_id:
                return True
                else:
                return False

                if login(input_id):
                print("hello"+input_id)
                else:
                print("누구세요")

                => 여기서 for문 안에 else: return false를 쓰면 'sy'일때만 출력값이 hello sy이 나오고 'hj', 'hw'는 누구세요. 가 나오네요 ㅠㅠ 혹시 왜 그런지 로직을 설명해주시면 감사하겠습니다

                2.
                input_id= input("아이디를 입력해주세요.\n")
                def login(_id):
                members=['sy', 'hj', 'hw']
                for member in members:
                if member==_id:
                return True

                if login(input_id):
                print("hello"+input_id)
                else:
                print("누구세요")
                => 동영상 강의는 for 이 끝날 때, return false를 했는데, return false를 굳이 입력하지 않아도 결과가 동일하게 출력되더라구요.. 꼭 return false를 해야하나요???
              • JustStudy
                return 값은 그 함수가 수행한 후 함수명의 값으로 되돌려 주는 값이거든요, print나 put과 같이 화면에 값을 찍어 주는 것이 아니죠.
                login()함수를 호출했을 경우 return True라고 한다면, login()의 값이 True인 것과 같습니다.
                따라서, True나 False를 화면에 찍어 주려면, print(login(input_id))라고 해야 하겠죠.
                대화보기
                • NoobUnityStarter
                  제가 잘 이해했는지는 모르겠네요, 아시는분 계씬다면 지적 부탁드립니다.
                  https://youtu.be......HHs

                  제가 유트브로 한번 아는데로 설명해봤습니다.
                • 심화평
                  으릅다 으려워 ㅜㅜ 17-06-20 감사합니다.
                • 4노라면
                  오~~무슨 뜻인지 이해(여러번 읽어보고 이해가 되네요 ㅎㅎ)가 됩니다.

                  감사합니다~^^
                  대화보기
                  • Jaewon Lee
                    저도 초급 비전공자라.. 제 아는 한에서 답을 해 드리자면...
                    -----------------------------------
                    우선 if member.... 문이 for 문에 속하는 문이므로 안쪽으로 한번 더 들여쓰기 해야할 것 같구요.

                    결과만 보면 차이는 없을 수 있지만,
                    login 이라는 함수를 다른 코딩에서 활용할 수 있는 확장성에서는 크나큰 차이가 있다고 보시면 될 것 같아요. egoing님이 작성한 login 함수의 경우, 아이디 확인에 따른 T/F 값을 반환하기에 이를 활용하여 다른 함수에서 얼마든지 활용할 수 있게 되겠지만,

                    4노라면 님이 작성한 login 함수의 경우, 반환값이 (egoing 입력시) 'Hello, egoing' 이나, (abfc 입력시) 'Who are you?' 라는 반환값만 나오므로 이를 활용할 수 있는 확장성에는 큰 제약이 발생한다고 보여지네요.
                    -----------------------------------
                    여기까지 초급자 입장에서 개인적으로 생각이 드는 차이점입니다. ^^
                    대화보기
                    • 나만의 부
                      2017.04.18 감사합니다~
                    • edoctor
                      저는 코딩을 생활코딩을 처음배우는 사람이라 정확히 이해한건지 모르겠지만 제가 이해한대로 설명드리겠습니다.

                      5.py 를 기준으로 함수구문은 return False로 끝이납니다. 그 함수구문은 결국 'True' 혹은 'False' 라는 결과값을 내게 되고, 그 다음 나오는 if else 구문은 함수에서 결과로 낸 ' True' 혹은 ' False' 의 결과 값에 따라서(불리언) 실행되는 것입니다. 그래서 input_id 와 _id 가 달라도 상관이 없게 되는 것입니다.
                      결국 컴퓨터에서든, 수학에서든 달라도 아무런 문제가 없게 됩니다.
                      대화보기
                      • 4노라면
                        input_id = input("아이디를 입력해주세요.\n")
                        def login(_id):
                        ++++members = ['egoing', 'k8805', 'leezche']
                        ++++ for member in members:
                        ++++ if member == _id:
                        ++++++++ return 'Hello, '+_id
                        ++++return 'Who are you?'
                        print(login(input_id))
                        리턴값을 이렇게 주는것 하고 차이가 있는건가요?
                      • 달리는 중입니다.

                        모두들 화이팅 하세요.
                      • HOING
                        http://ideone.com/aFNlX5

                        이렇게도 해봤는데 어떤 부분이 문제라서 문구가 세 개씩이나 뜨는 걸까요? ㅠ
                      • seeong2
                        ---------------4.py--------------------------------------
                        def a(str,num):
                        return str*num
                        input_str = input('say something?\n')
                        input_num = input('how many?\n')
                        print(a(input_str,int(input_num)))
                        --------------------------------------------------------
                        $ python3 4.py
                        say something?
                        hi
                        how many?
                        2
                        hihi
                      • Philip Oh
                        수포자였는데, 다시금 함수란 단어를 듣게될줄이야...
                        좋은 강의 감사합니다~
                        다시 돌려 봐야겠습니다 ㅋㅋ
                      • cancaodosang
                        /*수학에서의 함수를 생각해보면 f(x) = x + 1 이라는 함수가 있다고 했을 때, x 를 매개변수라고 하고 어떤 수를 대입하더라도 작동을 하는 것을 알 수 있죠. f(2) = 2 + 1 ..... f(3) = 3 + 1 ..... 이런식으로 말입니다. (여기서 실제 대입된 값 2와 3은 매개변수와는 별도로 전달인자(argument)라고도 합니다.) */

                        --->f(3)=5+1 라는 함수가 컴퓨터에서는 잘 작동은 할지몰라도, 일반 상식으로 이해를 할려니깐, 도통 이해 하기가 어렵습니다.
                      • 강군
                        지나가다가 도움이 될까 싶어 댓글답니다.

                        함수를 정의할 때 def login(_id) 에서 괄호 안에 _id 를 매개변수(parameter) 라고 합니다. 주지하신대로 어떤 문자(이미 지정된 함수를 피하는 것이 좋지만)를 사용해도 작동하게 됩니다. 어렵게 생각하실 필요 없습니다. 매개변수는 그 함수 내에서만 작동하는 지역변수이고 함수를 호출할 때 입력 값으로 쓰인 input_id 값을 그대로 전달받아 정의된 함수 내에서 쓰이게 됩니다. (호출할 때 쓰인 변수(input_id)와 정의할 때 쓰인 매개변수(_id) 가 같을 필요는 없습니다. 실제 값(value)는 똑같지만요)

                        수학에서의 함수를 생각해보면 f(x) = x + 1 이라는 함수가 있다고 했을 때, x 를 매개변수라고 하고 어떤 수를 대입하더라도 작동을 하는 것을 알 수 있죠. f(2) = 2 + 1 ..... f(3) = 3 + 1 ..... 이런식으로 말입니다. (여기서 실제 대입된 값 2와 3은 매개변수와는 별도로 전달인자(argument)라고도 합니다.)

                        위의 예제를 보면, if 문에서 login 함수를 쓰면서 코드 맨 첫 줄 input 함수로 받은 input_id 변수를 login 함수의 입력값으로 쓰고 있죠. 여기서 input_id는 그대로 login 함수가 정의된 def login(_id) 의 _id 값으로 대입됩니다. 그것이 나중에 리스트에 들어있는 값과 비교될 때 사용이 되고 return 값은 True 혹은 False 로 출력이 되어 본래 함수를 호출한 if 문에서 쓰이게 되죠.

                        도움이 되었으면 좋겠습니다.
                        대화보기
                        • 강군
                          지나가다가 도움이 될까 싶어 댓글답니다.

                          함수를 정의할 때 def login(_id) 에서 괄호 안에 _id 를 매개변수(parameter) 라고 합니다. 주지하신대로 어떤 문자(이미 지정된 함수를 피하는 것이 좋지만)를 사용해도 작동하게 됩니다. 어렵게 생각하실 필요 없습니다. 매개변수는 그 함수 내에서만 작동하는 지역변수이고 함수를 호출할 때 입력 값으로 쓰인 input_id 값을 그대로 전달받아 정의된 함수 내에서 쓰이게 됩니다. (호출할 때 쓰인 변수(input_id)와 정의할 때 쓰인 매개변수(_id) 가 같을 필요는 없습니다. 실제 값(value)는 똑같지만요)

                          수학에서의 함수를 생각해보면 f(x) = x + 1 이라는 함수가 있다고 했을 때, x 를 매개변수라고 하고 어떤 수를 대입하더라도 작동을 하는 것을 알 수 있죠. f(2) = 2 + 1 ..... f(3) = 3 + 1 ..... 이런식으로 말입니다. (여기서 실제 대입된 값 2와 3은 매개변수와는 별도로 전달인자(argument)라고도 합니다.)

                          위의 예제를 보면, if 문에서 login 함수를 쓰면서 코드 맨 첫 줄 input 함수로 받은 input_id 변수를 login 함수의 입력값으로 쓰고 있죠. 여기서 input_id는 그대로 login 함수가 정의된 def login(_id) 의 _id 값으로 대입됩니다. 그것이 나중에 리스트에 들어있는 값과 비교될 때 사용이 되고 return 값은 True 혹은 False 로 출력이 되어 본래 함수를 호출한 if 문에서 쓰이게 되죠.

                          도움이 되었으면 좋겠습니다.
                          대화보기
                          • dldl
                            감사합니다~ 정말 깔끔하고 쉽게 설명잘하시는거같아요 ㅎㅎ
                          • 2017.01.04 완료
                          버전 관리
                          egoing
                          현재 버전
                          선택 버전
                          graphittie 자세히 보기