ความแตกต่างในการทำงานกับฟังก์ชันภายในใน Python
ใน Python ไม่เพียงแต่จะมีฟังก์ชันที่ซ้อนกันได้เท่านั้น แต่ฟังก์ชันหนึ่งยังสามารถคืนค่าอีกฟังก์ชันหนึ่งได้อีกด้วย ตัวอย่างเช่น ให้ฟังก์ชัน outer คืนค่าโค้ดต้นฉบับของฟังก์ชัน inner เป็นผลลัพธ์:
def outer():
def inner():
return '+++'
return inner
ลองบันทึกการเรียกใช้ outer ลงในตัวแปร res:
res = outer()
print(res)
หลังจากรันโค้ด จะแสดงวัตถุที่เก็บฟังก์ชัน:
<function outer.<locals>.inner at 0x000001564A212B90>
แต่หากเรียกใช้ตัวแปร res ด้วยวงเล็บ จะได้ข้อความ '+++' คืนกลับมา:
print(res()) # แสดงผล '+++'
สามารถเขียนโค้ดใหม่ได้ โดยให้ res บันทึกค่าจากการเรียก outer ด้วยวงเล็บสองชุด - ชุดแรกสำหรับเรียกตัวเอง และชุดที่สองสำหรับเรียกฟังก์ชัน inner นั่นหมายความว่า เราสามารถเพิ่มวงเล็บทางขวาของฟังก์ชันชั้นนอกได้ตามจำนวนฟังก์ชันที่ซ้อนอยู่ภายใน:
res = outer()()
print(res) # แสดงผล '+++'
มีโค้ดต่อไปนี้:
def outer():
def inner(num):
return num + 2
return inner
res = outer()(3)
print(res)
จงบอกว่าอะไรจะถูกแสดงผลในคอนโซล
มีโค้ดต่อไปนี้:
def outer():
def inner(txt):
return 'hello, ' + txt
return inner
res = outer()
print(res)
จงบอกว่าอะไรจะถูกแสดงผลในคอนโซล