วิธีการเรียกใช้ฟังก์ชันใน Python (ตัวอย่าง)

⚡ สรุปอย่างชาญฉลาด

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

  • 🧩 คำสั่ง def: ฟังก์ชันถูกกำหนดโดยใช้คำสั่ง def ตามด้วยชื่อฟังก์ชัน และวงเล็บ ตามด้วยเครื่องหมายโคลอนที่เปิดบล็อกคำสั่งที่เยื้องเข้าไป
  • 📞 การเรียกใช้ฟังก์ชัน: การเขียนชื่อฟังก์ชันตามด้วยวงเล็บจะทำให้โค้ดของฟังก์ชันนั้นทำงาน ดังนั้นจึงสามารถนำตรรกะเดียวกันมาใช้ซ้ำได้หลายครั้ง
  • ⌨️ การเยื้อง: Python ฟังก์ชันจะจัดกลุ่มเนื้อหาโดยใช้การเยื้องที่สม่ำเสมอแทนการใช้เครื่องหมายวงเล็บปีกกา ดังนั้นหากไม่มีช่องว่างจะทำให้เกิดข้อผิดพลาด IndentationError
  • 🎯 ข้อโต้แย้ง: ค่าที่ส่งผ่านภายในวงเล็บจะกลายเป็นพารามิเตอร์ และค่าเริ่มต้นหรืออาร์กิวเมนต์แบบคีย์เวิร์ดจะทำให้การเรียกใช้งานแต่ละครั้งมีความยืดหยุ่น
  • ↩️ ค่าที่ส่งคืน: คำสั่ง `return` จะส่งผลลัพธ์กลับไปยังผู้เรียกใช้ หากไม่มีคำสั่งนี้ ฟังก์ชันจะส่งคืนค่า `None`
  • 🤖 ความช่วยเหลือจากเอไอ: ผู้ช่วย AI เช่น GitHub Copilot สามารถสร้างโครงร่างฟังก์ชัน อาร์กิวเมนต์ และ docstring จากข้อความแจ้งสั้นๆ ได้

วิธีการเรียกใช้ฟังก์ชันใน Python

ฟังก์ชั่นอยู่ในอะไร Python?

A ฟังก์ชั่นใน Python คือส่วนของโค้ดที่ทำงานเมื่อมีการอ้างอิงถึง มันถูกใช้เพื่อนำโค้ดไปใช้ในหลายๆ ที่ในโปรแกรม เรียกอีกอย่างว่า เมธอด หรือ โพรซีเดอร์ Python มีฟังก์ชันในตัวมากมาย เช่น print(), input(), compile() และ exec() แต่ก็ยังเปิดโอกาสให้คุณสร้างฟังก์ชันของคุณเองได้ด้วย

วิธีกำหนดและเรียกใช้ฟังก์ชัน Python

ฟังก์ชั่นใน Python ถูกกำหนดโดยคำสั่ง “def” ตามด้วยชื่อฟังก์ชันและวงเล็บ ( () )

ตัวอย่าง:

เรามาสร้างฟังก์ชันโดยใช้คำสั่ง “def func1():” แล้วเรียกใช้ฟังก์ชันนั้น ผลลัพธ์ของฟังก์ชันจะเป็น “I am learning” Python ฟังก์ชัน”.

กำหนดและเรียกใช้ฟังก์ชันใน Python

การเรียกฟังก์ชัน func1() จะเรียกใช้ def func1(): ของเรา และพิมพ์คำสั่ง “I am learning” Python ฟังก์ชัน None”

มีชุดกฎเกณฑ์อยู่ Python การเขียนโปรแกรม เพื่อกำหนดฟังก์ชัน

  • ควรใส่ข้อโต้แย้งหรือพารามิเตอร์อินพุตใดๆ ไว้ภายในวงเล็บเหล่านี้
  • คำสั่งแรกของฟังก์ชันอาจเป็นคำสั่งเสริมก็ได้ เช่น docstring หรือข้อความอธิบายฟังก์ชัน
  • โค้ดภายในทุกฟังก์ชันจะเริ่มต้นด้วยเครื่องหมายโคลอน (:) และควรมีการเว้นวรรค (เว้นวรรค)
  • คำสั่ง `return` (นิพจน์) ใช้สำหรับออกจากฟังก์ชัน โดยอาจส่งค่ากลับไปยังผู้เรียกก็ได้ คำสั่ง `return` ที่ไม่มีอาร์กิวเมนต์จะเหมือนกับ `return None`

ความสำคัญของการเยื้อง (ช่องว่าง) ใน Python

ก่อนที่เราจะทำความรู้จักกับ... Python สิ่งสำคัญคือเราต้องเข้าใจกฎการเยื้องที่จะประกาศ Python ฟังก์ชัน และกฎเหล่านี้สามารถนำไปใช้กับองค์ประกอบอื่นๆ ได้ด้วย Python รวมถึงการประกาศเงื่อนไข ลูป หรือตัวแปรต่างๆ ด้วย

Python ใช้รูปแบบการเว้นวรรคเฉพาะเพื่อกำหนดโค้ด เนื่องจาก Python ฟังก์ชันไม่มีจุดเริ่มต้นหรือจุดสิ้นสุดที่ชัดเจนเหมือนวงเล็บปีกกาเพื่อระบุจุดเริ่มต้นและจุดสิ้นสุดของฟังก์ชัน ฟังก์ชันต้องอาศัยการเว้นวรรคแทน ในที่นี้เราจะยกตัวอย่างง่ายๆ ด้วยคำสั่ง "print" เมื่อเราเขียนฟังก์ชัน "print" ไว้ด้านล่างบรรทัด def func1(): มันจะแสดงข้อผิดพลาด "indentation error: expected an indented block"

กำหนดและเรียกใช้ฟังก์ชันใน Python

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

กำหนดและเรียกใช้ฟังก์ชันใน Python

การเว้นวรรคอย่างน้อยหนึ่งช่องก็เพียงพอที่จะทำให้โค้ดของคุณทำงานได้อย่างถูกต้อง แต่เพื่อเป็นแนวทางปฏิบัติที่ดีที่สุด ขอแนะนำให้เว้นวรรคประมาณ 3-4 ช่องเพื่อเรียกใช้ฟังก์ชันของคุณ

นอกจากนี้ จำเป็นอย่างยิ่งที่ขณะประกาศการเยื้อง คุณต้องรักษาการเยื้องนั้นไว้สำหรับส่วนที่เหลือของโค้ดด้วย ตัวอย่างเช่น ในภาพหน้าจอด้านล่าง เมื่อเราเรียกคำสั่งอื่น “ยังคงอยู่ใน func1” และไม่ได้ประกาศไว้ด้านล่างคำสั่ง print แรก มันจะแสดงข้อผิดพลาดเกี่ยวกับการเยื้องว่า “unindent ไม่ตรงกับระดับการเยื้องอื่นใด”

กำหนดและเรียกใช้ฟังก์ชันใน Python

ทีนี้ เมื่อเราใช้การเยื้องแบบเดียวกันสำหรับทั้งสองคำสั่งและจัดให้อยู่ในบรรทัดเดียวกัน ก็จะได้ผลลัพธ์ที่คาดหวังไว้

กำหนดและเรียกใช้ฟังก์ชันใน Python

ฟังก์ชั่นคืนค่าอย่างไร?

คำสั่ง return ใน Python ระบุค่าที่จะส่งคืนให้กับผู้เรียกใช้ฟังก์ชัน ลองมาทำความเข้าใจเรื่องนี้ด้วยตัวอย่างต่อไปนี้

ขั้นตอนที่ 1) ฟังก์ชั่นไม่ส่งคืนสิ่งใด ๆ

ในที่นี้เราจะเห็นว่าฟังก์ชันบางตัวไม่ "ส่งค่าคืน" ตัวอย่างเช่น เราต้องการหาค่ากำลังสองของ 4 และเมื่อรันโค้ดแล้วควรจะได้คำตอบ "16" แต่เมื่อใช้โค้ด "print x*x" โดยตรงจะได้คำตอบนั้น อย่างไรก็ตาม เมื่อเรียกใช้ฟังก์ชัน "print square" จะได้ผลลัพธ์เป็น "None" เนื่องจากเมื่อเรียกใช้ฟังก์ชันแล้ว จะไม่มีการเรียกซ้ำเกิดขึ้น และผลลัพธ์จึงหายไปจากฟังก์ชัน Python ส่งคืนค่า “None” หากฟังก์ชันหยุดทำงานและสิ้นสุดการทำงาน

กำหนดและเรียกใช้ฟังก์ชันใน Python

ขั้นตอนที่ 2) แทนที่คำสั่งพิมพ์ด้วยคำสั่งกำหนดค่า

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

กำหนดและเรียกใช้ฟังก์ชันใน Python

เมื่อคุณรันคำสั่ง “print square (4)” มันจะส่งค่าของอ็อบเจ็กต์กลับมา เนื่องจากเราไม่มีฟังก์ชันเฉพาะที่จะรันที่นี่ มันจึงส่งค่า “None” กลับมา

ขั้นตอนที่ 3) ใช้ฟังก์ชัน 'return' และเรียกใช้โค้ด

ต่อไปนี้เราจะมาดูวิธีการดึงผลลัพธ์โดยใช้คำสั่ง “return” เมื่อคุณใช้ฟังก์ชัน “return” และรันโค้ด ผลลัพธ์ที่ได้คือ “16”

กำหนดและเรียกใช้ฟังก์ชันใน Python

ขั้นตอนที่ 4) เรียกใช้คำสั่ง 'print square'

ฟังก์ชั่นใน Python ต่างก็เป็นวัตถุ และวัตถุก็มีคุณค่าอยู่บ้าง เราจะมาดูวิธีการที่นี่ Python คำสั่งนี้ใช้กับวัตถุ เมื่อคุณรันคำสั่ง “print square” มันจะส่งค่าของวัตถุกลับมา เนื่องจากเราไม่ได้ส่งอาร์กิวเมนต์ใดๆ เราจึงไม่มีฟังก์ชันเฉพาะที่จะเรียกใช้ ดังนั้นมันจึงส่งค่าเริ่มต้นกลับมา (0x021B2D30) ซึ่งเป็นตำแหน่งของวัตถุ ในทางปฏิบัติ Python โปรแกรมนี้ คุณอาจไม่จำเป็นต้องทำขั้นตอนนี้เลยก็ได้

กำหนดและเรียกใช้ฟังก์ชันใน Python

อาร์กิวเมนต์ในฟังก์ชัน

อาร์กิวเมนต์คือค่าที่ถูกส่งไปยังฟังก์ชันเมื่อมีการเรียกใช้ฟังก์ชันนั้น

กล่าวอีกนัยหนึ่งคือ ในฝั่งผู้เรียกใช้ มันคืออาร์กิวเมนต์ และในฝั่งฟังก์ชัน มันคือพารามิเตอร์

มาดูกันว่าจะทำอย่างไร Python การโต้แย้งได้ผล

ขั้นตอน 1) อาร์กิวเมนต์จะถูกประกาศไว้ในนิยามของฟังก์ชัน ในขณะเรียกใช้ฟังก์ชัน คุณสามารถส่งค่าสำหรับอาร์กิวเมนต์เหล่านั้นได้ดังที่แสดงด้านล่าง

กำหนดและเรียกใช้ฟังก์ชันใน Python

ขั้นตอน 2) ในการกำหนดค่าเริ่มต้นให้กับอาร์กิวเมนต์ ให้กำหนดค่าให้กับอาร์กิวเมนต์นั้นในนิยามของฟังก์ชัน

กำหนดและเรียกใช้ฟังก์ชันใน Python

ตัวอย่าง: x ไม่มีค่าเริ่มต้น ค่าเริ่มต้นของ y คือ 0 เมื่อเราป้อนอาร์กิวเมนต์เพียงตัวเดียวขณะเรียกใช้ฟังก์ชันการคูณ Python กำหนดค่าที่ให้มาให้กับ x ในขณะที่ยังคงรักษาไว้ping ค่าของ y เท่ากับ 0 ดังนั้น ผลคูณของ x กับ y จึงเท่ากับ 0

กำหนดและเรียกใช้ฟังก์ชันใน Python

ขั้นตอน 3) คราวนี้เราจะเปลี่ยนค่า y เป็น 2 แทนค่าเริ่มต้น y=0 และจะได้ผลลัพธ์เป็น (4×2)=8

กำหนดและเรียกใช้ฟังก์ชันใน Python

ขั้นตอน 4) คุณยังสามารถเปลี่ยนลำดับการส่งผ่านอาร์กิวเมนต์ได้อีกด้วย Pythonในที่นี้เราได้สลับลำดับของค่า x และ y เป็น x=4 และ y=2

กำหนดและเรียกใช้ฟังก์ชันใน Python

ขั้นตอน 5) สามารถส่งอาร์กิวเมนต์หลายตัวในรูปแบบอาร์เรย์ได้เช่นกัน ในตัวอย่างนี้ เราเรียกใช้อาร์กิวเมนต์หลายตัว (1, 2, 3, 4, 5) โดยการเรียกใช้ฟังก์ชัน (*args)

ตัวอย่าง: เรากำหนดอาร์กิวเมนต์หลายตัวเป็นตัวเลข (1,2,3,4,5) เมื่อเราเรียกใช้ฟังก์ชัน (*args) มันจะพิมพ์ผลลัพธ์ออกมาเป็น (1,2,3,4,5)

กำหนดและเรียกใช้ฟังก์ชันใน Python

ทิปส์:

  • In Python 2.7 ไม่รองรับการโอเวอร์โหลดฟังก์ชัน การโอเวอร์โหลดฟังก์ชันคือความสามารถในการสร้างเมธอดหลายเมธอดที่มีชื่อเดียวกันแต่มีการใช้งานที่แตกต่างกัน การโอเวอร์โหลดฟังก์ชันได้รับการสนับสนุนอย่างเต็มที่ในเวอร์ชัน 2.7 Python 3.
  • มีความสับสนค่อนข้างมากระหว่างเมธอดและฟังก์ชัน เมธอดใน Python เกี่ยวข้องกับอินสแตนซ์ของอ็อบเจ็กต์ ในขณะที่ฟังก์ชันไม่เกี่ยวข้อง เมื่อ Python เรียกเมธอด ซึ่งจะผูกพารามิเตอร์แรกของการเรียกนั้นกับการอ้างอิงอ็อบเจ็กต์ที่เหมาะสม กล่าวง่ายๆ ก็คือ ฟังก์ชันแบบสแตนด์อโลนใน Python คือ "ฟังก์ชัน" ในขณะที่ฟังก์ชันที่เป็นคุณลักษณะของคลาสหรืออินสแตนซ์คือ "วิธีการ"

นี่คือสิ่งที่สมบูรณ์ Python 3 รหัส

#define a function
def func1():
   print ("I am learning Python function")
   print ("still in func1")
   
func1()

def square(x):
  	return x*x
print(square(4))

def multiply(x,y=0):
	print("value of x=",x)
	print("value of y=",y)
    
	return x*y
  
print(multiply(y=2,x=4))

นี่คือสิ่งที่สมบูรณ์ Python 2 รหัส

#define a function
def func1():
   print " I am learning Python function"
   print " still in func1"
   
func1()

def square(x):
  	return x*x
print square(4)

def multiply(x,y=0):
	print"value of x=",x
	print"value of y=",y
    
	return x*y
  
print multiply(y=2,x=4)

คำถามที่พบบ่อย

ใช่. ก Python ฟังก์ชันสามารถส่งคืนค่าได้หลายค่าโดยการคั่นด้วยเครื่องหมายจุลภาคหลังคำว่า `return` Python บรรจุข้อมูลเหล่านั้นลงในทูเปิล ซึ่งผู้เรียกสามารถแยกออกเป็นตัวแปรต่างๆ ได้ เช่น a, b = func()

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

ด็อกสตริง (Docstring) คือข้อความตัวอักษรที่วางไว้เป็นคำสั่งแรกภายในฟังก์ชันเพื่ออธิบายการทำงานของฟังก์ชันนั้น โดยจะเขียนอยู่ในเครื่องหมายอัญประกาศสามตัว และสามารถอ่านได้ในระหว่างการทำงานของฟังก์ชันผ่านแอตทริบิวต์ __doc__ หรือฟังก์ชัน help()

แลมบ์ดา (Lambda) คือฟังก์ชันขนาดเล็กที่ไม่ระบุชื่อ ซึ่งเขียนด้วยบรรทัดเดียวโดยใช้คีย์เวิร์ด lambda แทน def เหมาะสำหรับตรรกะสั้นๆ ที่ส่งไปยังฟังก์ชันต่างๆ เช่น map(), filter() และ sorted() ดูตัวอย่างได้ที่นี่ ฟังก์ชันแลมบ์ดา แนะนำ

ใช่ ฟังก์ชันที่เรียกตัวเองเรียกว่าฟังก์ชันเรียกซ้ำ การเรียกซ้ำช่วยแก้ปัญหาที่แบ่งออกเป็นปัญหาย่อยๆ ที่คล้ายกัน เช่น แฟกทอเรียล ฟังก์ชันเรียกซ้ำทุกฟังก์ชันจำเป็นต้องมีกรณีพื้นฐานที่หยุดการเรียก มิฉะนั้นจะเกิดข้อผิดพลาด Python ทำให้เกิดข้อผิดพลาด RecursionError

ตัวแปรโลคอลถูกสร้างขึ้นภายในฟังก์ชันและมีอยู่เฉพาะขณะที่ฟังก์ชันนั้นทำงานอยู่เท่านั้น ส่วนตัวแปรโกลบอลถูกกำหนดขึ้นภายนอกฟังก์ชันทั้งหมดและสามารถมองเห็นได้ทุกที่ หากต้องการเปลี่ยนแปลงค่าของตัวแปรโกลบอลภายในฟังก์ชัน ต้องประกาศตัวแปรนั้นด้วยคีย์เวิร์ด `global` ก่อน

GitHub Copilot จะแนะนำเนื้อหาฟังก์ชันแบบเต็มจากชื่อฟังก์ชันหรือจากคำอธิบายสั้นๆ รวมถึงพารามิเตอร์ คำสั่งคืนค่า และ docstring นอกจากนี้ยังเสนอการจัดการกรณีพิเศษและการทดสอบ ช่วยให้คุณมุ่งเน้นไปที่ตรรกะแทนที่จะเป็นเรื่องการพิมพ์ping บล็อกคำจำกัดความพื้นฐาน

ฟังก์ชันทำหน้าที่จัดระเบียบโค้ด AI และแมชชีนเลิร์นนิงให้เป็นขั้นตอนที่นำกลับมาใช้ซ้ำได้ เช่น การโหลดข้อมูล การประมวลผลล่วงหน้า การฝึกฝน และการประเมินผล ฟังก์ชันช่วยให้การทดลองอ่านง่ายและทดสอบได้ และเฟรมเวิร์กอย่าง TensorFlow และ scikit-learn ก็เปิดเผยพฤติกรรมส่วนใหญ่ผ่านฟังก์ชันที่มีชื่อเหมาะสมที่คุณเรียกใช้

สรุปโพสต์นี้ด้วย: