⊗pyPmFnCl 23 of 129 menu

การปิดล้อมใน Python

การปิดล้อม (closure) หมายถึงฟังก์ชันร่วมกับตัวแปรภายนอกทั้งหมดที่สามารถเข้าถึงได้

ใน Python บ่อยครั้ง เมื่อพูดว่า "การปิดล้อมของฟังก์ชัน" มักไม่ได้หมายถึงตัวฟังก์ชันนั้นเอง แต่หมายถึงตัวแปรภายนอกของมัน

สมมติว่ามีฟังก์ชัน outer ต่อไปนี้ ซึ่งประกาศตัวแปร i และฟังก์ชันภายใน inner ในนั้น จะมีการเพิ่มค่าหนึ่งให้กับ i เพื่อให้ตัวแปร i ทำงานได้อย่างถูกต้อง เราจึงเพิ่มคำสั่ง nonlocal ให้กับมัน:

def outer(): i = 0 def inner(): nonlocal i i += 1 print(i) return inner

ตอนนี้เรามาใส่ฟังก์ชันภายนอกลงในตัวแปร res และเรียกมันด้วยเครื่องหมายวงเล็บ:

res = outer() res() # แสดง 1

ลองเรียก res หลายๆ ครั้ง หลังจากรันโค้ดแล้ว เคาน์เตอร์ i จะเพิ่มขึ้นทีละหนึ่งทุกครั้ง:

res() # แสดง 2 res() # แสดง 3 res() # แสดง 4

อย่างไรก็ตาม มีรายละเอียดสำคัญตรงนี้ - การเรียกฟังก์ชัน outer ทุกครั้งจะเพิ่มเคาน์เตอร์ของตัวเอง ลองเขียนการเรียก outer ครั้งแรกลงในตัวแปร res1 และการเรียกครั้งที่สองลงในตัวแปร res2 จากนั้นแสดงผลในคอนโซลตามลำดับ:

res1 = outer() res1() # แสดง 1 res1() # แสดง 2 res1() # แสดง 3 res2 = outer() res2() # แสดง 1 res2() # แสดง 2 res2() # แสดง 3

โค้ดต่อไปนี้:

def outer(): i = 10 def inner(): nonlocal i i -= 2 print(i) return inner res1 = outer() res1() res1() res2 = outer() res2() res2() res2()

บอกว่าอะไรจะแสดงในคอนโซล

สร้างฟังก์ชันที่ทุกครั้งที่ถูกเรียก จะให้เลขฟีโบนัชชีตัวถัดไป

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

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ