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. user1jena
    <auth.py>
    import prac35_1
    input_id = input('아이디 : ')
    if prac35_1.login(input_id):
    print ('Hello, ' + input_id)
    else:
    print ('Who are you?')

    <5.py>
    def login(_id):
    members = ['egoing','leezche','graphitiie']
    if _id in members:
    return True
    else:
    return False

    위와 같이 작성하여 작동되는지 확인했습니다. 고맙습니다~
  2. user1jena
    아 그리고 모듈에 대한 개념이 애매했었는데 이고잉님 강의 덕분에 개념이 잘 잡힌 것 같아요. 항상 한줄한줄 설명해주시는 것도 그렇고 비유 등을 통해서 알려주신 덕분에 기본적인 개념이 잘 잡히고 있습니다. 고맙습니다!
  3. user1jena
    처음 접한게 파이썬이라 그런지 확실히 파이썬이 더 편하고 접근하기가 좋네요~앞으로 주로 사용하게 될 언어도 파이썬이다 보니 전 파이썬을 골라서 가겠습니다! 여러 언어를 사용하시는게 참 대단하시단 생각이 많이 들어요. 이렇게 비교분석 해주시는걸 보는 재미도 쏠쏠합니다. 항상 좋은 강의 고맙습니다~
  4. 제이케이
    개인적인 생각이지만... 루비보다는 파이썬이 훨씬 깔끔하다는 느낌이네요...

    강의 감사합니다. ^^
  5. 미림_likelion
    수강 완료했습니다. 감사합니다,
  6. message
    데이터 분석을 아직은 시작안했지만 참으로 흥미롭게 재미있는 강의 인듯 싶습니다.
    이해도 쏙쏙 되고 정말 하나의 코드가 이렇게 역할을 할수 있구나
    하나의 코드로 인해 변화가 되구나 라는 것을 알게되었습니다.
  7. 심화평
    17-06-27 감사합니다! (개인적으로 루비 보다는 파이썬으로)
    피닉스os 멀티부팅 하려다 실패해서 백업도 못하고 윈도우 밀고..(실습파일이랑 웹서버 날아갔네요) 대신 우분투 멀티부팅은 성공해서
    우분투로 해보고싶은거 하는중입니다. 이제 다시 열심히 이고잉님 파이썬강좌를 들어야겠네요
  8. JaeMin Choi
    유다시티에서 강의 들으면서 이해가 쉽지 않을때
    이고잉님의 강의에 와서 많은 도움을 받습니다. 특히 개념 잡을 때 탁월하세요!
    감사합니다.
  9. 나만의 부
    2017.04.19 감사합니다~
  10. 감사합니다.
  11. 문돌이
    좋은 강의 감사드립니다.
    from jin100035 import a
    import k8805
    if auth.login(input_id, input_pwd)
  12. 폭스킴
    module_function() 을 잊지 말자!
  13. 이현정
    감사합니다
  14. 환글
    오늘도 이렇게 한단원을 배웠네요^^ 고맙습니다~~
  15. 갈치속젓
    파이썬에서 같은 경로에 있는데도 모듈 이름이 없다면서 모듈이 불러와지지 않으면 어떻게 하나요?
  16. 쥬디다무
    from egoing import a
    from mtinet import a

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


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

    이러한 사용법도 있다는 것을 익히는 차원에서만 사용할 수 있는 것 같아요.... 아니면 모듈을 불러올 때 전체 모듈을 불러오면 용량의 문제가 발생할 수 있는 곳에서 사용하던지 말이죠....
  17. JustStudy
    고맙습니다
  18. 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 자세히 보기