หนึ่งในความท้าทายสำหรับฉันที่จะเข้าใจwith asคุณลักษณะใน Python ความต้องการนั้นไม่ชัดเจน เว้นแต่คุณจะเข้าใจข้อจำกัดของภาษา Python อย่างลึกซึ้งยิ่งขึ้น
ตัวอย่างเช่น นักพัฒนา Ruby, Julia, Lua, Go, JavaScript หรือ Swift ไม่จำเป็นต้องเพิ่มคำสั่งนี้ ทำไมถึงเป็นอย่างนั้น?
หัวใจของปัญหาคือคุณลักษณะที่นักพัฒนา Python หลายคนชื่นชอบ: การใช้การเยื้องเพื่อระบุบล็อคโค้ด
ใน JavaScript ฉันสามารถเขียนได้เช่น
openfile('foobar.txt', function(file) {
// called after file has been opened
// file is a handle to the open file
read_data(file)
...
});
openfile("foobar.txt", function(file)
-- called after file has been opened
-- file is a handle to the open file
read_data(file)
...
end)
openfile("foobar.txt", def (file):
# called after file has been opened
# file is a handle to the open file
read_data(file)
...
มันแสดงให้เห็นถึงประโยชน์ของการมีสัญลักษณ์เพื่อส่งสัญญาณการสิ้นสุดของบล็อกของรหัสมากกว่าการเปลี่ยนแปลงในการเยื้อง
ให้เราเข้าไปดูรายละเอียดประโยชน์ของการมีไวยากรณ์ที่เป็นมิตรสำหรับการปิดหลายบรรทัดแบบอินไลน์ ฉันจะอธิบายด้วยตัวอย่างโค้ด Julia แม้ว่า JavaScript, Lua และภาษาอื่น ๆ อีกมากมายจะทำงานได้ดีเช่นกัน
function openfile(callback, filename::String)
file = open(filename)
callback(file)
close(file)
end
openfile(file -> print(readline(file)), "foobar.txt")
openfile("foobar.txt") do file
print(readline(file))
end
ความงามของวิธีการเปิดและปิดไฟล์นี้คือ คุณจะไม่ลืมปิดไฟล์
ตามที่อธิบายไว้มันยากที่จะบรรลุสิ่งเดียวกันใน Python ไวยากรณ์ของมัน จึงwith-asได้คิดค้น ให้ฉันแสดงให้เห็นว่าตัวอย่างก่อนหน้านี้จะถูกนำไปใช้ใน Python อย่างไร
class openfile:
def __init_(self, filename):
self.filename
def __enter__(self):
self.file = open(self.filename)
return file
def __exit__(self, exc_type, exc_val, exc_tb):
close(self.file)
เราสามารถใช้คลาสนี้เพื่อเปิดและอ่านจากไฟล์ในลักษณะนี้:
with openfile("foobar.txt") as file:
print(readline(file))
openfileคลาสจะถูกเรียก และเราเก็บชื่อไฟล์ที่เราต้องการเปิดopenfileคลาสถูกส่งไปยังwith-asโครงสร้าง ซึ่งทำให้__enter__เมธอดของมันถูกเรียก มันควรจะได้รับทรัพยากรที่ต้องการของเรา ตัวจัดการไฟล์ในกรณีนี้asของ อ้างas fileถึงวัตถุที่ส่งคืนจาก__enter__. ชื่อไม่ต้องตรงกัน เราสามารถเขียนas foobarแทนได้with-asบล็อกถูกรันแล้ว Python จะเรียกใช้__exit__เพื่อปล่อยทรัพยากร สิ่งนี้จะถูกเรียกในกรณีที่มีข้อยกเว้นเกิดขึ้นมีรูปแบบมากมายในการสร้าง คลาส ตัวจัดการบริบท เหล่านี้ โดยการจัดคลาสย่อยหรือการใช้มัณฑนากร
เมื่อคุณส่งคำขอไปที่ facebook.com คอมพิวเตอร์ของคุณจะค้นหาชื่อโดเมนเพื่อแปลชื่อโดเมนนั้นเป็นที่อยู่ IP เพื่อให้คอมพิวเตอร์ของคุณสามารถเชื่อมต่อได้
ภาษาของเราเป็นเครื่องมืออันทรงพลังที่สามารถกำหนดความคิด ทัศนคติ และการกระทำของเรา แม้แต่คำที่ดูเหมือนไม่เป็นอันตรายก็สามารถขยายเวลาอคติและแบบแผนที่เป็นอันตรายได้
เมื่อสัปดาห์ที่แล้วฉันสังเกตเห็นข่าวประชาสัมพันธ์ที่เผยแพร่ผ่าน PressGazette (เว็บไซต์ข่าวของสื่ออังกฤษ) บทความประกาศว่า Acast ซึ่งเป็นบริษัทโฮสติ้งและโฆษณาพอดคาสต์ของ Scandi จะเป็นผู้นำกลุ่มผู้เผยแพร่ "อาจมีอิทธิพลมากที่สุด" ในพอดคาสต์
บทนำ:ยินดีต้อนรับ ผู้อ่านผู้กล้าหาญ สู่การเดินทางที่จะพาเราไปสู่ความลึกที่มืดมนที่สุดบนโลกใบนี้ ในบล็อกนี้ เราเจาะลึกโลกอันน่าพิศวงของร่องลึกบาดาลมาเรียนา เปิดเผยความลับที่ซ่อนอยู่ และเปิดเผยความจริงอันน่าสะพรึงกลัวที่อยู่ใต้พื้นผิวของมัน
หากเราต้องการจะเติบโตบนโลกใบนี้ต่อไป เราจะต้องสนทนาที่อันตราย คนที่ท้าทายสิ่งที่เราทำ สิ่งที่เรากำลังทำ และสิ่งที่เรากำลังจะทำต่อไป (หรือกำลังวางแผนที่จะทำ)
ในโลกที่เชื่อมต่อถึงกันทุกวันนี้ ภัยคุกคามจากการโจมตีทางไซเบอร์นั้นแพร่หลายมากขึ้นกว่าเดิม อาชญากรไซเบอร์และผู้มีบทบาทในระดับชาติพยายามใช้ประโยชน์จากช่องโหว่และขโมยข้อมูลที่มีค่าอย่างต่อเนื่อง ซึ่งก่อให้เกิดความเสี่ยงที่สำคัญต่อองค์กรทุกขนาด