วิธีกำหนดฟังก์ชั่นใน Python

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

วิธีที่ 1 - สร้างและเรียกฟังก์ชันพื้นฐาน

ขั้นตอนที่ 1:ประกาศฟังก์ชั่นด้วยdefและลำไส้ใหญ่

def greet():
    print("Hello from a function!")

ขั้นตอนที่ 2:เรียกฟังก์ชั่นโดยใช้ชื่อด้วยวงเล็บ

greet()

สิ่งนี้สร้างรูปแบบที่น้อยที่สุด: นิยามก่อนโทรมาหลังจาก Python ดำเนินการจากบนลงล่างดังนั้นต้องมีการกำหนดฟังก์ชั่นก่อนที่จะเรียก

วิธีที่ 2 - เพิ่มพารามิเตอร์และค่าเริ่มต้น

ขั้นตอนที่ 1:เพิ่มพารามิเตอร์ภายในวงเล็บเพื่อรับอินพุต

def full_name(first, last):
    print(first + " " + last)

ขั้นตอนที่ 2:เรียกฟังก์ชั่นที่มีอาร์กิวเมนต์ที่ตรงกัน

อ่านด้วย:

full_name("Ada", "Lovelace")

ขั้นตอนที่ 3:กำหนดค่าเริ่มต้นด้วย=เพื่อสร้างอาร์กิวเมนต์เป็นทางเลือก

def hello(name="World"):
    print(f"Hello, {name}!")

hello()          # uses default
hello("Python")  # overrides default

ค่าเริ่มต้นทำให้ผู้โทรง่ายขึ้นและทำให้ API ของคุณมีเสถียรภาพเมื่อเพิ่มพฤติกรรมเสริม ดูอาร์กิวเมนต์เริ่มต้นในบทช่วยสอนอย่างเป็นทางการ

วิธีที่ 3 - ค่าส่งคืน

ขั้นตอนที่ 1:ใช้returnเพื่อส่งค่ากลับไปยังผู้โทร

def area(w, h):
    return w * h

ขั้นตอนที่ 2:จับค่าที่ส่งคืนในตัวแปร

a = area(3, 4)
print(a)

ขั้นตอนที่ 3:คืนค่าหลายค่า (พวกเขาบรรจุไว้ใน tuple)

def point():
    return 10, 20

x, y = point()

รายละเอียดของคำสั่งคืนจะครอบคลุมในการอ้างอิงภาษา

วิธีที่ 4 - ยอมรับจำนวนอาร์กิวเมนต์ตัวแปร

ขั้นตอนที่ 1:รวบรวมข้อโต้แย้งตำแหน่งพิเศษด้วย*args-

def total(*args):
    return sum(args)

print(total(1, 2, 3))

ขั้นตอนที่ 2:รวบรวมอาร์กิวเมนต์คำหลักด้วย**kwargs-

def report(**kwargs):
    for k, v in kwargs.items():
        print(k, "=", v)

report(name="Keyboard", price=19.99)

อินเทอร์เฟซนี้ช่วยให้ฟังก์ชั่นของคุณยืดหยุ่นกับอินพุตที่หลากหลาย ดู“ รายการอาร์กิวเมนต์โดยพลการ” ในบทช่วยสอนอย่างเป็นทางการ

วิธีที่ 5 - ควบคุมวิธีที่ผู้โทรผ่านอาร์กิวเมนต์

ขั้นตอนที่ 1:สร้างพารามิเตอร์บางอย่างโดยเฉพาะโดยการเพิ่ม/หลังจากพวกเขา

def echo(x, /):
    print(x)

echo(3)      # OK
# echo(x=3)  # TypeError

ขั้นตอนที่ 2:ทำพารามิเตอร์คำหลักอย่างเดียวโดยการเพิ่ม*ก่อนหน้าพวกเขา

def scale(value, *, factor=2):
    return value * factor

scale(10, factor=3)  # OK
# scale(10, 3)       # TypeError

ใช้สิ่งเหล่านี้เพื่อออกแบบ API ที่ชัดเจนและปลอดภัย ดู“ พารามิเตอร์พิเศษ” ในบทช่วยสอนอย่างเป็นทางการ

วิธีที่ 6 - จัดทำเอกสารและจัดระเบียบฟังก์ชั่นของคุณ

ขั้นตอนที่ 1:เพิ่มเอกสารในบรรทัดแรกของร่างกายเพื่ออธิบายวัตถุประสงค์พารามิเตอร์และค่าส่งคืน

def hypotenuse(a, b):
    """Compute the length of the hypotenuse from legs a and b."""
    return (a**2 + b**2) ** 0.5

ขั้นตอนที่ 2:ป้องกันการโทรสคริปต์เท่านั้นด้วยif __name__ == "__main__"ดังนั้นการนำเข้าไม่ได้ดำเนินการ

def main():
    print(hypotenuse(3, 4))

if __name__ == "__main__":
    main()

อนุสัญญาเอกสารถูกกำหนดไว้ใน PEP 257 และ__main__รูปแบบถูกครอบคลุมในเอกสารเกี่ยวกับการดำเนินการโมดูลเป็นสคริปต์

วิธีที่ 7 - ใช้แลมบ์ดาสำหรับหนึ่ง - ลินเนอร์ง่ายๆ

ขั้นตอนที่ 1:สร้างฟังก์ชั่นที่ไม่ระบุชื่อเล็ก ๆ ด้วยlambdaสำหรับกรณีการแสดงออกอย่างรวดเร็ว

double = lambda x: x * 2
print(double(5))

ขั้นตอนที่ 2:ชอบมากกว่าdefเมื่อคุณต้องการคำสั่งเอกสารหรือนำมาใช้ซ้ำ

def double_def(x):
    return x * 2

Lambda ไวยากรณ์ถูกระบุในการอ้างอิงภาษา

วิธีที่ 8 - คำจำกัดความของสถานที่ที่พวกเขาจะถูกดำเนินการก่อนการใช้งาน

ขั้นตอนที่ 1:กำหนดฟังก์ชั่นก่อนการโทรครั้งแรกในไฟล์เพื่อหลีกเลี่ยงข้อผิดพลาดชื่อ

# Correct: defined before use
def hello():
    print("Hello")

hello()

ขั้นตอนที่ 2:หลีกเลี่ยงการเรียกใช้ฟังก์ชันก่อนที่คำจำกัดความจะถูกดำเนินการ Python แก้ไขชื่อที่รันไทม์ด้านบนลงล่าง

# This will raise NameError at runtime:
# hello()
# def hello():
#     print("Hello")

ขั้นตอนที่ 3:เลือกฟังก์ชั่นผู้ช่วยภายในฟังก์ชั่นอื่นเพื่อรักษาขอบเขตในท้องถิ่น

def outer():
    def inner():
        return "scoped helper"
    return inner()

เคล็ดลับด่วน

  • “ พารามิเตอร์” เป็นชื่อในส่วนหัวฟังก์ชัน “ อาร์กิวเมนต์” เป็นค่าที่คุณผ่านการโทร
  • ใช้passในฐานะที่เป็นตัวยึดตำแหน่งเมื่อมีการทำงานของร่างกาย
  • ให้ฟังก์ชั่นเล็กและมุ่งเน้น; สิ่งนี้ทำให้การทดสอบง่ายขึ้นและนำกลับมาใช้ใหม่

กับdefพารามิเตอร์ที่รอบคอบและการส่งคืนที่ชัดเจนคุณจะเขียนฟังก์ชั่นที่ง่ายต่อการโทรทดสอบและขยาย เริ่มง่ายแล้วเพิ่มค่าเริ่มต้น*args-**kwargsและกฎการโต้แย้งตามที่ API ของคุณต้องการเพิ่มขึ้น

Related Posts