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. 이현정
    감사합니다
  2. 환글
    오늘도 이렇게 한단원을 배웠네요^^ 고맙습니다~~
  3. 갈치속젓
    파이썬에서 같은 경로에 있는데도 모듈 이름이 없다면서 모듈이 불러와지지 않으면 어떻게 하나요?
  4. 쥬디다무
    from egoing import a
    from mtinet import a

    print(a())
    print(a())


    요렇게 사용했을 경우 모듈을 사용하기 전에 발생하는 마지막 정의가 이전의 정의를 덮어씌우는 현상이 똑같이 발생하네요...

    이러한 사용법도 있다는 것을 익히는 차원에서만 사용할 수 있는 것 같아요.... 아니면 모듈을 불러올 때 전체 모듈을 불러오면 용량의 문제가 발생할 수 있는 곳에서 사용하던지 말이죠....
  5. JustStudy
    고맙습니다
  6. LYONHAN@GMAIL.COM
    예 답변 감사드립니다.
    대화보기
    • 이웃집토토로
      저도 궁금해서 찾아봤는데요.
      루비에서는 메소드가 private랑 public 의 두 개로 나뉘어 있는데
      module_function이라는 private 메소드는 모듈에 포함된 함수를
      private 화 시켜서 손쉽게 호출할 수 있도록 한다는...

      모듈에 특정 메소드를 담는다는 기능을 하는데 그걸 안 쓰면
      담는다는 건지 불확실해서 작동하지 않는 것이 아닐까요.
      대화보기
      • 이웃집토토로
        문법 에러네요
        에디터에서 안 되는 건 모듈 경로 설정을 절대 경로로 쓰셔서 그런 것 같은데요 ?
        require_relative 를 쓰셨으면 같은 폴더라면 파일명만 쓰셔도 될거고요
        강의 내용에 나와있는 내용이니 다시 한번 보시면 될 것 같아요~ ~
        대화보기
        • 이웃집토토로
          모듈은 하나의 개념입니다. 개념 관련해 어떤 용어를 쓰는지는 프로그래밍 언어마다 다른데
          파이썬에서 모듈을 소스코드 수준으로 이해하려면 함수보다 더 큰 단위의 코드 묶음으로 이해하면 됩니다.
          보통 함수가 수십 줄 내의 코드로 구성된다면 파이썬의 모듈은 파일 단위의 코드 묶음을 의미합니다.
          좀 더 쉽게 설명해보면 우리가 마이크로소프트의 워드로 글을 쓴다고 했을 때 한 문단이 ‘함수’ 정도에
          해당한다면 워드 파일 하나가 바로 모듈에 해당합니다.

          https://wikidocs.net/773
        • 잠심일년
          직접 하나씩 실행시켰지만 여기서는 문제가 없는 것으로 나옵니다.
          정말 이상합니다. ????

          irb(main):001:0> module Auth
          irb(main):002:1> module_function()
          irb(main):003:1>
          irb(main):004:1* def login(id)
          irb(main):005:2> members = ['abc', 'def', 'ghi']
          irb(main):006:2>
          irb(main):007:2* for member in members do
          irb(main):008:3* if (id == member)
          irb(main):009:4> return true
          irb(main):010:4> end
          irb(main):011:3> end
          irb(main):012:2> return false
          irb(main):013:2> end
          irb(main):014:1> end
          => :login
        • 라이언
          저는 Ruby 로 하는데 Module 을 한 프로그램에서 사용하면 문제가 없는데, 파일로 만들면 아래와 같이 에러가 발생합니다. End 가 문제라고 표시되는데 코드를 그대로 복사해서 파일을 만들었기 때문에 같은 코드인데도 에러가 나옵니다. 아리송합니다...
          C:/Desktop/Ruby/Function/5.rb:1:in `require_relative': C:/Desktop/Ruby/Function/Auth.rb:13: syntax error, unexpected keyword_end, expecting end-of-input (SyntaxError)
          from C:/Desktop/Ruby/Function/5.rb:1:in `<main>'
          [Finished in 0.486s]
        • 감사감사
          감사합니다. ~~
        • 라이언
          Module 파일명에서 대문자와 소문자 구별이 사용해도 Module 함수 불러오기가 가능합니다.
          당연히 Module명은 대문자로 시작합니다.
        • 잉여잉여
          코드 맨 첫째줄에 다음과 같은 코드를 추가해주면 해결된다고 하네요.
          # -*- coding: utf-8 -*-
          대화보기
          • 검사무운
            잘 봤습니다. 감사합니다.
          • mataasita
            좋은강의 감사해요
          • 저같은 초보도 알기쉽게 설명해 주셔서
            강의 정말 잘 보고 있습니다.
            그런데요 ㅜㅜ
            파이썬에서 한글 주석을 달고 실행을 해보면
            SyntaxError: Non-ASCII character '\xec' in file
            라고 하면서 에러가 뜨는데,
            어떻게 해결해야 하나요? ㅠㅠ 나름 검색을 해본다고 해봤는데 전혀 모르겠는 소리뿐이라,,,
            도와주세요 ㅠㅠ
          • Jaeyoon Kim
            강의를 듣다보니 배움에 욕심이 나서 질문하나 올려봅니다.
            루비에서 module_function을 호출하는 이유나 원리가 궁금합니다.
            검색해보니 module_function을 사용하면 해당 모듈내의 함수들을 private처럼 사용할 수 있다던데, 알듯말듯 해요.
            누가 깔끔한 설명으로 제 뇌를 시원하게 해주실분 있나요?
          • Frank
            좋은 강의 만들어 주셔서 고맙습니다. ^^
          버전 관리
          egoing
          현재 버전
          선택 버전
          graphittie 자세히 보기