Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตัวแปรบริบทหลาม


ตัวแปรบริบทสามารถมีค่าต่างกันได้ขึ้นอยู่กับบริบท ต่างจาก Thread-Local Storage ซึ่งแต่ละเธรดการดำเนินการอาจมีค่าที่แตกต่างกันสำหรับตัวแปร ตัวแปรบริบทอาจมีหลายบริบทในเธรดการดำเนินการเดียว ซึ่งมีประโยชน์ในการติดตามตัวแปรในงานอะซิงโครนัสที่เกิดขึ้นพร้อมกัน

คลาส ContextVar ใช้เพื่อประกาศและทำงานกับ Context Variables

import contextvars
name = contextvars.ContextVar("name", default = 'Hello')

ContextVar.get() พารามิเตอร์เริ่มต้นที่เป็นทางเลือกจะส่งคืนเมื่อไม่พบค่าสำหรับตัวแปรในบริบทปัจจุบัน

ชื่อ: ชื่อของตัวแปร นี่เป็นคุณสมบัติแบบอ่านอย่างเดียว

เมธอดต่อไปนี้ถูกกำหนดในคลาส ContextVar

get() คืนค่าสำหรับตัวแปรบริบทสำหรับบริบทปัจจุบัน หากไม่มีค่าสำหรับตัวแปรในบริบทปัจจุบัน เมธอดจะ −
  • คืนค่าอาร์กิวเมนต์เริ่มต้นของเมธอด หากมีให้ - หรือ

  • คืนค่าดีฟอลต์สำหรับตัวแปรบริบท ถ้ามันถูกสร้างขึ้นด้วยหนึ่ง - หรือ

  • ทำให้เกิด LookupError

set() เรียกตั้งค่าใหม่สำหรับตัวแปรบริบทในบริบทปัจจุบัน
รีเซ็ต() รีเซ็ตตัวแปรบริบทเป็นค่าที่มีอยู่ก่อน ContextVar.set() ที่สร้างโทเค็นจะถูกนำมาใช้

คลาสบริบทในโมดูล Context Vars คือการจับคู่ Context Vars กับค่าของมัน

บริบท(): สร้างบริบทที่ว่างเปล่าโดยไม่มีค่าใดๆ

ในการรับสำเนาของบริบทปัจจุบัน ให้ใช้ฟังก์ชัน copy_context()

เมธอด run(callable, *args, **kwargs) รันโค้ด callable(*args, **kwargs) ในอ็อบเจกต์บริบทที่เรียกใช้เมธอด run และส่งกลับผลลัพธ์ของการดำเนินการ การเปลี่ยนแปลงใดๆ กับตัวแปรบริบทใดๆ ที่เรียกใช้ได้จะอยู่ในอ็อบเจ็กต์บริบท เมธอดนี้ทำให้เกิด RuntimeError เมื่อเรียกใช้บนอ็อบเจ็กต์บริบทเดียวกันจากเธรด OS มากกว่าหนึ่งเธรด หรือเมื่อเรียกซ้ำ

copy() ส่งคืนสำเนาตื้นของวัตถุบริบท
context[var] คืนค่าของตัวแปร var ContextVar หากไม่ได้ตั้งค่าตัวแปรในวัตถุบริบท จะเกิดข้อผิดพลาดของคีย์
get() คืนค่าสำหรับ Context var หากมีค่าใน Context Object มิฉะนั้นจะกลับสู่ค่าเริ่มต้น หากไม่ได้กำหนดค่าเริ่มต้นไว้ ให้คืนค่า None
iter() ส่งคืนตัววนซ้ำเหนือตัวแปรที่จัดเก็บไว้ในวัตถุบริบท
len() ส่งคืนจำนวนตัวแปรที่ตั้งไว้ในอ็อบเจ็กต์บริบท
keys() ส่งคืนรายการตัวแปรทั้งหมดในอ็อบเจกต์บริบท
values() ส่งคืนรายการของค่าตัวแปรทั้งหมดในอ็อบเจกต์บริบท
items() ส่งคืนรายการของทูเพิล 2 ตัวที่มีตัวแปรทั้งหมดและค่าของตัวแปรในออบเจกต์บริบท