ผลต่างระหว่างรุ่นของ "Python Programming/Functions"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 14 รุ่นระหว่างกลางโดยผู้ใช้ 3 คน)
แถว 23: แถว 23:
 
</pre>
 
</pre>
 
== ฟังก์ชันในไลบรารีภาษาไพทอน ==
 
== ฟังก์ชันในไลบรารีภาษาไพทอน ==
ไลบรารีของภาษาไพทอนยังมีฟังก์ชันอื่นๆ ให้ใช้อีกมากมาย โดยที่ฟังก์ชันเหล่านี้จะถูกแบ่งจัดเก็บอยู่ใน '''โมดูล (module)''' หลายๆ โมดูล โดยก่อนที่เราจะสามารถนำฟังก์ชันเหล่านี้มาใช้ได้เราจะต้องทำการ "นำเข้า" โมดูลที่เก็บฟังก์ชันนั้นไว้ คำสั่ง <tt>import</tt> เป็นคำสั่งที่ใช้ในการนำ้เข้าโมดูลหรือฟังก์ชันที่อยู่ในโมดูลต่างๆ โดยมันมีไวยากรณ์ดังต่อไปนี้
+
ไลบรารีของภาษาไพทอนยังมีฟังก์ชันอื่นๆ ให้ใช้อีกมากมาย โดยที่ฟังก์ชันเหล่านี้จะถูกแบ่งจัดเก็บอยู่ใน '''โมดูล (module)''' หลายๆ โมดูล โดยก่อนที่เราจะสามารถนำฟังก์ชันเหล่านี้มาใช้ได้เราจะต้องทำการ "นำเข้า" โมดูลที่เก็บฟังก์ชันนั้นไว้ คำสั่ง <tt>import</tt> เป็นคำสั่งที่ใช้ในการนำเข้าโมดูลหรือฟังก์ชันที่อยู่ในโมดูลต่างๆ โดยมันมีไวยากรณ์ดังต่อไปนี้
 
<pre>
 
<pre>
 
import <<ชื่อโมดูล>>
 
import <<ชื่อโมดูล>>
 
</pre>
 
</pre>
ยกตัวอย่างเช่น ถ้าเราต้องการใช้ฟังก์ชันในโมดูืลชื่อ <tt>math</tt> ซึ่งเก็บฟังก์ชันทางคณิตศาสตร์ต่างๆ ไว้มากมาย เราก็จะสั่ง
+
ยกตัวอย่างเช่น ถ้าเราต้องการใช้ฟังก์ชันในโมดูลชื่อ <tt>math</tt> ซึ่งเก็บฟังก์ชันทางคณิตศาสตร์ต่างๆ ไว้มากมาย เราก็จะสั่ง
 
<pre title="interpreter">
 
<pre title="interpreter">
 
import math
 
import math
แถว 44: แถว 44:
 
3.0
 
3.0
 
</pre>
 
</pre>
 +
โมดูลที่นำเข้าอาจมีชื่อที่ยาวและไม่สะดวกในการใช้งาน คำสั่ง <tt>import</tt> รองรับคีย์เวิร์ด <tt>as</tt> เพื่อนำเข้าโมดูลพร้อมกับตั้งชื่อให้ใหม่ในรูปแบบ
 +
<pre>
 +
import <<ชื่อโมดูล>> as <<ชื่อใหม่>>
 +
</pre>
 +
เช่น
 +
<pre title="interpreter">
 +
import math as m
 +
</pre>
 +
เป็นการนำเข้าโมดูล <tt>math</tt> แต่เปลี่ยนชื่อการอ้างถึงผ่านตัวแปร <tt>m</tt> ซึ่งสามารถเรียกใช้งานค่าคงที่และฟังก์ชันภายในได้ตามปกติ เช่น <tt>m.exp()</tt> หรือ <tt>math.log()</tt>
 +
 
โมดูล <tt>math</tt> นอกจากจะเก็บฟังก์ชันทางคณิตศาสตร์แล้วยังเก็บค่าคงที่ทางคณิตศาสตร์เช่นค่าพายและค่า e เอาไว้ด้วย
 
โมดูล <tt>math</tt> นอกจากจะเก็บฟังก์ชันทางคณิตศาสตร์แล้วยังเก็บค่าคงที่ทางคณิตศาสตร์เช่นค่าพายและค่า e เอาไว้ด้วย
 
<pre title="interpreter">
 
<pre title="interpreter">
แถว 56: แถว 66:
  
 
== โมดูล random ==
 
== โมดูล random ==
โมดูลที่มีประโยชน์มากโมดูลหนึ่งคือโมดูล <tt>random</tt> ซึ่งมีไว้สำหรับสร้างเลขสุ่ม โดยมีฟังก์ชัน
+
โมดูลที่มีประโยชน์มากโมดูลหนึ่งคือโมดูล <tt>random</tt> ซึ่งมีไว้สำหรับสร้างเลขสุ่ม โดยมีฟังก์ชัน <tt>random.random()</tt> ไว้สำหรับสร้างเลขทศนิยมสุ่มที่มีค่าตั้งแต่ 0 ถึง 1
random.random()
 
ไว้สำหรับสร้างเลขทศนิยมสุ่มที่มีค่าตั้งแต่ 0 ถึง 1
 
 
<pre title="interpreter">
 
<pre title="interpreter">
 
>>> random.random()
 
>>> random.random()
แถว 67: แถว 75:
 
0.95364871658603856
 
0.95364871658603856
 
</pre>
 
</pre>
สังเกตว่าการเรียกฟังก์ชัน <tt>random.random()</tt> แต่ละครั้งจะให้ผลลัพธ์ต่างกัน
+
สังเกตว่าการเรียกฟังก์ชัน <tt>random.random()</tt> แต่ละครั้งจะให้ผลลัพธ์ต่างกัน และเมื่อคุณนำโค้ดข้างบนไป run บนเครื่องของตนเองก็จะได้ผลลัพธ์ต่างออกไปจากที่เขียนไว้นี้
{{Python Programming/Navigation|Variables and Assignments|Print Command}}
+
 
 +
ฟังก์ชันที่มีประโยชน์อีกฟังก์ชันหนึ่งคือฟังก์ชัน <tt>random.randint(a,b)</tt> ซึ่งจะสุ่มเลขจำนวนเต็มออกมาหนึ่งตัวโดยที่เลขจำนวนเต็มนั้นจะีมีค่าตั้งแต่ a ถึง b โดยรวม a และ b ด้วย
 +
<pre title="interpreter">
 +
>>> random.randint(1, 10)
 +
1
 +
>>> random.randint(1, 10)
 +
9
 +
>>> random.randint(1, 10)
 +
10
 +
>>> random.randint(1, 10)
 +
5
 +
</pre>
 +
 
 +
เราสามารถกำหนด seed ของ random number generator ได้ด้วยฟังก์็ชัน <tt>random.seed(x)</tt> โดยค่า x ที่ให้จะต้องเป็นจำนวนเต็ม
 +
<pre title="interpreter">
 +
>>> random.random()
 +
0.63942679845788375
 +
>>> random.random()
 +
0.025010755222666936
 +
>>> random.seed(398)
 +
>>> random.random()
 +
0.93033562902743527
 +
>>> random.random()
 +
0.42786425528137961
 +
>>> random.seed(42)
 +
>>> random.random()
 +
0.63942679845788375
 +
>>> random.random()
 +
0.025010755222666936
 +
</pre>
 +
 
 +
อนึ่ง ถ้าเราเรียก <tt>random.seed()</tt> โดยไม่ใส่ parameter อะไรเลย ตัวแปรภาษาไพทอนจะไปอ่านสัญญาณนาฬิกา ณ เวลาปัจจุบัน หรือแหล่งเลขสุ่มอื่นๆ ของระบบปฏืบัติการมาใช้เป็น random seed ให้
 +
<pre title="interpreter">
 +
>>> random.seed()
 +
>>> random.random()
 +
0.22619089101719203
 +
>>> random.random()
 +
0.33050349201012796
 +
>>> random.seed()
 +
>>> random.random()
 +
0.79150249225025138
 +
>>> random.random()
 +
0.34516180688913967
 +
</pre>
 +
 
 +
คุณสามารถดูรายละเอียดของฟังก์ชันอื่นๆ ในโมดูล random ได้ที่นี่: [http://www.python.org/doc/2.5.2/lib/module-random.html 6.4 random -- Generate pseudo-random numbers]
 +
 
 +
== การเลือก import ทีละฟังก์ชัน ==
 +
บางครั้งเราอาจจะต้องการเรียกใช้ฟังก์ชันและค่าคงที่ต่างๆ ในโมดูลโดยไม่ต้องพิมพ์ชื่อโมดูลก่อน เช่น เราอาจอยากเรียนใช้ฟังก์ชัน <tt>math.sqrt(x)</tt> โดยไม่ต้องพิมพ์ <tt>math.</tt> เป็นต้น เราสามารถสั่งให้ตัวแปรภาษาไพทอน import ฟังก์ชันใดฟังก์ชันหนึ่งมาเพื่อให้เราใช้ได้อย่างสะดวกได้ด้วยคำสั่ง
 +
from <<ชื่อโมดูล>> import <<ชื่อฟังก์ชัน>>
 +
เช่น
 +
<pre title="interpreter">
 +
>>> from math import sqrt
 +
>>> sqrt(2)
 +
1.4142135623730951
 +
>>> sqrt(3)
 +
1.7320508075688772
 +
>>> sqrt(4)
 +
2.0
 +
</pre>
 +
คำสั่ง <tt>from</tt> รองรับคีย์เวิร์ด <tt>as</tt> เช่นกัน
 +
from <<ชื่อโมดูล>> import <<ชื่อฟังก์ชัน>> as <<ชื่อใหม่>>
 +
นอกจากนี้ เรายังสามารถ import ฟังก์ชันและตัวแปรจากโมดูลหนึ่งๆ มาทีละหลายๆ ตัวได้โดยการเขียนรายการของฟังก์ชันที่เราต้องการ import และคั่นฟังก์ชันที่อยู่ติดกันด้วยคอมมา (,)
 +
<pre title="interpreter">
 +
>>> from math import sin, cos, pi
 +
>>> sin(pi/2) + cos(pi/2)
 +
1.0
 +
>>> sin(pi/3)
 +
0.8660254037844386
 +
>>> cos(pi/4)
 +
0.70710678118654757
 +
</pre>
 +
ถ้าต้องการ import ทุกฟังก์ชัน ตัวแปร และค่าคงที่ในโมดูล ให้สั่ง
 +
from <<ชื่อโมดูล>> import *
 +
เช่น
 +
<pre title="interpreter">
 +
>>> from random import *
 +
>>> random()
 +
0.39427634568453784
 +
>>> randint(1,100)
 +
51
 +
>>> seed(42)
 +
>>> random()
 +
0.63942679845788375
 +
</pre>
 +
{{Python Programming/Navigation|Variables and Assignments|User-Defined Functions}}

รุ่นแก้ไขปัจจุบันเมื่อ 09:01, 27 ตุลาคม 2557

ฟังก์ชันพร้อมใช้

ไพทอนมีที่สามารถที่สามารถเรียกใช้ได้เลยอยู่หลายฟังก์ชัน ไวยากรณ์การเรียกฟังก์ชันของภาษาไพธอนเหมือนกับภาษา C และ Java กล่าวคือเขียนชื่อฟังก์ชันแล้วตามด้วยวงเล็บเปิด แล้วใส่ parameter ซึ่งถ้า parameter มีหลายตัวก็ให้คั่น parameter ที่อยู่ติดกันด้วยเครื่องหมายคอมมา (,) แล้วตามด้วยวงเล็บปิด เช่น โค้ดตัวอย่างต่อไปนี้เรียกใช้ฟังก์ชัน abs(x) ซึ่งคืนค่าสัมบูรณ์ของ x ที่ป้อนให้

>>> abs(-10)
10
>>> abs(0)
0
>>> abs(10.5)
10.5

ฟังก์ชัน pow(x,y) ซึ่งคือค่า x ยกกำลัง y ซึ่งสามารถใช้แทน x**y ได้

>>> pow(2, 16)
65536
>>> pow(5, 0.5)
2.2360679774997898
>>> pow(5, -2)
0.040000000000000001
>>> pow(2, pow(2, 2))
16
>>> pow(abs(-3), 1-abs(-1))
1

ฟังก์ชันในไลบรารีภาษาไพทอน

ไลบรารีของภาษาไพทอนยังมีฟังก์ชันอื่นๆ ให้ใช้อีกมากมาย โดยที่ฟังก์ชันเหล่านี้จะถูกแบ่งจัดเก็บอยู่ใน โมดูล (module) หลายๆ โมดูล โดยก่อนที่เราจะสามารถนำฟังก์ชันเหล่านี้มาใช้ได้เราจะต้องทำการ "นำเข้า" โมดูลที่เก็บฟังก์ชันนั้นไว้ คำสั่ง import เป็นคำสั่งที่ใช้ในการนำเข้าโมดูลหรือฟังก์ชันที่อยู่ในโมดูลต่างๆ โดยมันมีไวยากรณ์ดังต่อไปนี้

import <<ชื่อโมดูล>>

ยกตัวอย่างเช่น ถ้าเราต้องการใช้ฟังก์ชันในโมดูลชื่อ math ซึ่งเก็บฟังก์ชันทางคณิตศาสตร์ต่างๆ ไว้มากมาย เราก็จะสั่ง

import math

หลังจากสั่ง import แล้วเราก็สามารถเรียกใชัฟังก์ชันต่างๆ ในโมดูล math ได้โดยอ้างชื่อ math.<<ชื่อฟังก์ชัน>> ยกตัวอย่างเช่น

>>> math.sqrt(2)
1.4142135623730951
>>> math.exp(1)
2.7182818284590451
>>> math.exp(2)
7.3890560989306504
>>> math.log(10)
2.3025850929940459
>>> math.log(8, 2)
3.0

โมดูลที่นำเข้าอาจมีชื่อที่ยาวและไม่สะดวกในการใช้งาน คำสั่ง import รองรับคีย์เวิร์ด as เพื่อนำเข้าโมดูลพร้อมกับตั้งชื่อให้ใหม่ในรูปแบบ

import <<ชื่อโมดูล>> as <<ชื่อใหม่>>

เช่น

import math as m

เป็นการนำเข้าโมดูล math แต่เปลี่ยนชื่อการอ้างถึงผ่านตัวแปร m ซึ่งสามารถเรียกใช้งานค่าคงที่และฟังก์ชันภายในได้ตามปกติ เช่น m.exp() หรือ math.log()

โมดูล math นอกจากจะเก็บฟังก์ชันทางคณิตศาสตร์แล้วยังเก็บค่าคงที่ทางคณิตศาสตร์เช่นค่าพายและค่า e เอาไว้ด้วย

>>> math.pi
3.1415926535897931
>>> math.e
2.7182818284590451
>>> math.sin(math.pi / 2)
1.0

คุณสามารถดูฟังก์ชันและค่าคงที่ทางคณิตศาสตร์ทั้งหมดในโมดูล math ได้ที่นี่: 6.1 math -- Mathematical functions

โมดูล random

โมดูลที่มีประโยชน์มากโมดูลหนึ่งคือโมดูล random ซึ่งมีไว้สำหรับสร้างเลขสุ่ม โดยมีฟังก์ชัน random.random() ไว้สำหรับสร้างเลขทศนิยมสุ่มที่มีค่าตั้งแต่ 0 ถึง 1

>>> random.random()
0.32533822221341258
>>> random.random()
0.49424946832897176
>>> random.random()
0.95364871658603856

สังเกตว่าการเรียกฟังก์ชัน random.random() แต่ละครั้งจะให้ผลลัพธ์ต่างกัน และเมื่อคุณนำโค้ดข้างบนไป run บนเครื่องของตนเองก็จะได้ผลลัพธ์ต่างออกไปจากที่เขียนไว้นี้

ฟังก์ชันที่มีประโยชน์อีกฟังก์ชันหนึ่งคือฟังก์ชัน random.randint(a,b) ซึ่งจะสุ่มเลขจำนวนเต็มออกมาหนึ่งตัวโดยที่เลขจำนวนเต็มนั้นจะีมีค่าตั้งแต่ a ถึง b โดยรวม a และ b ด้วย

>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
9
>>> random.randint(1, 10)
10
>>> random.randint(1, 10)
5

เราสามารถกำหนด seed ของ random number generator ได้ด้วยฟังก์็ชัน random.seed(x) โดยค่า x ที่ให้จะต้องเป็นจำนวนเต็ม

>>> random.random()
0.63942679845788375
>>> random.random()
0.025010755222666936
>>> random.seed(398)
>>> random.random()
0.93033562902743527
>>> random.random()
0.42786425528137961
>>> random.seed(42)
>>> random.random()
0.63942679845788375
>>> random.random()
0.025010755222666936

อนึ่ง ถ้าเราเรียก random.seed() โดยไม่ใส่ parameter อะไรเลย ตัวแปรภาษาไพทอนจะไปอ่านสัญญาณนาฬิกา ณ เวลาปัจจุบัน หรือแหล่งเลขสุ่มอื่นๆ ของระบบปฏืบัติการมาใช้เป็น random seed ให้

>>> random.seed()
>>> random.random()
0.22619089101719203
>>> random.random()
0.33050349201012796
>>> random.seed()
>>> random.random()
0.79150249225025138
>>> random.random()
0.34516180688913967

คุณสามารถดูรายละเอียดของฟังก์ชันอื่นๆ ในโมดูล random ได้ที่นี่: 6.4 random -- Generate pseudo-random numbers

การเลือก import ทีละฟังก์ชัน

บางครั้งเราอาจจะต้องการเรียกใช้ฟังก์ชันและค่าคงที่ต่างๆ ในโมดูลโดยไม่ต้องพิมพ์ชื่อโมดูลก่อน เช่น เราอาจอยากเรียนใช้ฟังก์ชัน math.sqrt(x) โดยไม่ต้องพิมพ์ math. เป็นต้น เราสามารถสั่งให้ตัวแปรภาษาไพทอน import ฟังก์ชันใดฟังก์ชันหนึ่งมาเพื่อให้เราใช้ได้อย่างสะดวกได้ด้วยคำสั่ง

from <<ชื่อโมดูล>> import <<ชื่อฟังก์ชัน>>

เช่น

>>> from math import sqrt
>>> sqrt(2)
1.4142135623730951
>>> sqrt(3)
1.7320508075688772
>>> sqrt(4)
2.0

คำสั่ง from รองรับคีย์เวิร์ด as เช่นกัน

from <<ชื่อโมดูล>> import <<ชื่อฟังก์ชัน>> as <<ชื่อใหม่>>

นอกจากนี้ เรายังสามารถ import ฟังก์ชันและตัวแปรจากโมดูลหนึ่งๆ มาทีละหลายๆ ตัวได้โดยการเขียนรายการของฟังก์ชันที่เราต้องการ import และคั่นฟังก์ชันที่อยู่ติดกันด้วยคอมมา (,)

>>> from math import sin, cos, pi
>>> sin(pi/2) + cos(pi/2)
1.0
>>> sin(pi/3)
0.8660254037844386
>>> cos(pi/4)
0.70710678118654757

ถ้าต้องการ import ทุกฟังก์ชัน ตัวแปร และค่าคงที่ในโมดูล ให้สั่ง

from <<ชื่อโมดูล>> import *

เช่น

>>> from random import *
>>> random()
0.39427634568453784
>>> randint(1,100)
51
>>> seed(42)
>>> random()
0.63942679845788375
หน้าก่อน: Variables and Assignments สารบัญ หน้าต่อไป: User-Defined Functions