Python & Ruby

모듈

모듈이란?

내장모듈

Python 

import math
print(math.ceil(2.9))
print(math.floor(2.9))
print(math.sqrt(16))
3
2
4.0

ideone.com

Ruby

puts(Math.sqrt(16))
4.0

ideone.com

모듈에 없을 때

Python

def egoing_a():
    return 'a'
#엄청 많은 코드
def k8805_a():
    return 'B'
#엄청 많은 코드
print(egoing_a())

Ruby

def egoing_a()
  return 'a'
end
#엄청 많은 코드
def k8805_a()
  return 'B'
end
#엄청 많은 코드
puts(egoing_a())

실행결과

a

Python | Ruby 

모듈의 도입 - 파이썬

Python

egoing.py

def a():
    return 'a'
def b():
    return 'b'
def c():
    return 'c'

k8805.py

def a():
    return 'B'

 3.py

from egoing import a as z
import k8805 as k
print(z())
print(k.a())
a
B

모듈의 도입 - 루비

Ruby 

egoing.rb

module Egoing
  module_function()
  def a()
    return 'a'
  end
end

k8805.rb

module K8805
  module_function()
  def a()
    return 'B'
  end
end

3.rb

require_relative 'Egoing'
require_relative 'K8805'
puts(Egoing.a())
puts(K8805.a())
a
B

모듈을 통한 중복의 제거 & 재활용성의 증대

Python

egoing.py

def a():
    return 'a'
def b():
    return 'b'
def c():
    return 'c'

4_1.py

import egoing
print(egoing.a())
a

4_2.py

import egoing
print(egoing.a())
a

로그인 에플리케이션

Python 

auth.py

def login(_id):
    members = ['egoing', 'k8805', 'leezche']
    for member in members:
        if member == _id:
            return True
    return False

5.py

import auth
input_id = input("아이디를 입력해주세요.\n")
if auth.login(input_id):
    print('Hello, '+input_id)
else:
    print('Who are you?')

Ruby

auth.rb

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

5.rb

require_relative 'Auth'
puts("아이디를 입력해주세요")
input_id = gets.chomp()
if Auth.login(input_id)
  puts('Hello, '+input_id)
else
  puts('Who are you?')
end

댓글

댓글 본문
  1. Sansol Park
    안녕하세요! 나이가 많으셔도 질문을 하시는 것 자체가 학습에 대한 열정을 보여주시는 것 같아 멋지십니다. 질문 주신 내용에 대해 답변드리겠습니다.

    ### 1. **Python에서 `return`을 만나면 함수가 끝나나요?**

    네, 정확하게 보셨습니다. **Python에서 `return`은 함수의 실행을 종료하고 값을 반환하는 역할을 합니다.**

    즉, 함수 내에서 `return` 문이 실행되면 그 지점에서 함수의 실행이 끝납니다. 그 뒤에 있는 코드는 실행되지 않습니다. 이것은 파이썬뿐만 아니라 많은 프로그래밍 언어에서 공통적으로 적용되는 개념입니다.

    예를 들어, 아래와 같은 함수가 있다고 가정해봅시다:

    ```python
    def example_function():
    print("This will be printed.")
    return "This is the return value."
    print("This will NOT be printed.") # 이 부분은 실행되지 않음
    ```

    위 함수에서 `print("This will NOT be printed.")`는 `return` 뒤에 있기 때문에 절대로 실행되지 않습니다. 함수가 `return`을 만나면 그 즉시 실행이 종료되기 때문입니다.

    ### 2. **Ruby에서도 `return`이 동일하게 동작하나요?**

    네, **Ruby에서도 `return`은 함수나 메서드의 실행을 종료하고 값을 반환합니다.** Python과 비슷한 방식으로 작동합니다.

    예를 들어, Ruby 코드에서도 아래와 같은 함수가 있을 수 있습니다:

    ```ruby
    def example_function()
    puts "This will be printed."
    return "This is the return value."
    puts "This will NOT be printed." # 이 부분은 실행되지 않음
    end
    ```

    이 경우에도 `return` 문 이후의 코드는 실행되지 않습니다. `return`은 해당 메서드의 실행을 종료하고 결과를 반환하는 역할을 합니다.

    ### 결론

    - **Python에서 `return`을 만나면 그 즉시 함수가 종료**되며, 그 이후의 코드는 실행되지 않습니다. 이는 우문이 아니라 매우 적절한 질문이었습니다.
    - **Ruby에서도 동일하게 `return`이 함수의 실행을 종료**하는 역할을 합니다.

    만약 `return` 문 이후에도 코드를 계속 실행하고 싶다면, `return`을 그 위치에 두지 않고, 함수의 마지막에 위치시키는 것이 좋습니다.
    대화보기
    • Byunghawk Lee
      Python에서는 Return을 만나면 Function이 끝나버리나요?

      현재 코드는 그렇게 되어있네요.
      우문인가요?
      나이가 많다 보니 머리가 잘 안돌아 가네요. ...ㅎㅎ
    • Victorim
      완료했습니다!
    • 냥더쿠
      import math as m
      from math import floor as f
      print(m.ceil(2.9))
      print(f(2.9))
      이렇게 하니까 이해가 잘되는군요
    • 오션호스
      210723 항상 감사합니다 선생님 아프지마세요ㅠ
    • 나영쓰
      210715
    • 미뇨르
      210627 완료!!
    • 태연코딩
      수업제작하는 데에 정말 고생이 많으셨군요 몸도 안좋으셨고 ㅜㅜ 늘 감사합니다
    • 정효빈
      완료했습니다!
    • 드림보이
      잘 들었습니다...
    • 용만
      2021년 3월 5일 완료했습니다.
    • Twayne
      2021.02.24
    • 후니
      완료
    • Hyunwoo Kim
      210204 감사히 잘 보았습니다.
    • loveahav
      2021.1.30
    • 이에이
      1월 9일
    • 오늘부터 시작
      2021.1.1
    • 이현수
      20.12.18
    • 윤유상
      함수를 재활용해서 중복을 제거하고, 기능에 따라 분류해서 생산성을 높이는 모듈, 잘 배웠습니다 ㅎㅎ 감사합니다!
    • 홍주호
      20.12.5
    • 이영석
      11월 21일 완료했습니다!
    • cgoing
      cgoing / 2020.09.24
    • 허우룩
      2020.09.23
    • 쿠키앤크림
      pupu님 따라잡기
      2020/07/02 완료
    • 허클베리핀
      20.06.02_완료
    • 허클베리핀
      <북마크> 모듈의 도입(파이썬)
    • 코딩하자파이팅
      2020. 06. 01 책갈피 "Python & Ruby - 모듈 4 - 1 : 모듈의도입 파이썬"
    • 김광현
      5/29완료
    • Jaehyun Lee
      질문드립니다. 루비에서 모듈 사용 시, require 뒤에 나오는 부분은 module 이름이 아닌 파일 이름 인가요?
      ubuntu 환경에서 require_relative 를 이용하여 위 코드와 동일하게 작성 시 파일 읽어오지 못하지만, 소문자로 변경하여 작성 시 정상적으로 동작해서 문의드립니다.

      requre_relative 'Egoing' -> require_relative 'egoing'

      파일 이름 변경하고 다시 해보니 파일 이름을 적어주어야 하는게 맞는것 같습니다.
    • 맥반장
      2020-03-29 완료!
    • 악어
      2020.02.27 완료 감사합니다!!
    • riversik
      2020.02.16
      완료
    • hong
      휴,, 좀 힘들었어요 ^^
    • 내일은 코딩왕
      완료 감사합니다
    • 도전차차차
      20191025
    • 정 준상
      2019/10/13 완료
    • 가재준
      완료
    • FIRE
      20190819 완료
    • 허니비
      190807
    • Ray Kim
      생활코딩에서 WEB1 HTML 수업을 들었었는데 그 때 이고잉님이 하신 말씀중 어려운것들은 어떤 특이 상황에 더 쉽고 편리하지만 응용하기 어렵고 쉬운것들을 기반으로 해서 만들어진다는게 떠오르네요! 지금 저희가 배우고 있는 어려워 지고있는 내용들도 쉬운것들로 이루어져 있다고 생각하니 더욱 열심히 하게 되네요!
    • Ray Kim
      조금 쉬어가면서 수업올리셔도 됩니다~ 너무 무리하지마세요!
    • 김민수
      함수를 사용할때 중복되는것을 방지하는 방법은
      1. 함수의 이름 작성자의 이름을 포함시킨다 ex) KMS_sort(a)

      2. 모듈을 활용함으로써 같은이름의 함수가 공존할수 있도록 설정하는것이다
      ex) KMS.a() (KMS 모듈의 a 함수)
      REV.a() (REV 모듈의 a 함수)

      모듈을 사용하는 이유는 중복의 방지도 존재하지만 유지보수 즉 유연한 프로그래밍에 도움이 된다는것이다.
      예를 들어
      def KMS_a():
      return "a"

      라는 함수가 존재하며
      REC.py 라는 파일과 REV.py라는 파일에 각각
      def KMS_a():
      return "a"
      라는 함수를 사용하고 코드를 고칠때 일일이 손봐야 하는 반면

      KMS 라는 파일에 위의 함수를 정의한 다음
      import KMS 즉 해당 함수가 존재하는 파일을 호출하게 되면
      각 파일에 있는 return 값을 모두 고치지 않고 KMS 파일의 정의된 함수만 손보면 된다는 것이다.
    • 김민수
      import 는 할당이다
      egoing은 egoing.py 이라는 파일명의 이름이며 import egoing은 egoing 이라는 파일을 호출하는것이다

      from egoing import a 라는것은 egoing 파일안의 함수 a만을 호출한다는 뜻이다

      from egoing import a as KMS 라는것은 egoing 파일안의 함수 a를 호출하는데 이 함수의 이름을 KMS로 바꿔서 사용하겠다는 뜻이다.

      ※주의 from egoing import a 로 호출했을때
      print(a()) 즉 파일의 이름인 egoing을 쓸 필요가 없다
      반면, import egoing 을 호출할시
      print(egoing.a()) 로 호출하여야 한다
    • 얼그레이
      감사합니다!! 하루 하루 너무 재미있게 배우고 있습니다 :)
      190603
    • Sunday
      감사합니다
    • hs4351
      190517 완료 감사합니다
    • 정돌
      완전이해 감사!!!
    • Hotak Choi
      190419!
    • wiseman
      1904191117
    • 김또쥬
      좋은강의 감사합니다