วิธีสร้าง functions ใน Python: def, docstring, arguments, และ lambda พร้อมตัวอย่าง

ในบทความนี้ เราจะมาดูวิธีสร้าง function ใน Python กัน โดยบทความนี้แบ่งเป็น 4 ส่วน:

  1. def syntax: การใช้ def เพื่อสร้าง function
  2. Docstring: การเขียนวิธีใช้งาน function
  3. Arguments: การกำหนด arguments ใน function
  4. lambda: การสร้าง function แบบไม่ระบุชื่อ

ถ้าพร้อมแล้ว ไปเริ่มกันเลย


  1. 💻 def Syntax
  2. 📃 Docstring
    1. 🤔 Why Docstring?
    2. 🥸 What Is Docstring?
    3. 😎 Reading Docstring
  3. 💬 Arguments
    1. 🫡 Default Arguments
    2. 😶‍🌫️ Arbitrary Arguments
  4. 🛋️ lambda
  5. 😺 GitHub
  6. 📃 References

💻 def Syntax

ใน Python เราสามารถสร้าง function ได้ด้วย def ซึ่งประกอบด้วย 4 ส่วน:

# Name and arguments
def name(arguments):
    
    # Body
    Do something
    
    # Return
    return result
  1. name = ชื่อ function
  2. arguments = input สำหรับ function
  3. Body = การทำงานของ function
  4. Return = ส่งผลลัพธ์กลับออกมาจาก function *

(Note: * เราสามารถใช้ print() แทน return ได้ ในกรณีที่เราต้องการแสดงผลลัพธ์ใน console)

ยกตัวอย่างเช่น สร้าง function สำหรับคำนวณ BMI (body mass index) ซึ่งต้องการ 2 arguments คือ น้ำหนัก (weight) และส่วนสูง (height):

# Create a function that calculates BMI
def calculate_bmi(weight, height):

    # Calculate BMI
    bmi = weight / (height ** 2)

    # Round to 2 decimals
    bmi_rounded = round(bmi, 2)

    # Return BMI
    return bmi_rounded

เราสามารถเรียกใช้ function ที่สร้างเสร็จแล้ว ด้วยการเรียกใช้ชื่อ function เช่น:

# Use the BMI calculator function
my_bmi = calculate_bmi(weight=80, height=1.8)

# Print the result
print(my_bmi)

ผลลัพธ์:

24.69

📃 Docstring

.

🤔 Why Docstring?

ในตัวอย่าง bmi_cal() เราจะเห็นว่า weight และ height มีได้หลายค่า ขึ้นอยู่กับหน่วยวัดที่ใช้ เช่น:

  • height: metre = 1.8; feet = 5.9
  • weight: kg = 80; pound = 176

ถ้าเราใส่ค่าไม่ถูกต้องลงใน function เราจะได้ผลลัพธ์ที่ผิดกลับมา เช่น ใส่ height เป็น cm:

# Using incorrect input
wrong_bmi = calculate_bmi(weight=80, height=180)

# Print the result
print(wrong_bmi)

ผลลัพธ์:

0.0

.

🥸 What Is Docstring?

เราสามารถแก้ปัญหานี้ได้ 2 วิธี:

  1. ตั้งชื่อ arguments ให้เรารู้ว่า ต้องใส่อะไรใน function (เช่น height_in_m, weight_in_kg)
  2. ใส่ docstring หรือ string ที่เก็บวิธีใช้ function ไว้

เราสามารถเพิ่ม docstring ใน function ได้แบบนี้:

# Adding docstring to the function
def calculate_bmi(height, weight):

    # Docstring
    """
    Calculate BMI using weight and height:
    - Weight: kg
    - Height: m

    Return BMI rounded to 2 decimals.
    """

    # Calculate BMI
    bmi = weight / (height ** 2)

    # Round to 2 decimals
    bmi_rounded = round(bmi, 2)

    # Return BMI
    return bmi_rounded

Pro tip: เราควรใส่ docstring ไว้ใน function โดยเฉพาะใน code ที่ใช้งานร่วมกับคนอื่น เพื่อให้คนอื่นเข้าใจการทำงาน function ของเรา

.

😎 Reading Docstring

เราสามารถอ่าน docstring ได้ 2 วิธี:

วิธีที่ 1. ใช้ help():

# Read docstring with help()
help(calculate_bmi)

ผลลัพธ์:

Help on function calculate_bmi in module __main__:

calculate_bmi(height, weight)
    Calculate BMI using weight and height:
    - Weight: kg
    - Height: m

    Return BMI rounded to 2 decimals.

วิธีที่ 2. ใช้ .__doc__:

# Read docstring with .__doc__:
print(calculate_bmi.__doc__)

ผลลัพธ์:

Calculate BMI using weight and height:
    - Weight: kg
    - Height: m

    Return BMI rounded to 2 decimals.

💬 Arguments

เรามาดูการกำหนด 2 ประเภท arguments ใน functions กัน:

  1. Default arguments
  2. Arbitrary arguments

.

🫡 Default Arguments

Default arguments เป็นค่าที่ function จะเรียกใช้ถ้าเราไม่กำหนด arguments เอง

ยกตัวอย่างเช่น สร้าง function สำหรับคิดเลขยกกำลัง ซึ่งจะยกกำลัง 2 โดย default:

# Create a function with default arguments
def calculate_power(number, power=2):

    # Calculate number to the power of power
    result = number ** power

    # Return result
    return result

# Call the function without power
print(calculate_power(10))

ผลลัพธ์:

100

แต่ถ้าเรากำหนด power เอง:

# Call the function with power
print(calculate_power(10, 3))

ผลลัพธ์จะเปลี่ยนไป:

1000

.

😶‍🌫️ Arbitrary Arguments

Arbitrary arguments เป็นประเภท argument ที่เรากำหนดในกรณีที่เราไม่รู้ว่า จะมีกี่ arguments

เราสามารถสร้าง function ที่รับ arguments แบบไม่ระบุจำนวนได้ 2 วิธี:

  1. *args: มี positional arguments (arguments ที่ใส่ตามลำดับ) แบบไม่ระบุจำนวน
  2. **kargs: มี keyword arguments (arguments ที่ใส่ตาม keywords) แบบไม่ระบุจำนวน

ยกตัวอย่าง *args เช่น สร้าง function สำหรับคำนวณราคาสินค้าในตระกร้า ซึ่งเราไม่รู้ว่า จะมีสินค้ากี่ชิ้น:

# Create a function calculate total price
def calculate_total_price(*prices):

    # Calculate sum
    total = sum(prices)

    # Return total
    return total

# Examples
total_basket_01 = calculate_total_price(500, 1000)
total_basket_02 = calculate_total_price(100, 200, 300)

print(f"Basket 1: {total_basket_01}")
print(f"Basket 2: {total_basket_02}")

ผลลัพธ์:

Basket 1: 1500
Basket 2: 600

ยกตัวอย่าง **kargs เช่น สร้าง function เก็บข้อมูล user ซึ่งแต่ละ user มีข้อมูลไม่เท่ากัน:

# Create a function to return user's data
def user_profile(**user_data):
    return user_data

# Examples
print(f"User 1: {user_profile(name='John')}")
print(f"User 2: {user_profile(name='Jane', gender='F', age=20)}")

ผลลัพธ์:

User 1: {'name': 'John'}
User 2: {'name': 'Jane', 'gender': 'F', 'age': 20}

Note:

  • Arguments ใน *args จะถูกเก็บรวมในรูปของ tuple
  • Arguments ใน **kargs จะถูกเก็บรวมในรูปของ dictionary

🛋️ lambda

lambda เป็นการสร้าง function แบบไม่ระบุชื่อ โดยเราเขียนได้ดังนี้:

lambda arguments: expression

lambda มักใช้สร้าง function ขนาดเล็ก เช่น function หาผลรวม:

# Create a function using lambda
addition = lambda a, b: a + b

# Call addition
print(addition(1, 1))

ผลลัพธ์:

2

จะเห็นได้ว่า lambda ในตัวอย่างมีค่าเท่ากับการใช้ def แบบนี้:

# Same as lambda
def addition(a, b):
    return a + b

เมื่อเทียบกับ def จะเห็นว่า lambda มีการเขียนที่สั้นและง่ายกว่า

เรามักใช้ lambda ในกรณีที่ต้องการสร้าง function อย่างง่ายและรวดเร็ว

และเรามักใช้ def ในกรณีที่:

  • สร้าง function ที่มีความซับซ้อน (มีการทำงานหลายขั้นตอน)
  • สร้าง function สำหรับใช้งานร่วมกับคนอื่น เพราะ def จะทำให้คนอื่นอ่าน code ได้ง่ายกว่า

😺 GitHub

ดูตัวอย่าง code ทั้งหมดได้ที่ GitHub


📃 References

Comments

One response to “วิธีสร้าง functions ใน Python: def, docstring, arguments, และ lambda พร้อมตัวอย่าง”

Leave a reply to Python for AI: รวบรวม 8 บทความการทำงานกับ AI ด้วย Python – Shi no Shigoto Cancel reply