کلمه کلیدی with


#1

سلام دوستان روزتون به خیر.

خیلی دقیق نتونستم کلمه کلیدی with رو درک کنم اکر امکانش هست توضیح بدید ممنون میشم.

این یک نمونه مثال
>>> with open(’/tmp/workfile’, ‘r’) as f:
… read_data = f.read()

یک توضیحات انگلیسی هم داخلش پیدا کردم. که اینو نوشته بود . راجب enter و exit توضیح داده . ولی من متوجه نمیشم

with

with statement is used to wrap the execution of a block of code within methods defined by the context manager.

Context manager is a class that implements __enter__ and __exit__ methods. Use of with statement ensures that the __exit__ method is called at the end of the nested block. This concept is similar to the use of try…finally block. Here, is an example.

with open('example.txt', 'w') as my_file:
    my_file.write('Hello world!')

This example writes the text Hello world! to the file example.txt . File objects have __enter__ and __exit__ method defined within them, so they act as their own context manager.

First the __enter__ method is called, then the code within with statement is executed and finally the __exit__ method is called. __exit__ method is called even if there is an error. It basically closes the file stream.


#2

وقتی از with استفاده می کنیم فایلی که باز کردیم لازم نیست فایل را ببندیم هر وقتی از بدنه کد with open خارج بشیم به طور خودکار فایل close می شود

with open('test.txt','r') as f:
	print(f.closed)	
	print(f.read())	

print(f.closed)

دو دستور print اولیه داخل بدنه هستش و فایل باز می باشد
دستور print سوم , خارج از بدنه می باشد . بدون دستور close فایل بسته شده است


#3

در ادامه‌ی توضیحات @behnamgnu خدمتتون عزض کنم:
پایتون کلا سینتکسش شبیه حرف زدن آدمه. داریم میگیم:

با درنظر گرفتن فایل test.txt به عنوان f:
اینکارها رو روش انجام بده

کلمه‌ی with یعنی همین.
حالا روش کارکردش به این شکله که یه scope ایجاد میکنه که کامپیوتر بفهمه چه زمانی دیگه به اون فایل نیازی نداریم و از حافظه بندازتش بیرون (به طور اتوماتیک)