The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by chaowalert, 2020-01-13 03:49:32

ฟังก์ชันและโมดูล

ฟังก์ชัน

LESSON

1 การเขียนฟังกช์ นั และโมดลู

ฟั งกช์ นั
(Function)

ฟงั กช์ ัน (Function) คือสว่ นของโปรแกรมทเ่ี ขียนขนึ้ เพ่ือใหส้ ามารถทางานได้อย่างใดอย่างหน่งึ ตาม
ความตอ้ งการ ในภาษา Python เราสามารถสรา้ งฟังกช์ นั ขน้ึ ใช้เอง เพื่อใหท้ างานตามทีต่ ้องการ ในการเขยี น
โปรแกรมเรามักจะแยกโคด้ ท่ีมีการทางานเหมือน ๆ กันเป็นฟังก์ชนั เอาไว้ และเรยี กใช้ฟังกช์ นั นนั้ ซา้ ๆ ซงึ่ เปน็
แนวคิดของการ reuse โคด้

ฟังก์ชันใน python แบ่งตามที่มาของฟงั ก์ชนั ได้ 2 ประเภท คือ
1) ฟงั ก์ชันท่ีมาพร้อมกบั python ซึ่งสามารถเรียกใช้ได้เลยโดยผา่ นทางโมดลู
2) ฟงั ก์ชนั ท่ีสร้างข้ึนใชเ้ อง

ประโยชนข์ องฟงั ก์ชัน

1) ตรวจสอบและแก้ไขข้อผิดพลาดได้งา่ ย สะดวก
2) เขยี นโปรแกรมส้นั ลง

การสรา้ งฟงั กช์ นั

การสร้างฟังก์ชันด้วยตนเอง สามารถเขียนด้วยคาข้ึนต้นว่า def และตามด้วยชื่อฟังก์ชัน ตามที่
ต้องการให้ทาหน้าที่อะไร โดยชื่อจะต้องไม่ซ้ากับคาสงวน ควรส่ือความหมายให้ตรงกับหน้าท่ีของฟังก์ชัน
จากนั้นให้ระบุช่ือตัวแปรสาหรับต้องการให้เป็นอาร์กิวเมนต์ ซึ่งอยู่ภายในวงเล็บ ตัวแปรอาจมีมากกว่า 1 ตัว
แปรกไ็ ด้ มีรูปแบบ ดงั น้ี

def functionName(arguments):

function_suite

return [expression]

ความหมายของคาส่งั มีดงั น้ี

def หมายถงึ เป็นคาสาคญั สาหรับการสรา้ งฟงั ก์ชัน

functionName หมายถึง เป็นชอ่ื ของฟงั ก์ชัน

arguments หมายถึง ตัวแปรหรือข้อมลู ท่ีจะรบั เข้ามาเพื่อนาไปประมวลผลภายในฟังกช์ ัน

อาร์กิวเมนต์ ต้องอยูภ่ ายในวงเล็บเสมอ ดา้ นหลงั เคร่ืองหมายวงเล็บปิด

จะตอ้ งมเี ครื่องหมาย : เพ่ือบอกวา่ ส้นิ สุดบลอ็ กคาสงั่ ของการกาหนดช่อื

และอาร์กวิ เมนต์ และเมื่อกดปุ่ม enter จะได้จัดย่อหน้าได้ถกู ต้อง

lesson 1 การเขยี นฟังกช์ นั และโมดลู 1

function suite หมายถงึ คาสั่งหรือเงื่อนไขต่าง ๆ ของฟังก์ชนั ท่ตี ้องการให้ทางาน หรอื ต้องการให้

ประมวลผล กับอาร์กวิ เมนต์ท่ีส่งเขา้ มา

return [expression] หมายถงึ การส่งค่าผลลพั ธใ์ ด ๆ ที่เกิดจากการประมวลผลภายในฟังก์ชนั การส่งคา่

กลบั จดั เปน็ ประเภททางเลือก บางฟงั ก์ชันอาจจะสัง่ ให้ทางานเสรจ็ สิ้น

ภายในฟังก์ชนั นัน้ ๆ ก็ได้

ตวั อย่างที่ 1.1 การสร้างฟังก์ชนั การหาผลลพั ธข์ องเลขยกกาลัง

1 def num_power(x,y):
2 return x**y

โปรแกรมมคี วามหมายดงั นี้
บรรทดั ที่ 1 ประกาศชื่อฟังกช์ ัน และมีอารก์ วิ เมนตเ์ ป็นตวั แปร 2 ตัวแปร ไดแ้ ก่ x และ y
บรรทัดที่ 2 เป็นคาส่งั สง่ ค่ากลบั โดยค่าท่ีสง่ ไป คือ ผลคณู เลขยกกาลงั ทรี่ บั เข้ามาจากตัวแปร x และ y

การเรียกใชฟ้ ังกช์ ัน (function call)

เมื่อสร้างฟังก์ชันเสร็จเรียบร้อยแล้ว การเรียกใช้ฟังก์ชันสามารถกระทาได้ 2 วิธี ด้วยกัน ได้แก่ วิธี
เรียกใช้จากโปรแกรมเดยี วกัน และวิธีเรยี กใชจ้ ากฟังกช์ นั อน่ื ๆ มรี ายละเอยี ดดงั น้ี

1. วิธเี รียกใชจ้ ากโปรแกรมเดียวกัน

ตวั อย่างที่ 1.2 การเรียกใช้ฟังกช์ นั ทีอ่ ยู่ในโปรแกรมเดียวกัน

1 def num_power(x,y):
2 return x**y
3
4 print(“ผลการคูณของเลขยกกาลังของ 5^2 คอื ”,num_power(5,2))
5 print(“ผลการคณู ของเลขยกกาลังของ 10^3 คือ ”,num_power(10,3))
โปรแกรมมีความหมายดงั นี้

เม่อื เพิม่ คาสง่ั การแสดงข้อมูล โดยการใสช่ ือ่ ฟังกช์ ันและป้อนค่าอาร์กิวเมนต์จานวน 2 ค่าอยภู่ ายใน
วงเล็บ การทางานของชอื่ ฟงั ก์ชันน้จี ะไปเรียกใชฟ้ งั กช์ นั บรรทดั ท่ีมีคาว่า def num_power(5,2)

ค่าอาร์กวิ เมนต์แรก คือ 5 จะไปแทนตวั แปร x และ 2 จะแทนค่า y ตามลาดับ ซ่งึ คาส่ังในฟงั กช์ ันให้
สง่ ค่ากลับการคูณยกกาลงั ของ xy หรือ 52 กลับไปยงั คาสั่ง print
ผลลพั ธท์ ไ่ี ด้คือ

ผลการคณู ของเลขยกกาลังของ 5^2 คอื 25
ผลการคณู ของเลขยกกาลังของ 10^3 คือ 1000

จากผลการทางานของฟังก์ชัน num_power(5,2) และ num_power(10,3) เป็นเรียกฟังก์ชัน
เดยี วกนั 2 ครง้ั ดงั น้ันผลลัพธข์ อง 52 จึงเท่ากบั 25 และ 103 ไดผ้ ลลัพธ์เท่ากับ 1,000

lesson 1 การเขยี นฟังกช์ นั และโมดลู 2

2. วธิ เี รียกใช้จากโปรแกรมอน่ื

เป็นวิธีที่ใช้สาหรับการเขียนโปรแกรมที่มีขนาดใหญ่และมีความซับซ้อนซ่ึงมักจะนาฟังก์ชันท่ีเขียน
ขึ้นมา จดั เกบ็ เอาไว้เป็นไลบรารีอย่างเปน็ ระบบ เพือ่ ตอ้ งการใหโ้ ปรแกรมตา่ ง ๆ สามารถเรยี กใช้ได้ ผ่านคาสั่ง
import ซ่ึงวธิ กี ารเรยี กใช้จากโปรแกรมอน่ื จะได้กล่าวในหัวข้อการสร้างโมดูลและการเรยี กใช้โมดลู ในส่วนทา้ ย
ของบทนต้ี อ่ ไป

รูปแบบการสร้างฟงั ก์ชัน

ลักษณะการสร้างฟังกช์ ันมรี ูปแบบ (Syntax) ของการเขยี นท่ีค่อนข้างง่าย แบ่งตามการนาไปใช้งานได้

4 รูปแบบ ดงั นี้

1) ฟังก์ชนั ที่ไมม่ ีการส่งค่าไปและไม่คืนค่ากลบั

2) ฟังกช์ ันท่มี กี ารสง่ ค่าไปแต่ไม่คืนคา่ กลับ

3) ฟงั ก์ชันท่ีไม่มีการสง่ ค่าไปแตค่ ืนค่ากลบั

4) ฟังกช์ ันที่มที ้ังการสง่ คา่ ไปและคืนค่ากลบั

รูปแบบการเขยี นฟังก์ชัน การเรยี กใช้ฟงั กช์ ัน ตวั อย่าง

1 def ชื่อฟงั ก์ชัน ( ): ชอื่ ฟงั กช์ นั ( ) def sum( ):

a = 100 a = 100

print(“a=%d”%a) print(“a=%d”%a)

print(a+10) print(a+10)

sum( )

2 def ชื่อฟงั กช์ นั (ตวั แปรอาร์กวิ เมนต์ ): ช่ือฟังก์ชัน(คา่ อาร์กวิ เมนต์) def sum(n):

a = คา่ อาร์กิวเมนต์ a=n
print(a+10) print(a+10)
sum(10)

รูปแบบการเขยี นฟังกช์ ัน การเรยี กใช้ฟังกช์ นั ตัวอยา่ ง

3 def ช่อื ฟงั กช์ นั ( ): X = ชอ่ื ฟังกช์ ัน( ) def sum( ):

a=1 a=1

b=2 b=2

print(a+b) print(a+b)

return a + b return a + b

x=sum( )

4 def ช่ือฟังก์ชนั (ตวั แปรอาร์กวิ เมนต)์ : X=ชื่อฟงั ก์ชนั (ค่าอาร์กวิ เมนต์) def sum(n):

a = คา่ อารก์ ิวเมนต์ a=n

b=5 b=5

print(a*b) print(a*b)

return a * b return a * b

x=sum(10)

lesson 1 การเขยี นฟังกช์ นั และโมดลู 3

ตวั อย่างที่ 1.3 การเรียกใช้ฟังก์ชนั ท่มี ีอาร์กิวเมนต์มากกวา่ 1 ตวั

1 def bmi_calculation(name, weight, height):
2 bmi = weight / height ** 2
3 print('Hi', name)
4 print('Your BMI is', bmi)
5 print('Body Mass Index Calculation')
6 yourname = input('Enter your name: ')
7 yourweight = float(input('Enter your weight (kg): '))
8 yourheight = float(input('Enter your height (m): '))
9 bmi_calculation(yourname, yourweight, yourheight)

ผลลพั ธท์ ไี่ ดค้ ือ
Body Mass Index Calculation
Enter your name: Sunee
Enter your weight (kg): 60
Enter your height (m): 1.63
Hi Sunee
Your BMI is 22.582709172343712

บรรทดั ที่ 1 เป็นการสรา้ งฟังก์ชัน bmi_calculation() ท่ีมพี ารามเิ ตอร์ 3 ตัว ประกอบด้วย name,
weight และ height

บรรทดั ที่ 6 - 8 เปน็ การรับข้อมลู เข้าจากแป้นพิมพ์
บรรทัดท่ี 9 เรยี กใช้ฟังก์ชนั bmi_calculation() โดยส่ง yourname, yourweight และ yourheight
ท่รี ับเขา้ มาเปน็ ข้อมลู ใหก้ บั พารามเิ ตอร์ name, weight และ height ของฟังกช์ นั bmi_calculation()
ตามลาดับ

พารามิเตอร์ของฟงั กช์ ันเปรยี บเสมอื นเปน็ ข้อมูลเขา้ ของฟงั ก์ชัน ค่าทส่ี ่งให้กับพารามิเตอร์ของฟังกช์ นั
ไม่จาเปน็ ต้องอยู่ในรปู ของตัวแปร อาจอยู่ในรปู ของคา่ คงตัวหรือนพิ จน์ ในกรณีที่อยู่ในรูปของตวั แปรอาจอยู่ใน
ชอ่ื ท่เี หมือนหรอื แตกตา่ งจากช่อื ของพารามเิ ตอร์ เนื่องจากเป็นเพยี งการสง่ ผา่ นคา่ จากภายนอกฟังกช์ ันเขา้ ไปสู่
ฟังกช์ นั เท่าน้ัน

ตัวอย่างที่ 1.4 โปรแกรมคานวณหาพน้ื ทสี่ ามเหลยี่ ม

1 def triangle_area(base, height):
2 result = 0.5 * base * height
3 print('Area of the triangle with base', base, 'height', height, 'is', result)
4 print('--<< Triangle area calculation >>--')
5 b=3
6 h=5
7 triangle_area(b, h)
8 triangle_area(b, 2*h)
9 triangle_area(4, 6)

lesson 1 การเขยี นฟังกช์ นั และโมดลู 4

10 triangle_area(base=2, height=4)
11 triangle_area(height=4, base=2)
ผลลัพธ์ทไี่ ดค้ ือ
--<< Triangle area calculation >>--
Area of the triangle with base 3 height 5 is 7.5
Area of the triangle with base 3 height 10 is 15.0
Area of the triangle with base 4 height 6 is 12.0
Area of the triangle with base 2 height 4 is 4.0
Area of the triangle with base 2 height 4 is 4.0

บรรทดั ท่ี 1-3 สรา้ งฟังกช์ นั triangle_area() ทมี่ ีพารามิเตอร์ 2 ตัว ชื่อ base และ height ตามลาดบั
ใช้สาหรบั รับคา่ ความยาวฐานและความสูงจากภายนอกฟงั ก์ชัน แลว้ นามาคานวณหาพน้ื ท่สี ามเหลี่ยมและ
แสดงผล

บรรทัดท่ี 5 และ 6 กาหนดคา่ ความยาวฐานและความสูงในช่ือตวั แปร b และ h ตามลาดับ จากนนั้ ใน
บรรทดั ที่ 7 มกี ารเรียกใช้ฟังก์ชัน triangle_area() โดยส่งคา่ อาร์กิวเมนต์ b และ h ไปให้กบั พารามเิ ตอร์
base และ height ตามลาดบั

บรรทดั ท่ี 8 มีการเรียกใช้ฟงั ก์ชัน triangle_area() โดยส่งคา่ อาร์กวิ เมนต์ b และอารก์ ิวเมนตท์ เ่ี ปน็
ผลลพั ธ์ของนิพจน์ 2*h ไปให้กบั พารามเิ ตอร์ base และ height ตามลาดับ

บรรทัดที่ 9 มกี ารเรียกใช้ฟงั ก์ชนั triangle_area() โดยส่งอาร์กวิ เมนตท์ เ่ี ปน็ คา่ คงตวั 4 และ 6 ไป
ใหก้ ับพารามิเตอร์ base และ height ตามลาดับ

บรรทัดท่ี 10 มีการเรียกใชฟ้ ังก์ชัน triangle_area() โดยเรยี กใชฟ้ ังก์ชันพรอ้ มระบุอาร์กิวเมนตเ์ ปน็ ชอื่
พารามเิ ตอร์และคา่ ที่ต้องการท่เี รยี กว่าอาร์กวิ เมนตค์ ยี ์เวริ ์ด (keyword argument) ในท่ีน้พี ารามเิ ตอร์ base
ถูกกาหนดให้มคี ่า 2 และ height ถูกกาหนดให้มีคา่ 4

บรรทดั ท่ี 11 มีการเรียกใช้ฟงั ก์ชัน triangle_area() ในลักษณะเดียวกบั บรรทดั ที่ 11 และมกี ารระบุ
อารก์ วิ เมนตเ์ ป็นช่ือพารามิเตอร์และค่าท่ีต้องการไปด้วยกนั จึงสามารถสง่ ค่าให้กบั พารามิเตอรใ์ นลาดับท่ี
แตกต่างจากท่ีฟังก์ชันนิยามไว้ได้

ขอ้ ควรระวังในการสรา้ งฟงั กช์ นั ในลกั ษณะนี้ คอื อารก์ วิ เมนต์ทม่ี กี ารกาหนดคา่ ล่วงหน้าต้องอยใู่ น
ลาดับตอ่ ท้ายจากอาร์กวิ เมนต์ปกติเท่าน้นั

ตวั อยา่ งท่ี 1.5 การกาหนดค่าลว่ งหน้าให้พารามเิ ตอร์

1 def display(message, times=1):
2 print(message * times)
3 display('Good Morning')
4 display('Thank you ', 3)
ผลลัพธ์ท่ีได้คือ
Good Morning
Thank you Thank you Thank you

lesson 1 การเขยี นฟังกช์ นั และโมดลู 5

บรรทดั ท่ี 1 ฟังกช์ นั display() นิยามพารามเิ ตอร์ 2 ตัว โดยพารามิเตอรช์ อ่ื times เปน็ พารามิเตอรท์ ี่
มกี ารกาหนดคา่ ล่วงหน้าเปน็ 1

บรรทดั ที่ 4 เรียกใช้ฟังก์ชัน display() โดยส่งคา่ อาร์กิวเมนต์เพียงค่าเดยี ว น่ันคอื คา่ ของพารามิเตอร์
message ในส่วนของพารามิเตอร์ times ใหใ้ ชค้ า่ ตามท่ีได้กาหนดไว้ น่ันคือค่า 1

บรรทดั ท่ี 5 เรียกใช้ฟังก์ชัน display() โดยส่งอารก์ ิวเมนต์ไปทง้ั สองคา่ ดงั น้ัน พารามเิ ตอร์ times จะ
ใช้คา่ ท่สี ง่ ไปให้ น่ันคอื คา่ 3

ตัวอยา่ งที่ 1.6 การเรยี กใช้ฟังกช์ ันที่มีกาหนดค่าล่วงหน้าใหพ้ ารามิเตอร์

1 def func(a, b=3, c=7):
2 print('a =', a, ', b =', b, ', c =', c)
3 func(30)
4 func(4, 2)
5 func(10, c = 18)
6 func(c = 15, a = 6)
ผลลพั ธท์ ไี่ ด้คือ
a = 30 , b = 3 , c = 7
a=4,b=2,c=7
a = 10 , b = 3 , c = 18
a = 6 , b = 3 , c = 15

จากตัวอย่างทผ่ี ่านมาพบว่าฟังกช์ นั print() เป็นฟังก์ชันท่ีมีพารามเิ ตอรจ์ านวนไม่แน่นอน และ
พารามเิ ตอร์เหล่านนั้ อาจอยู่ในหลายรปู แบบ เช่น ค่าคงตวั สตริง ตวั แปร นิพจนข์ องสตริง หรือจานวน และ
จัดเรยี งอยู่ในลาดบั อยา่ งใดก็ได้

ตวั อยา่ งท่ี 1.7 โปรแกรมคานวณหาพ้นื ท่ีสามเหลีย่ มแบบมีการคืนคา่ จากฟังก์ชัน

1 def triangle_area(base, height):
2 result = 0.5 * base * height
3 return result
4 print('--<< Triangle area calculation >>--')
5 b=3
6 h=5
7 area = triangle_area(b, h)
8 print('Area of the triangle with base', b, 'height', h, 'is', area)
9 print('Area of the triangle with base', b, 'height', h, 'is', triangle_area(b, 2*h))
ผลลัพธท์ ี่ไดค้ ือ
--<< Triangle area calculation >>--
Area of the triangle with base 3 height 5 is 7.5
Area of the triangle with base 3 height 5 is 15.0

lesson 1 การเขยี นฟังกช์ นั และโมดลู 6

ขอบเขตของตวั แปร

ขอบเขตของตัวแปร (scope of variable) หมายถึงขอบเขตในการอ้างอิงตัวแปรท่ีนิยามข้ึนใน
โปรแกรมขอบเขตของตัวแปรมี 2 ลักษณะ ได้แก่ ตัวแปรเฉพาะที่ (local variable) และตัวแปรส่วนกลาง
(global variable) ตัวแปรทุกตัวมขี อบเขตอยใู่ นบล็อก เริม่ ต้นจากตาแหน่งที่ตวั แปรนัน้ ถูกนยิ ามข้ึน

ตัวแปรเฉพาะที่เป็นตัวแปรท่ีนิยามอยู่ในบล็อกของฟังก์ชันนับจากตาแหน่งท่ีเร่ิมต้นนิยาม และจะถูก
อา้ งองิ ไดภ้ ายในบลอ็ กของฟังก์ชนั ดงั กลา่ วเทา่ นน้ั ไม่สามารถอา้ งอิงในบล็อกอ่นื ได้

ตัวแปรส่วนกลางเป็นตัวแปรทนี่ ิยามอยู่ในบลอ็ กของโปรแกรมหลัก และสามารถอา้ งองิ ไดใ้ นบล็อก
ของทกุ ฟังกช์ ัน

ตวั อยา่ งท่ี 1.8 ตัวแปรสว่ นกลางและตัวแปรเฉพาะท่ี

1 def func():
2 y=5
3 print('In function x is', x, 'and y is', y)
4 x=8
5 print('In main x is', x)
6 func()
ผลลัพธ์ท่ไี ดค้ ือ
In main x is 8
In function x is 8 and y is 5

ตัวแปร x ถูกนิยามในโปรแกรมหลักจึงเป็นตัวแปรส่วนกลาง ขณะท่ีตัวแปร y ถูกนิยามในฟังก์ชัน
func() จงึ เป็นตัวแปรเฉพาะทขี่ องฟังก์ชนั เม่ือมกี ารอ้างอิงตัวแปร x เพอ่ื แสดงผลในบรรทัดที่ 6 ค่าของตวั แปร
x จะถูกแสดงผล
การอา้ งองิ ตัวแปร y ในบรรทดั ที่ 3 จะหมายถึงตวั แปรเฉพาะท่ที ี่ถกู กาหนดคา่ ไวใ้ นบรรทัดท่ี 2
การอา้ งอิงตวั แปร x ในบรรทดั ที่ 3 จะหมายถึงตวั แปรสว่ นกลางที่ถูกกาหนดคา่ ไว้ในบรรทัดที่ 5

ตวั อยา่ งท่ี 1.9 การกาหนดค่าซา้ ของตัวแปรสว่ นกลางภายในฟังก์ชัน
1 def func():
2 y=5
3 x=2
4 print('In function x is', x, 'and y is', y)
5 x=8
6 func()
7 print('In main x is', x)

ผลลพั ธท์ ่ไี ดค้ ือ
In function x is 2 and y is 5
In main x is 8

lesson 1 การเขยี นฟังกช์ นั และโมดลู 7

บรรทัดที่ 3 เปน็ การนิยามตัวแปร x ภายในบลอ็ กของฟงั ก์ชัน func() ซง่ึ จะส่งผลให้ตวั แปร x มี
สถานะเป็นตัวแปรเฉพาะท่ีของฟงั กช์ ัน func() และเป็นคนละตัวกบั ตวั แปร x ในบล็อกของโปรแกรมหลัก

ในกรณีท่ีตอ้ งการอ้างอิงตัวแปร x ทเี่ ป็นตวั แปรสว่ นกลางภายในบลอ็ กของฟังก์ชันสามารถทาได้ 2
แนวทางตามตัวอย่างที่ 1.10 และ 1.11

ตัวอยา่ งที่ 1.10 การใชค้ าสง่ั global
1 def func():
2 global x
3 y=5
4 print('In function x is', x, 'and y is', y)
5 x=2
6 print(x)
7 x=8
8 func()
9 print('In main x is', x)

ผลลัพธท์ ีไ่ ดค้ ือ

In function x is 8 and y is 5
2
In main x is 2

คาสั่ง global x ในบรรทัดที่ 2 เป็นการกาหนดให้ตัวแปร x ภายในบล็อกของฟังก์ชัน func() เป็นตัว
แปรส่วนกลาง การอา้ งองิ ตัวแปร x ในฟงั กช์ ัน print() ในบรรทัดที่ 4 จงึ เป็นการอา้ งอิงตัวแปร x ทเ่ี ปน็ ตวั แปร
สว่ นกลางตวั เดยี วกนั กับในบรรทดั ที่ 8
มีการกาหนดค่า x = 2 ในบรรทดั ท่ี 5 ได้เปลย่ี นแปลงค่าตัวแปรส่วนกลาง x ใหม้ คี า่ เป็น 2 ดงั นน้ั การแสดง

ค่าตัวแปร x ในบรรทดั ที่ 9 จึงไดค้ า่ เป็น 2

ตวั อยา่ งท่ี 1.11 การสง่ ตวั แปรส่วนกลางเป็นพารามิเตอร์ของฟังก์ชัน
1 def func(x):
2 y=5
3 print(‘In function x is’, x, ‘and y is’, y)
4 x=2
5 print(x)
6 x=8
7 func(x)
8 print(‘In main x is’, x)

ผลลพั ธท์ ีไ่ ด้ คือ
In function x is 8 and y is 5
2
In main x is 8

ในบรรทัดที่ 1 ฟังก์ชัน func() ถกู นยิ ามวา่ เป็นฟังก์ชนั ท่ีมีพารามิเตอรจ์ านวน 1 ตัว ดังน้ันในบรรทดั ท่ี
7 ทม่ี ีการเรียกใช้ฟังกช์ ัน func() จงึ ต้องมีการส่งข้อมลู มาให้กับพารามเิ ตอร์ x

ภายในบลอ็ กของฟังกช์ ัน func() มตี ัวแปรเฉพาะที่ 2 ตวั คือตัวแปร x และ y การกาหนดคา่ ใหม่
ให้กบั ตวั แปร x ในบรรทัดท่ี 4 จึงเป็นการกาหนดค่าให้กบั ตัวแปรเฉพาะท่ี x

การอา้ งอิงตัวแปร x ในบรรทัดที่ 8 เป็นการอา้ งองิ ตัวแปร x ที่เป็นตวั แปรส่วนกลาง

lesson 1 การเขยี นฟังกช์ นั และโมดลู 8

โมดูล (Module)

โมดูล (Module) คือไฟล์หรือส่วนของโปรแกรมท่ีใช้สาหรับกาหนดตัวแปร ฟังก์ชัน หรือคลาสโดย
แบ่งย่อยอีกหน่วยหน่ึงจากโปรแกรมหลัก และในโมดูลยงั สามารถประกอบไปด้วยคาสั่งประมวลผลการทางาน
ได้ ยกตัวอย่างเช่น เม่ือคุณเขียนโปรแกรมในภาษา Python คุณอาจจะมีฟังก์ชันสาหรับทางานและจัดการกับ
ตัวเลขเป็นจานวนมาก และในขณะเดียวกัน คุณไม่ต้องการให้โปรแกรมหลักน้ันมีขนาดใหญ่เกินไป น่ัน
หมายความว่าคุณสามารถนาฟังก์ชันเหล่าน้ีมาสร้างเป็นโมดูล และในการใช้งานน้ันจะต้องนาเข้ามาใน
โปรแกรมโดยวิธีทเี่ รียกว่า Import

จากรปู จะเห็นว่าโมดูลก็คือการแยกสว่ นของโปรแกรมออกไปเปน็ อีกส่วนและสามารถเรียกใชไ้ ด้เมื่อ
ตอ้ งการ หรือกล่าวอีกนยั หนึง่ โมดูลก็เหมอื นไลบรารีของฟังกช์ ันและคลาสต่าง ๆ นั่นเป็นเพราะว่าเมื่อ
โปรแกรมมขี นาดใหญ่ เราสามารถแบ่งสว่ นต่าง ๆ ของโปรแกรมออกเป็นโมดลู ย่อย ๆ เพ่ือให้งา่ ยต่อการจดั การ
และการใชง้ านในภาษา Python โมดลู ท่ถี ูกสรา้ งขนึ้ มานั้นจะเป็นไฟลใ์ นรปู แบบ module_name.py และ
นอกจากน้ี Python ยังมี Built-in module เปน็ จานวนมาก เช่น math เป็นโมดูลเกี่ยวกับฟังกช์ นั ทาง
คณติ ศาสตร์ หรือ random เป็นโมดลู เพือ่ จัดการและสุ่มตัวเลข เป็นตน้

การสรา้ งโมดูลในภาษา Python

การสร้างโมดูลในภาษา Python เราต้องนาโค้ดของโปรแกรมโดยทัว่ ไปแล้วจะประกอบไปดว้ ย ตัวแปร
ฟงั ก์ชนั หรอื คลาส ไปรวมไว้ในไฟล์ใหมท่ ี่ไมใ่ ชไ้ ฟล์หลักของโปรแกรม ในรปู แบบ module_name.py โดยท่ี
module_name นนั้ เปน็ ชอ่ื ของโมดลู เพ่ือนาไปใชง้ านในการเขียนโปรแกรม โดยการเรียกใช้ดว้ ยคาสัง่
import

lesson 1 การเขยี นฟังกช์ นั และโมดลู 9

ตวั อยา่ งที่ 1.12 การสรา้ งโมดลู
1 # number.py
2 def sum(n1,n2):
3 n = n1+n2
4 return n
5
6 def dif(n1,n2):
7 n = n1-n2
8 a, b = 0, 1
9 return n

จากตวั อยา่ ง เปน็ การสรา้ งโมดูลโดยไฟล์ของโมดลู นนั้ มชี อ่ื ว่า number.py น่ันหมายความวา่ โมดูลนม้ี ี
ช่อื วา่ number ซึง่ นีเ่ ปน็ สงิ่ ท่ีเราจะใช้สาหรบั เรียกใชง้ านโมดลู ในการเขยี นโปรแกรม ภายในโมดลู ประกอบไป
ด้วย 2 ฟังกช์ ันท่ที างานเกยี่ วกับตวั เลข ฟังกช์ นั sum() เป็นฟงั ก์ชนั สาหรับหาผลบวกของตัวเลขจานวนเตม็ 2
จานวน และ ฟงั ก์ชนั dif() ใชห้ าผลคา่ งของจานวนเต็ม 2 จานวน

การนาโมดูลเขา้ ด้วยคาสง่ั import

หลงั จากทเ่ี ราไดส้ ร้างโมดูลไปแลว้ ตอ่ ไปจะเปน็ การนาโมดูลดังกลา่ วมาใชง้ าน ในภาษา Python นั้น
จะใชค้ าส่ัง import เพอื่ นาเข้าโมดลู เพ่ือนามาใช้งานในโปรแกรม ซึง่ มีรปู แบบการใช้ดังนี้

import ชือ่ โมดูล1,ช่ือโมดูล2,...
และการเรยี กใช้ฟังกช์ ันในโมดูลมรี ปู แบบดงั นี้

ชอ่ื โมดลู .ช่ือฟังกช์ ัน( )

ตัวอยา่ งที่ 1.13 การเรยี กใช้โมดูล
1 import number
2 print("ผลบวก =",number.sum(20,10))
3 print("ผลตา่ ง =",number.dif(20,10))

ผลลัพธ์ที่ได้ คอื
ผลบวก = 30
ผลตา่ ง = 10

การนาโมดูลเข้าด้วยคาส่ัง from…import

ในการใชง้ านคาสงั่ import นนั้ จะเปน็ การนาเขา้ ออบเจ็คทั้งหมดในโมดลู เข้ามายงั โปรแกรม และการ
ใช้งานฟงั กช์ นั หรือออบเจค็ ภายในโมดลู จะต้องนาหน้าดว้ ยชื่อโมดลู เสมอ ในภาษา Python น้ันมคี าสง่ั
from import สาหรับนาเข้าข้อมลู บางส่วนภายในโมดลู และสามารถใช้งานออบเจค็ ได้โดยตรงโดยไม่ต้องมี
Prefix ชือ่ ของโมดลู

lesson 1 การเขยี นฟังกช์ นั และโมดลู 10

ตัวอย่างท่ี 1.14 การเรยี กใชโ้ มดูลด้วยคาส่งั from...import
1 from number import sum
2 print("ผลบวก =",sum(20,10))
3 print("ผลบวก =",sum(10,10))

ผลลพั ธ์ทไี่ ด้ คอื
ผลบวก = 30
ผลต่าง = 20

จากตัวอย่าง เป็นการใช้งานคาส่ัง from ... import เพ่ือนาเขา้ ฟังกช์ นั ภายในโมดลู number จะเหน็
ได้วา่ เราได้นาเข้าเพยี งฟงั กช์ ัน sum() เขา้ มาในโปรแกรมและในตอนใชง้ านน้ันสามารถใช้ไดโ้ ดยที่ไมต่ ้องใช้
Prefix ในการเรยี กใช้

ในอีกทางหนึง่ เราสามารถนาเขา้ หลายออบเจค็ (ฟงั กช์ ัน) ในโมดลู โดยการใชเ้ ครื่องหมายคอมมา (,)
เป็นตัวคน่ั หรอื นาเขา้ ท้ังหมดโดยการใชเ้ คร่ืองหมายสตาร์ (*)

ตัวอยา่ งที่ 1.15 การเรยี กใช้โมดูลด้วยคาสั่ง from...import
1 from number import sum,dif
2 # or
3 from number import *
4 print("ผลบวก =",sum(20,10))
5 print("ผลบวก =",dif(10,10))

ผลลพั ธท์ ไ่ี ด้ คอื
ผลบวก = 30
ผลตา่ ง = 0

แต่อยา่ งไรกต็ ามน่ีเปน็ วิธที ไ่ี ม่แนะนาในการใช้งาน เพราะว่าวธิ ีดังกลา่ วนัน้ จะเปน็ การนาเํขา้ ท่ีอาจจะ
เกดิ ความขดั แยง้ กัน ดังนัน้ การใช้งานในรูปแบบของ Prefix จึงเปน็ วธิ ีฝกึ ปฏบิ ตั ทิ ี่ดสี าหรับการ Import โมดลู
เขา้ มาในโปรแกรม และนอกจากนี้ โมดลู ยงั สามารถ Import เป็นแบบลาดับชั้นได้ ยกตวั อยา่ งเชน่ โมดลู B
นาเข้า โมดลู A และหลังจากนั้นโมดูล C นาเข้าโมดูล B (A -> B -> C) เป็นต้น

lesson 1 การเขยี นฟังกช์ นั และโมดลู 11

แพ็คเกจ (Packages)

Package คือการกาหนดโครงสร้างของโมดูลในภาษา Python ท่ีเรียกวา่ Namespace เพื่อจัด
ระเบียบของโมดลู ต่างๆ ใหเ้ ป็นหมวดหมเู่ ดยี วกัน แนวคิดของ P a c k a g e เหมือนกบั ระบบจัดการไฟลใ์ น
ระบบปฏิบัตกิ ารซ่ึงจะประกอบไปดว้ ยดว้ ยไฟล์และโฟลเ์ ดอร์ โดยไฟล์ทีอ่ ยู่ในหมวดหมู่เดยี วกนั จะถูกเกบ็ ไว้ใน
โฟลเ์ ดอร์เดียวกัน เชน่ เดยี วกัน Package ใช้สาหรบั จัดหมวดหมูใ่ ห้กับโมดลู โดยโมดลู ทม่ี ีฟังกช์ ันและคลาสการ
ทางานทเี่ หมือนกนั จะอยู่ใน Package เดยี วกัน อยา่ งไรกต็ าม นี่จะข้ึนกับการออกแบบของโปรแกรมเมอร์

การสรา้ งโมดลู แพ็กเกจทาไดโ้ ดยการสรา้ งโฟลเดอร์ขนึ้ มาและใส่ไฟล์ .py ทต่ี ้องการรวมอยูใ่ นแพ็คเกจ
เอาไวใ้ นโฟลเดอร์นน้ั

ในกรณนี ้ชี ่อื ของโมดลู แพ็กเกจจะเปน็ ไปตามชอ่ื ของโฟลเดอร์น้ี สว่ นชอ่ื ของไฟล์ .py ในโฟลเดอรจ์ ะ
กลายเปน็ ซบั โมดูลภายในโมดูลนีไ้ ป แตน่ อกจากไฟลข์ อง .py ของโปรแกรมทีต่ ้องการใช้เปน็ ซบั โมดลู แล้ว
ภายในโฟลเดอร์ยังมีอกี สงิ่ ท่ีขาดไม่ไดอ้ ยู่ น่นั ก็คือไฟล์ท่ชี ่ือ __init__.py

__init__.py เปน็ โปรแกรมศูนย์ควบคุมของโมดลู เปน็ ไฟล์ท่ีจะถูกเรยี กใช้ให้ทางานเมื่อมีการเรยี กใช้
โมดลู ขน้ึ มา ไฟล์ __init__.py น้ีขอแค่สรา้ งขึน้ มาใหม้ ีอยู่ในโฟลเดอร์ก็พอ จะไมเ่ ขยี นโค้ดอะไรลงไปเลย สรา้ ง
ไว้เฉย ๆ ปล่อยว่าง ๆ ไวก้ ็ไมเ่ ป็นไร

ตัวอยา่ ง สร้างโฟลเดอรช์ ื่อ pack ขน้ึ มา ภายในมีไฟล์ช่อื __init__.py, mo1.py และ mo2.py แบบนเ้ี ราจะได้
โมดลู ชอื่ pack ซึ่งมีซบั โมดูล 2 อันช่อื mo1 และ mo2 ดังรูป

pack/
__init__.py
mo1.py
mo2.py

โดยท่ไี ฟล์ __init__.py เป็นไฟลส์ าหรบั บอก Python ว่า directory pack เปน็ module ตวั หนงึ่ แต่ Python
ก็ยังไมร่ ูว้ า่ ใน directory pack มีอะไรบา้ งอยดู่ ี ดงั น้ัน ภายในไฟล์ __init__.py ต้องประกาศ import ดงั นี้

1 # file: pack/__init__.py
2 from pack import mo1,mo2

ถา้ ตอ้ งการเรยี ก function fuc1 และ fuc2 ที่อย่ใู นไฟล์ mo1 และ mo2 ใน interactive shell สามารถทาได้
ดังน้ี

1 import pack
2 pack.mo1.fuc1(3)
3 pack.mo2.fuc2(3)
ผลลพั ธท์ ่ไี ด้

9
27

lesson 1 การเขยี นฟังกช์ นั และโมดลู 12


Click to View FlipBook Version