จะใช้ import module หรือ from module import ??
โดยทั่วไปแล้วในภาษา 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 ครั้งเดียว ก็ไม่ต่างกัน