Table of Contents
Summary
Home Backend Development Python Tutorial Demystifying the with keyword in Python

Demystifying the with keyword in Python

Apr 14, 2023 am 11:31 AM
python code with

Demystifying the with keyword in Python

Many of us have seen this code snippet over and over again in Python code:

with open('Hi.text', 'w') as f:
f.write("Hello, there")
Copy after login

However, some of us don’t know what with and why we need to use it here. In this read, you'll find out about almost any problem that can be solved with. let's start!

First, let’s think about what we need to do without using the with keyword. In this case we need to open the file first and try to write. Regardless of success or failure, we'd better close it at the end, so our code will look like this:

f = open('Hi.text', 'w')
try:
f.write('Hello, there')
finally:
f.close()
Copy after login

So, what is the use of the with keyword? It just helps shorten our try..finally code to a single with... statement! This is how the with statement is used.

So, what exactly is it? In fact, the with statement itself is nothing special in Python, it is just a feature of the context manager in Python. A context manager, quoted from the official Python documentation, is a way to allow you to allocate and free resources exactly when needed, or simply put: shorten your code snippet when you do something on some resource, which means Then you can define the usage of the with statement yourself!

How do we do this? Well, it's simple, you just need to implement two magic functions: one called __enter__ and the other called __exit__. The first way is to write a class that implements these two functions as shown below:

class My_file:
def __init__(self, fname):
self.fname = fname
def __enter__(self):
self.file = open(self.fname, 'w')
return self.file
def __exit__(self, exc_type, exc_val, exc_trace_back):
if self.file:
self.file.close()
Copy after login

Here, we have created a normal Python class that implements the two magic functions. Note the signatures of these two functions: __enter__ will only accept self , while __exit__ will accept more arguments, the three in the example are the standard form. In this way, we can use it directly:

with My_file('hello.txt') as f:
f.write('hello, world!')
Copy after login

The with statement here will first call __init__ to construct a new object, and then call the __enter__ method; finally, it will trigger the __exit__ method before the code block is completed. So, the rough equivalent of the above code is as follows:

myfile = My_file('hello.txt')
f = myfile.__enter__()
f.write('hello, world!')
myfile.__exit(...)
Copy after login

The second way to implement a context manager is through a decorator, as follows:

  1. You import contextmanager from contextlib
  2. You write a function to implement the with statement you want.
  3. Add a decorator @contextmanager above the function.
  4. Use your with your_function!

According to the above introduction, let us write a decorator context manager!

from contextlib import contextmanager
@contextmanager
def my_file_open(fname):
try:
f = open(fname, 'w')
yield f
finally:
print('Closing file')
f.close()
with file_open('hi.txt') as f:
f.write('hello world')
Copy after login

The above pretty much covers all the basics of with statements and context managers, but if you want to learn more, keep going...!

There are some handy tools in contextlib for you to use. The first one is closing . closing basically wraps your block of code with another function that you implement before exiting.

@contextmanager
def closing(f):
try:
f.write("Finish writing")
finally:
f.close()
with closing(open("hi.text")):
f.write("hello world")
Copy after login

For example, in the above code, we can directly call close(your_way_of_getting_resource), and before the code block you write below is about to complete (f.write("hello world")), it will execute try ..finally block we defined above.

The other is to use the suppress tool. We know that in many cases, if we try to get some resources, it is likely that errors such as FileNotFoundException will occur when opening the file. In some cases we want to catch errors or suppress them so that the program can continue to run normally. suppress is one way we can suppress warnings. All you need to do is figure out which exception you want to suppress and write with suppress(your_choice_of_exception) and Python will handle it from there.

In other cases, you may only want to perform certain actions when entering a with block. In this case, nullcontext will be convenient for you. nullcontext will just return what you defined in the __enter__ function and won't do anything else. If you are dealing with async operations in Python to access resources, aclosure is a utility for handling this situation.

Summary

This article introduces some basic concepts and usage of the with statement and its underlying working principle. There's lots more interesting stuff, check out Python's contextlib documentation. Finally, I wish you the same happy learning and happy coding as always!

The above is the detailed content of Demystifying the with keyword in Python. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP and Python: Different Paradigms Explained PHP and Python: Different Paradigms Explained Apr 18, 2025 am 12:26 AM

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

Choosing Between PHP and Python: A Guide Choosing Between PHP and Python: A Guide Apr 18, 2025 am 12:24 AM

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

Python vs. JavaScript: The Learning Curve and Ease of Use Python vs. JavaScript: The Learning Curve and Ease of Use Apr 16, 2025 am 12:12 AM

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.

Can vs code run in Windows 8 Can vs code run in Windows 8 Apr 15, 2025 pm 07:24 PM

VS Code can run on Windows 8, but the experience may not be great. First make sure the system has been updated to the latest patch, then download the VS Code installation package that matches the system architecture and install it as prompted. After installation, be aware that some extensions may be incompatible with Windows 8 and need to look for alternative extensions or use newer Windows systems in a virtual machine. Install the necessary extensions to check whether they work properly. Although VS Code is feasible on Windows 8, it is recommended to upgrade to a newer Windows system for a better development experience and security.

Can visual studio code be used in python Can visual studio code be used in python Apr 15, 2025 pm 08:18 PM

VS Code can be used to write Python and provides many features that make it an ideal tool for developing Python applications. It allows users to: install Python extensions to get functions such as code completion, syntax highlighting, and debugging. Use the debugger to track code step by step, find and fix errors. Integrate Git for version control. Use code formatting tools to maintain code consistency. Use the Linting tool to spot potential problems ahead of time.

PHP and Python: A Deep Dive into Their History PHP and Python: A Deep Dive into Their History Apr 18, 2025 am 12:25 AM

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

How to run programs in terminal vscode How to run programs in terminal vscode Apr 15, 2025 pm 06:42 PM

In VS Code, you can run the program in the terminal through the following steps: Prepare the code and open the integrated terminal to ensure that the code directory is consistent with the terminal working directory. Select the run command according to the programming language (such as Python's python your_file_name.py) to check whether it runs successfully and resolve errors. Use the debugger to improve debugging efficiency.

Is the vscode extension malicious? Is the vscode extension malicious? Apr 15, 2025 pm 07:57 PM

VS Code extensions pose malicious risks, such as hiding malicious code, exploiting vulnerabilities, and masturbating as legitimate extensions. Methods to identify malicious extensions include: checking publishers, reading comments, checking code, and installing with caution. Security measures also include: security awareness, good habits, regular updates and antivirus software.

See all articles