2.14. การกำหนดฟังก์ชัน¶
ฟังก์ชัน บรรจุบล็อกของโค้ดไว้ภายใต้ชื่อเพื่อให้สามารถเรียกใช้ได้จากหลายที่ เมื่อใดก็ตามที่การคำนวณ การกระทำ หรืองานที่มีรูปแบบชัดเจนปรากฏขึ้นมากกว่าหนึ่งครั้ง ฟังก์ชันจะเปลี่ยนมันให้เป็นสิ่งที่ตั้งชื่อได้
คีย์เวิร์ดคือ def:
def greet(name):
print("hello,", name)
greet("Alice")
greet("Bob")
ผลลัพธ์:
hello, Alice
hello, Bob
บรรทัดที่ขึ้นต้นด้วย def คือ นิยาม -- มันสร้างฟังก์ชันแต่ไม่รันเนื้อหา การเรียก greet("Alice") คือสิ่งที่รันบล็อกที่เยื้องเข้า
2.14.1. พารามิเตอร์และอาร์กิวเมนต์¶
ชื่อในวงเล็บบนบรรทัด def คือ พารามิเตอร์ -- ตัวแทนสำหรับค่าที่ผู้เรียกจะส่งมา ค่าจริงที่ส่งเข้ามาคือ อาร์กิวเมนต์ ฟังก์ชันสามารถรับพารามิเตอร์ศูนย์ตัวขึ้นไป:
def square(x):
return x * x
def add(a, b):
return a + b
def is_even(n):
return n % 2 == 0
การเรียกด้วยจำนวนอาร์กิวเมนต์ที่ผิดจะยก TypeError ทันที
2.14.2. return¶
คำสั่ง return สิ้นสุดฟังก์ชันทันทีและส่งค่ากลับไปยังผู้เรียก:
def absolute(x):
if x < 0:
return -x
return x
ฟังก์ชันที่ไม่มีคำสั่ง return (หรือมี return เปล่าไม่มีค่า) จะคืน None:
>>> def shout(text):
... print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None
ฟังก์ชันสามารถมีคำสั่ง return หลายตัว; ตัวแรกที่ถูกดำเนินการจะชนะ และส่วนที่เหลือของเนื้อหาจะถูกข้ามไป
2.14.2.1. การคืนค่าหลายค่า¶
Python คืนหนึ่งอ็อบเจกต์ต่อการเรียก แต่อ็อบเจกต์นั้นสามารถเป็น tuple ได้ -- และผู้เรียกสามารถแกะมันได้ทันที:
def minmax(values):
return (min(values), max(values))
lo, hi = minmax([3, 1, 4, 1, 5, 9])
วงเล็บรอบค่าที่คืนเป็นตัวเลือก; return a, b และ return (a, b) มีความหมายเหมือนกัน
2.14.3. Docstrings¶
string literal ที่วางเป็นคำสั่งแรกของเนื้อหาฟังก์ชันคือ docstring มันถูกเก็บไว้บนอ็อบเจกต์ฟังก์ชันและเป็นสิ่งที่ help() แสดง:
def scale(value, factor):
"""Multiply ``value`` by ``factor`` and return the result."""
return value * factor
IDE แสดง docstrings ใน tooltip เมื่อเคอร์เซอร์วางอยู่เหนือชื่อฟังก์ชัน ดังนั้นแม้แต่สรุปบรรทัดเดียวก็คุ้มค่า สตริงที่ใช้เครื่องหมาย triple-quote ช่วยให้ docstring ยาวหลายบรรทัดเมื่อต้องการรายละเอียดเพิ่มเติม
2.14.4. ธรรมเนียมการตั้งชื่อ¶
ชื่อฟังก์ชันใช้ snake_case -- คำตัวพิมพ์เล็กคั่นด้วยขีดล่าง ชื่อควรอธิบายสิ่งที่ฟังก์ชันทำ:
ดี:
read_temperature,parse_header,is_validหลีกเลี่ยง:
do_stuff,handle1,temp_func
ขีดล่างนำหน้า (_helper) ทำเครื่องหมายฟังก์ชันว่าเป็น internal ของโมดูล ธรรมเนียมนี้ได้รับการเคารพอย่างกว้างขวางแต่ Python ไม่บังคับใช้