เอาล่ะ มาเล่นเกมกันหน่อย
คุณเดาได้ไหมว่าผลลัพธ์ของโปรแกรมนี้จะเป็นอย่างไร?
ผมมีหนึ่งเท่ากับหนึ่งตรงนี้
จากนั้นเราสร้างฟังก์ชันที่เรียกว่าความสับสน โดยที่เรามี a เท่ากับห้า แล้วส่งกลับ a
คำถามของฉันคือเมื่อเราพิมพ์ A และเมื่อเราพิมพ์ความสับสน คุณคาดว่าจะเกิดอะไรขึ้นที่นี่
ใช้เวลาสักครู่เพื่อหาการหยุดชั่วคราวหากต้องการ
และลองหากัน
หนึ่งและห้า
นั่นคือสิ่งที่คุณคาดหวัง?
ไปกันเถอะ.
ทีละบรรทัด
อันดับแรกเรากำหนดค่าหนึ่งให้กับตัวแปร A จากนั้นเราสร้างฟังก์ชันที่เรียกว่าความสับสนและตัวแปลไพ ธ อนจะพูดว่า
เอาล่ะ สับสน ฟังก์ชัน
ฉันรู้ว่ามันคืออะไร
ฉันจะเก็บมันไว้ในความทรงจำ
เมื่อคุณต้องการใช้ฉัน เพียงแจ้งให้เราทราบ
แล้วมันจะไปที่บรรทัดที่แปด และบรรทัดที่แปดจะพูดว่า เฮ้ พิมพ์ a สิ่งที่เป็นบ่อน้ำ ครั้งเดียวที่ฉันได้เห็น
a คือตรงนี้ a เท่ากับหนึ่ง
เข้าไปในหน่วยความจำ สมมุติว่า A เท่ากับหนึ่ง
แต่แล้วเมื่อเกิดความสับสนเช่นนี้
ฉันจะบอกว่า เฮ้ a จะเท่ากับห้า และตอนนี้เราคืนค่า A ซึ่งเท่ากับห้า
OC จะเกิดอะไรขึ้นถ้าฉันเปลี่ยนลำดับของสิ่งนี้
ถ้าผมไปแบบนี้ล่ะ?
จะเกิดอะไรขึ้นหากฉันคลิกเรียกใช้
นั่นคือสิ่งที่คุณคาดหวัง?
อีกครั้งที่เรามีหนึ่งเท่ากับ
จากนั้นเรากำหนดฟังก์ชัน และจากนั้นเราพิมพ์ความสับสน
ทีนี้ความสับสนตรงนี้จะกำหนด a เท่ากับห้า แล้วส่งกลับ a
แต่ทำไมสิ่งนี้ไม่เปลี่ยนแปลง?
ทำไม a ยังคงเท่ากับหนึ่งเมื่อเรามาที่นี่?
และนี่เป็นเพราะขอบเขตใช่ไหม
สิ่งที่ล่าม Python ทำคือเมื่อมันรันฟังก์ชันความสับสน มันจะบอกว่า เฮ้
a จะเท่ากับห้า
แต่ฉันกำลังสร้างตัวแปรที่เรียกว่า A ในจักรวาลของฉันเอง
ฉันไม่รู้อะไรเกี่ยวกับตัวเท่ากับที่นี่
ฉันมีจักรวาลของตัวเอง
และหลังจากที่เราเรียกใช้ฟังก์ชันนี้ เราก็ทำเสร็จแล้ว
เราได้คืนฟังก์ชันและมันหายไปอย่างสมบูรณ์
แต่เราไม่เคยทิ้งจักรวาลให้อยู่ในขอบเขตสากล
ดังนั้นจึงมีกฎชุดหนึ่งที่ล่าม Python ดำเนินการเพื่อตรวจสอบตัวแปร
และกฎก็คือสิ่งนี้
ขั้นแรกจะตรวจสอบกับท้องถิ่น
เริ่มต้นด้วยท้องถิ่น
และสิ่งที่เราเรียกว่าเป็นขอบเขตท้องถิ่น
ขอบเขตภายในคือขอบเขตที่เป็นส่วนหนึ่งของฟังก์ชันภายในเครื่องนี้
ดังนั้น a เป็นขอบเขตท้องถิ่น
จะไปตรวจที่นั่น
เฮ้ ฉันรู้ตัวแปรไหม
ใช่เมื่อฉันกลับมา
A ฉันมีตัวแปรที่กำหนดไว้ที่นี่ ดังนั้นมันจึงเริ่มต้นที่นั่น
แต่สมมุติว่า A ไม่มี สมมติว่าฉันลบ a แล้วคลิกเรียกใช้ที่นี่
ฉันได้รับทั้งคู่ครั้งเดียวเพราะกฎข้อที่สองคือถ้าไม่มีตัวแปรในเครื่องหรือขอบเขตในเครื่อง
แล้วข้อที่สอง มีขอบเขตท้องถิ่นพาเรนต์หรือไม่
ในกรณีของเรา parent ของฟังก์ชันนี้คืออะไร?
มันคือขอบเขตสากล
แต่เรายังสามารถทำหน้าที่อื่นได้
สมมติว่า parent และ parent เป็น parent ของฟังก์ชันความสับสน
และในนี้ สมมุติว่า A เท่ากับสิบ
ตอนนี้อยู่ในนี้
เราจะกลับมา
เกิดความสับสนเพื่อให้เราใช้งานได้อีกครั้งและเรียกใช้ได้จริง
เลยเรียกผู้ปกครอง
และคลิกเรียกใช้
เอาล่ะ ผ่านเรื่องนี้กันเถอะ
จึงไม่สับสนจนเกินไป
เรามีฟังก์ชันหลักที่ได้รับการเรียก
เมื่อเราเรียกสิ่งนั้น เรากำหนด a เท่ากับสิบ
จากนั้นเราก็สร้างความสับสนของฟังก์ชันใหม่ด้วย
และสุดท้ายเราก็กลับมาสร้างความสับสนและเรียกใช้มันจริงๆ
เราจะคืนค่า a แล้วพิมพ์ว่าค่าของ A คืออะไร เท่ากับสิบ
และทำไมถึงเป็นอย่างนั้น?
เพราะเราเริ่มด้วยขอบเขตท้องถิ่นก่อน
เฮ้ ความสับสนรู้หรือไม่ว่า a คืออะไร?
ไม่.
ฉันไม่มีอยู่ในขอบเขตท้องถิ่นของฉัน
OC โรงเรียนในท้องถิ่นของผู้ปกครองของฉันมีหรือไม่
มันจะขึ้นระดับแล้วพูดว่า เฮ้ ฟังก์ชัน parent รู้หรือไม่ว่า a คืออะไร?
ใช่ ผมมีเท่ากับสิบ มันจะพิมพ์ออกมา
กฎที่สามหรือลำดับที่สามเป็นสากล
และโลกคือสิ่งที่เราเรียกว่าการเยื้องของความว่างเปล่า
มันเป็นไฟล์นี้ใช่ไหม
ไม่ว่าจะมีไฟล์อะไรก็ตาม สิ่งนั้นก็คือโกลบอล
ในกรณีของเรา ถ้าไม่มี A เท่ากับสิบ ที่นี่ ก็ไม่มีโลคัล โลคัลพาเรนต์ก็ไม่มี
และฉันคลิกเรียกใช้
มันตรวจสอบขอบเขตทั่วโลก
และสุดท้าย มีกฎอีกข้อหนึ่ง และนี่คือกฎข้อที่สี่ และมันเป็นกฎที่ยุ่งยาก
และนี่คือสิ่งที่เราเรียกว่าสร้างขึ้นใน Python
หรือสร้างขึ้นในฟังก์ชันหลาม
ดังนั้น Python จึงมาพร้อมกับฟังก์ชันที่กำหนดไว้ล่วงหน้า เช่น?
ผลรวมที่เราได้พูดถึงก่อนหน้านี้
สมมุติว่าให้แค่ห้า
จะสอบหรือเอาจริงอย่าให้มันเลย
มาทำที่นี่กัน
เมื่อฉันเรียกใช้สิ่งนี้
ฉันได้รับการสร้างขึ้นในฟังก์ชั่นบางอย่าง
ตอนนี้.
พวกเขารู้ได้อย่างไรว่านี่คืออะไร?
ตัวแปรนี้ในตอนท้ายของวันคืออะไร?
เพราะมันบอกว่า เฮ้ ฉันมีบางอย่างในจักรวาลนี้ไหม?
ไม่.
ฉันไม่.
ฉันมีบางอย่างในขอบเขตผู้ปกครองของฉันหรือไม่?
ไม่ฉันไม่
ฉันมีบางส่วนในทั่วโลก?
ไม่.
ไม่มีอะไรรวมอยู่ที่นี่
และสิ่งสุดท้ายที่จะตรวจสอบคือ เฮ้ มีฟังก์ชัน Python ในตัวบางประเภทไหม
ใช่.
จริง ๆ แล้ว Python นั้นให้อะไรกับเราบ้าง เพื่อให้คุณใช้งานได้อย่างไม่ผิดเพี้ยน
และนี่คือกฎขอบเขตที่ล่าม Python ปฏิบัติตาม
เยี่ยมมาก
ยังมีอีกหลายสิ่งที่เราต้องเรียนรู้
แล้วพบกันใหม่ในวิดีโอหน้าครับ