จะใช้ import module หรือ from module import ??

Kritchai Tadbhusinwat
1 min readFeb 15, 2022

--

image from https://www.fireblazeaischool.in/

โดยทั่วไปแล้วในภาษา Python สิ่งที่มักอยู่บรรทัดแรก ๆ ของการเขียนโปรแกรม ก็คือการเรียกใช้ module (หรือจะเรียกว่า library หรือ package ก็ได้ ซึ่งก็คือโปรแกรมที่เขียนขึ้นมาเพื่อให้ทำงานเฉพาะอย่าง) โดยเราต้องบอกตัวโปรแกรมว่าต้องการจะใช้ module ชื่ออะไรก่อน ซึ่ง module นั้นอาจจะมีติดมาแล้วกับตัวภาษานั้น ๆ หรือเราจะเขียนมาใช้เองก็ได้

ในที่นี้จะยกตัวอย่างการใช้งาน module math ที่มีติดมากับตัวภาษา Python อยู่แล้ว

แบบที่ 1 : import module

import mathprint(math.pi)
print(math.factorial(5))

จะเห็นว่าหากเราต้องการเรียกใช้งาน module math จะต้องมีการระบุชื่อ module ไว้ก่อนตามด้วย . (จุด) แล้วก็ชื่อ property หรือ method ที่ต้องการ
ซึ่งถ้าหากมีการเรียกใช้บ่อย ๆ ก็จะทำให้ code ดูรกได้ แต่ทั้งนี้ เราสามารถที่จะตั้งชื่อเล่นให้ module ได้ด้วย เช่น (import math as m)

import math as mprint(m.pi)
print(m.factorial(5))

แบบที่ 2 : from module import *

from math import *print(pi)
print(factorial(5))

กรณีนี้จะเป็นการ import ทุกอย่างที่อยู่ใน module นั้นมาทั้งหมด เมื่อต้องการจะเรียกใช้ property หรือ method สามารถเรียกที่ชื่อนั้นได้เลย (ไม่ต้องระบุชื่อ module)
แต่การทำแบบนี้ไม่แนะนำ เพราะเราไม่รู้ว่าสิ่งที่ import มานั้นมันมีอะไรบ้าง อาจจะเกิดการสับสนได้หากเราไปตั้งชื่อตัวแปรหรือชื่อฟังก์ชันซ้ำกับที่ import มา

แบบที่ 3 : from module import xxx

from math import pi, factorialprint(pi)
print(factorial(5))

กรณีนี้จะเป็นการระบุว่าต้องการใช้ module math โดยเอามาเฉพาะสิ่งที่ต้องการ(ในที่นี้คือ pi และ factorial() ) ตอนเรียกใช้ก็ไม่ต้องระบุชื่อ module แต่จะใช้ได้เฉพาะที่ระบุไว้เท่านั้น

สรุปแล้วควรใช้แบบไหน
อันนี้ก็แล้วแต่ความถนัดของแต่ละคนเลย แต่โดยทั่วไปแนะนำว่าควรใช้ ดังนี้
แบบที่ 1 : ให้ใช้กับ Standard module
แบบที่ 2 : ไม่แนะนำให้ใช้
แบบที่ 3 : ให้ใช้กับ Third party module หรือ module ที่เขียนเอง

เรื่องประสิทธิภาพ
ระหว่าง แบบที่ 1 กับแบบที่ 3

import x        # แบบนี้ เมื่อเรียก x.y โปรแกรมจึงจะไปค้นหา y มาใช้
from x import y # แบบนี้ โปรแกรมจะค้นหา y เตรียมไว้ก่อน

ดังนั้น หากมีการเรียกใช้ y หลาย ๆ ครั้ง แบบที่ 3 จะได้ประสิทธิภาพมากกว่า แต่หากเป็นการเรียกใช้งาน y ครั้งเดียว ก็ไม่ต่างกัน

--

--

Kritchai Tadbhusinwat
Kritchai Tadbhusinwat

Written by Kritchai Tadbhusinwat

Programmer บริษัทเอกชนที่เป็นส่วนหนึ่งของเบื้องหลังให้กับบริษัทชั้นนำต่าง ๆ และ Tutor สอนกวดวิชาคณิตศาสตร์/ฟิสิกส์ เพื่อเตรียมสอบเข้ามหาวิทยาลัย

No responses yet