Introduce:

  • 鸭子类型和多态

  • 抽象基类(abc模块)

  • isinstance 和 type 的区别

  • 类变量与实例变量

  • 类属性和实例属性以及查找顺序

  • 静态方法、类方法、对象方法以及参数

  • 数据封装和私有属性

  • python对象的自省机制

  • super真的是调用父类吗

  • mixin继承案例(django、rest、framework)

  • Python中的with语句

  • contextlib简化上下文管理器

一、鸭子类型和多态

鸭子类型

当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来像鸭子,那么这只鸟可以被称为鸭子

这样理解:

  • 在Python中,有些时候我们需要一个有某个功能(比如说:鸭子叫)的对象,那我们可以通过判断这个对象是不是一只鸭子来检测是否满足我们的需求
  • 但仔细想想这有些缺陷,因为我们真正需要的是鸭子叫这个方法,一个对象无论是不是鸭子,只要他会像鸭子一样叫就可以了。

多态

定义时的类型和运行时的类型不一样,此时就成为多态 ,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。

  • Python的多态,就是弱化类型,重点在于对象参数是否有指定的属性和方法,如果有就认定合适,而不关心对象的类型是否正确。
  • Python “鸭子类型”

关于Python面向对象三兄弟(三大特性):封装、多态、继承

分享几篇大佬的文章:

面向对象编程(Python版详解)_辰兮要努力-CSDN博客_python面向对象编程

面向对象编程(继承)—Python版(案例详解)_辰兮要努力-CSDN博客

面向对象编程(封装、多态)Python版(Demo详解)_辰兮要努力-CSDN博客

示例代码:

class Cat:def say(self):print('I am a cat.')class Dog:def say(self):print('I am a dog.')class Duck:def say(self):print('I am a duck.')# Python中较灵活,只要实现say方法就行,实现了多态
animal = Cat
animal().say()# 实现多态只要定义了相同方法即可
animal_list = [Cat, Dog, Duck]
for an in animal_list:an().say()"""
class Animal:def say(self):print('I am a animal.')# 需要继承Animal,并重写say方法
class Cat(Animal):def say(self):print('I am a cat.')# Java 中定义需要指定类型
Animal an = new Cat()
an.say()
"""li1 = ['i1', 'i2']
li2 = ['i3', 'i4']tu = ('i5', 'i6')
s1 = set()
s1.add('i7')
s1.add('i8')# 转变观念,传入的不单单是list,甚至自己实现 iterable 对象
li1.extend(li2)  # iterable
li1.extend(tu)
li1.extend(s1)
print(li1)

运行结果:

I am a cat.
I am a cat.
I am a dog.
I am a duck.
['i1', 'i2', 'i3', 'i4', 'i5', 'i6', 'i7', 'i8']进程已结束,退出代码为 0
  • 实现多态只要定义了相同方法即可
  • 魔法函数充分利用了鸭子类型的特性,只要把函数塞进类型中即可

二、抽象基类(abc模块)

1、概念

Python 的抽象基类:

是指必须让继承它的子类去实现它所要求的抽象方法的类

或者这样说:

抽象基类它提供了接口,但是又没有去把接口实现,需要由子类完成。

感觉它就是老板,只告诉你要完成项目A, 你接到项目A后(继承),你自己去把它完成。

抽象基类特点:

  • 抽象基类无法实例化
  • 变量没有类型限制,可以指向任何类型
  • 抽象基类和魔法函数构成了python的基础,即协议

在抽象基类定义了抽象方法,继承了抽象基类的类,必须实现这些方法

2、应用场景

一般有两个应用场景:

场景一:想判断某个对象的类型

# 检查某个类是否有某种方法
class Company:def __init__(self, name):self.name = namedef __len__(self):return len(self.name)company = Company('Linda Process Ltd.')
print(hasattr(company, '__len__'))# 我们在某些情况之下希望判定某个对象的类型
from collections.abc import Sized
print(isinstance(company, Sized))

运行结果:

True
True进程已结束,退出代码为 0

补充:

hasattr () 函数:
用来判断某个类实例对象是否包含指定名称的属性或方法。. 该函数的语法格式如下:. hasattr (obj, name) 其中 obj 指的是某个类的实例对象,name 表示指定的属性名或方法名。
isinstance () 函数:
用来判断一个对象是否是一个已知的类型,类似 type ()type () 不会认为子类是一种父类类型,不考虑继承关系。
isinstance () 会认为子类是一种父类类型,考虑继承关系。

场景二:强制子类必须实现某些方法

比如开头说的,老板让我们去实现某些接口,怎么强制这些接口必须完成呢?

可以使用抽象基类,因为它必须让继承它的子类去实现它所要求的方法

为了方便理解,我们用两种方式实现抽象基类:

(1)我们先自己去定义抽象基类

# 我们需要强制某个子类必须实现某些方法
# 比如我们实现了一个web框架,这个框架集成cache(redis, cache, memorychache)
# 需要设计一个抽象基类, 指定子类必须实现某些方法
# 如何去模拟一个抽象基类class CacheBase():def get(self, key):raise NotImplementedErrordef set(self, key, value):raise NotImplementedErrorclass RedisCache(CacheBase):passredis_cache = RedisCache()
redis_cache.set("key", "value")

运行结果:

继承类必须实现抽象类的方法

所以激发报错(raise NotImplementedError)

NotImplementedError进程已结束,退出代码为 1

(2)用 abc 模块

# 我们需要强制某个子类必须实现某些方法
# 比如我们实现了一个web框架,这个框架集成cache(redis, cache, memorychache)
# 需要设计一个抽象基类, 指定子类必须实现某些方法
# 如何去模拟一个抽象基类import abcclass CacheBase(metaclass=abc.ABCMeta):  # metaclass会在元类编程中讲@abc.abstractmethoddef get(self, key):pass@abc.abstractmethoddef set(self, key, value):passclass MemoryCache(CacheBase):passredis_cache = MemoryCache()
redis_cache.set("key", "value")

运行结果:

报错,继承类必须实现抽象类的方法

TypeError: Can't instantiate abstract class MemoryCache with abstract methods get, set进程已结束,退出代码为 1

注意:

实际上,抽象基类并不常用

抽象基类容易设计过度,多继承推荐使用Mixin

分享几篇大佬的文章:

Python官方:abc — 抽象基类 — Python 3.10.2 文档

python抽象基类 - 知乎 (zhihu.com)

三、 isinstance 和 type 的区别

  • isinstance 会去查找继承链
  • type 只判断变量的内存地址
class A:passclass B(A):passb = B()
print(isinstance(b, B))  # True
print(isinstance(b, A))  # True# is 判断 id 的意思
print(type(b) is B)  # True
print(type(b) is A)  # False

运行结果:

True
True
True
False进程已结束,退出代码为 0

四、类变量与实例变量

  • 类变量定义与使用
  • 实例变量定义与使用
  • 类变量是所有实例变量共享

示例一:

class A:aa = 1  # 类变量def __init__(self, x, y):self.x = xself.y = ya = A(2, 3)
print(a.x, a.y, a.aa)  # 2 3 1A.aa = 11
a.aa = 100
print(a.x, a.y, a.aa)  # 2 3 100
print(A.aa)  # 11b = A(3, 5)
print(b.aa)  # 11

运行结果:

2 3 1
2 3 100
11
11进程已结束,退出代码为 0

示例二:

class A:name = "A"def __init__(self):self.name = "obj"a = A()
print(a.name)

运行结果:

obj进程已结束,退出代码为 0

五、类属性和实例属性以及查找顺序

1、类属性和实例属性

类属性和实例属性

  • 类属性:定义在类中的变量和方法
  • 实例属性:__init__中定义

在上一章的案例中,我们可以很容易的搞明白类变量和实例变量之间的关系

但当涉及到属性,特别是多继承的情况,就会变得复杂

2、MRO算法

MRO

:(Method Resolution Order)方法解析顺序。

概念补充:

经典类 vs 新式类

关于”类“

Python 2.x中默认都是经典类,只有显式继承了object才是新式类

(具体好像Python2.2之前都是经典类)

Python 3.x中默认都是新式类,不必显式的继承object

那么关于类属性和实例属性的到底采用怎样的查找顺序???

1、类为经典类时,多继承情况下,会按照深度优先查找

2、类为新式类时,多继承情况下,会按照广度优先查找

但是,注意:

无论DFS还是BFS在面对多继承都存在缺陷

以往Python采用过DFS、BFS,但

自从Python2.3后到现在使用 MRO C3 算法(C3 算法)

我们通过一些案例简单了解一下这些搜索算法:

  • DFS
  • BFS
  • MRO C3

(1)深度优先 DFS

示例一:

请添加图片描述

  • 查找顺序为 A -> B -> D -> C -> E
  • 此种场景深度优先较为合适

示例二:

请添加图片描述

  • 查找顺序为 A -> B -> D -> C

  • 此种场景 当C中重载了D中某个方法,该查找顺序就不合适

(2)广度优先 BFS

示例一:

请添加图片描述

  • 查找顺序为 A -> B -> C -> D -> E

  • 此种场景 B继承D,B和D是一体的,D应该先于C

示例二:

请添加图片描述

  • 查找顺序为 A -> B -> C -> D

  • 此种场景深度优先较为合适

(3)MRO C3 算法

C3算法比较复杂

这里提供俩示例

示例一:菱形继承

请添加图片描述

示例代码:

class D:passclass C(D):passclass B(D):passclass A(B,C):passif __name__ == '__main__':print(A.__mro__)

运行结果:

(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <class 'object'>)
  • A ==> B ==> C ==> D

示例二:B、C 各自继承D、E场景

请添加图片描述

示例代码:

class D:passclass E:passclass C(E):passclass B(D):passclass A(B, C):passprint(A.__mro__)

运行结果:

(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.E'>, <class 'object'>)

六、静态方法、类方法、对象方法以及参数

  • 静态方法 @staticmethod
  • 类方法 @classmethod
  • 实例方法

python中实现静态方法和类方法都是依赖于python的修饰器来实现的。

先看一段代码,这仨方法的具体定义在后文

示例代码:

class Date:def __init__(self, year, month, day):self.year = yearself.month = monthself.day = day# 实例方法def tomorrow(self):self.day += 1# 静态方法@staticmethoddef date_from_str(date_str):year, month, day = tuple(date_str.split('-'))return Date(int(year), int(month), int(day))# 类方法@classmethoddef date_from_string(cls, date_str):year, month, day = tuple(date_str.split('-'))return cls(int(year), int(month), int(day))def __str__(self):return '{year}/{month}/{day}'.format(year=self.year, month=self.month, day=self.day)if __name__ == '__main__':new_day = Date(2020, 2, 20)new_day.tomorrow()print(new_day)date_str = '2022-2-5'print(Date.date_from_str(date_str))print(Date.date_from_string(date_str))

运行结果:

2020/2/21
2022/2/5
2022/2/5进程已结束,退出代码为 0

实例方法

定义:无装饰器。
第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);

调用:只能由实例对象调用。

类方法

定义:使用装饰器@classmethod。
第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);

调用:类和实例对象都可以调用。

静态方法

定义:使用装饰器@staticmethod。
参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;

调用:类和实例对象都可以调用。

总结:

参数可以调用的方法可以调用的属性
实例方法无装饰器。
第一个参数必须是实例对象,该参数名一般约定为“self”
实例方法、类方法、静态方法类属性,实例属性
类方法使用装饰器@classmethod。
第一个参数必须是当前类对象,该参数名一般约定为“cls
类方法、静态方法类属性
静态方法使用装饰器@staticmethod。
参数随意,没有“self”和“cls”参数。
实例方法、类方法、静态方法(通过类名调用)类属性(通过类名调用)

七、数据封装和私有属性

私有属性和私有方法

设置私有属性和方法:

  • 在属性名和方法名前面加两个下划线__
  • 定义为私有属性和私有方法,不能被子类继承

私有属性是无法通过实例.私有属性来获取,也无法通过子类来获取

示例代码:

class Person(object):# 构造函数def __init__(self, name):self.name = nameself.__age = 18temp = Person("Coder")
print(temp.name)  # 可获取
print(temp.__age)  # 不可获取,报错:AttributeError

运行结果:

    print(temp.__age)
AttributeError: 'Person' object has no attribute '__age'
Coder进程已结束,退出代码为 1

注意:

但实际上,Python 中,并没有 真正意义私有

私有属性还是可以通过多种方法获取:

(1)

  • 在给 属性方法 私有化命名时,实际是对 名称 做了一些特殊处理,使得外界无法访问到
  • 处理方式:在 名称 前面加上 _类名 => _类名__名称,如上面的示例:print(obj._Person__age)

(2)

示例代码:

class User:def __init__(self):self.__age = 18def get_age(self):return self.__ageif __name__ == '__main__':user = User()print(user.get_age())# print(user.__age)# _class__attr, 做了变形print(user._User__age)

运行结果:

18
18进程已结束,退出代码为 0
  • python并不能严格限制私有属性的使用,这是一种写代码规范

八、python对象的自省机制

重点:

  • 自省机制概念
  • dir()

自省机制

通过一定的机制查询对象的内部结构

Python中比较常见的自省(introspection)机制(函数用法)有:

  • dir()
  • type()
  • hasattr()
  • isinstance()

通过这些函数,我们能够在程序运行时得知对象的类型,判断对象是否存在某个属性,访问对象的属性。

综述:

  • type(),判断对象类型
  • dir(), 带参数时获得该对象的所有属性和方法;不带参数时,返回当前范围内的变量、方法和定义的类型列表
  • isinstance(),判断对象是否是已知类型
  • hasattr(),判断对象是否包含对应属性
  • getattr(),获取对象属性
  • setattr(), 设置对象属性

作者:Treehl
链接:https://www.jianshu.com/p/5166427002a8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

(1)dir()

  • dict
  • dir()

dir() 函数可能是 Python 自省机制中最著名的部分了。它返回传递给它的任何对象的属性名称经过排序的列表。如果不指定对象,则 dir() 返回当前作用域中的名称。

不带参数:

>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

带参数:

dir('ABC')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

示例代码:

class User:name = 'user'class Student(User):def __init__(self):self.school_name = 'school'if __name__ == '__main__':stu = Student()# 通过__dict__ 查询属性, C语言实现,经过优化,较快print(stu.__dict__)stu.__dict__['age'] = 18print(stu.age)print(User.__dict__)print(dir(stu))

运行结果:

{'school_name': 'school'}
18
{'__module__': '__main__', 'name': 'user', '__dict__': <attribute '__dict__' of 'User' objects>, '__weakref__': <attribute '__weakref__' of 'User' objects>, '__doc__': None}
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name', 'school_name']进程已结束,退出代码为 0

(2)type()

type() 函数有助于我们确定对象是字符串还是整数,或是其它类型的对象。

(返回对应的class类型)

In [27]: type(123)
Out[27]: intIn [28]: type('123')
Out[28]: strIn [29]: type(None)
Out[29]: NoneType

(3)hasattr()

对象拥有属性,并且 dir() 函数会返回这些属性的列表。但是,有时我们只想测试一个或多个属性是否存在。如果对象具有我们正在考虑的属性,那么通常希望只检索该属性。这个任务可以由 hasattr() 和 getattr() 函数来完成.

注意:getattr、hasattr、setattr获取对象的状态

In [1]: class Myobject(object):...:     def __init__(self):...:         self.x = 9...:     def power(self):...:         return self.x * self.x...:In [2]: obj = Myobject()In [3]: obj.power()
Out[3]: 81In [4]: hasattr(obj, 'x') # 有属性x么?
Out[4]: TrueIn [5]: hasattr(obj, 'y') # 有属性y么?
Out[5]: FalseIn [6]: setattr(obj, 'y') # 设置属性必须有三个参数,少了值
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-3b0a0f22117d> in <module>()
----> 1 setattr(obj, 'y')TypeError: setattr expected 3 arguments, got 2In [7]: setattr(obj, 'y', 100) # 设置属性y的值为100In [8]: hasattr(obj, 'y') # 有属性y么?
Out[8]: TrueIn [9]: getattr(obj, 'y') # 获取属性y!
Out[9]: 100In [10]: obj.y # 获取属性y
Out[10]: 100In [11]: obj.x # 获取属性x
Out[11]: 9

(4)isinstance()

可以使用 isinstance() 函数测试对象,以确定它是否是某个特定类型或定制类的实例

示例:

判断a数据类型是不是list

In [37]: a = [1, 2, 3]In [38]: isinstance(a, list)
Out[38]: True

我们用自省最重要的几个目的就是,让python回答我们:

  1. 对象名称是什么?
  2. 对象能做什么?
  3. 对象是什么类型?
  4. 对象的一些基础信息是什么?

九、super真的是调用父类吗

1、super的作用

当存在继承关系的时候,有时候需要在子类中调用父类的方法,此时最简单的方法是把对象调用转换成类调用,需要注意的是这时self参数需要显式传递,例如:

class FooParent:def bar(self, message):print(message)
class FooChild(FooParent):def bar(self, message):FooParent.bar(self, message)
>>> FooChild().bar("Hello, Python.")
Hello, Python.

这样做有一些缺点,比如说如果修改了父类名称,那么在子类中会涉及多处修改,另外,Python是允许多继承的语言,如上所示的方法在多继承时就需要重复写多次,显得累赘。

为了解决这些问题,Python引入了super()机制

python中的super()和__init__()方法的作用:

  • init()方法用来创建对象的实例变量;
  • super()方法用于调用父类的方法。

示例代码:

class A:def __init__(self):print("A")class B(A):def __init__(self):print("B")super().__init__()

运行结果:

B
A

**super()**常与 多继承 一同出现:

多重继承时,会涉及继承顺序
直接用类名调用父类方法会涉及查找顺序、重复调用等问题。
super()则是返回继承顺序的下一个类,而不是父类。

在类的继承里面super()非常常用, 它解决了子类调用父类方法的一些问题, 父类多次被调用时只执行一次, 优化了执行逻辑

2、既然我们重写 B 的构造函数,为什么还要去调用super?

答:不是所有的子类都有必要去调用super。

假设继承Thread,在初始化函数里面需要赋值name。但真的需要赋值吗?

其实Thread类的初始化函数本身就做了很多判断,所以没必要写冗余代码。

所以把构造函数交给父类Thread去实例化,不用自己再去写不必要的逻辑了。

示例代码:

from threading import Threadclass MyThread(Thread):def __init__(self, name, user):self.user = user# 某种程度上复用父类代码super().__init__(name=name)

3、super到底执行顺序是什么样的?

super()函数不是直接调用父类,而是调用 mro 顺序中下一个类的构造函数

super() 函数的调用顺序不是单纯的调用父类,而是根据 mro() 函数指定的调用顺序进行调用的

那么mro() 获取指定的调用顺序又是怎么实现的呢?

答案是根据 python 内置的 C3 算法实现的

示例代码:

class A:def __init__(self):print("A")class B(A):def __init__(self):print("B")super().__init__()class C(A):def __init__(self):print("C")super().__init__()class D(B, C):def __init__(self):print("D")super().__init__()if __name__ == "__main__":print(D.__mro__)d = D()

运行结果:

(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
D
B
C
A

十、mixin继承案例(django、rest、framework)

Mixin

Mixin编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是有类的继承机制就可以实现,然而这与传统的类继承有所不同。

通常mixin并不作为任何类的基类,也不关心与什么类一起使用,而是在运行时动态的同其他零散的类一起组合使用

建议:

  • 实际编码中,尽量使用单继承,不推荐多继承,避免继承混乱
  • 有多个功能,就写多个类
  • 以后编码,尽量使用mixin模式

mixin多继承案例(如django restframework中的mixins)

  • 1.mixin类功能单一;
  • 2.不和基类关联,可以和任意基类组合,基类可以不和mixin关联就能初始化成功;
  • 3.在mixin中不要使用super函数;
  • 4.尽量以Mixin结尾

示例代码:

'''
python 对于 mixin 命名方式一般以 MixIn, able, ible 为后缀。由于 mixin 是组合,因而是做加法,为已有的类添加新功能,而不像继承一样,下一级会覆盖上一级相同的属性或方法。
但在某些方面仍然表现得与继承一样, 例如类的实例也是每个 mixin 的实例。
mixin 使用不当会导致类的命名空间污 染,所以要尽量避免 mixin 中定义相同方法。
对于相同的方法,有时很难区分 实例到底使用的是哪个方法。
'''
class Mixin1(object):def test(self):print("mixin 1")def which_test(self):self.test()class Mixin2(object):def test(self):print("mixin 2")class MyClass1(Mixin1, Mixin2):pass                        # 按从左到右顺序从 mixin 中获取功能并添加到 MyClassclass Myclass2(Mixin1, Mixin2):def test(self):             # 已有 test 方法,因而不会再添加 Mixin1, Mixin2 的 test 方法print("my class 2")c1 = MyClass1()
c1.test()                       #  "mixin 1"
c2 = MyClass2()
c2.test()                       #  "my class 2"
c2.which_test()                 #  "my class 2"
isinstance(c1, Mixin1)          #  True
issubclass(MyClass1, Mixin2)    #  True

十一、Python中的with语句

内容:

  • with 与 try except finally
  • with与上下文管理器协议

1、with语句的作用

什么是with语句

with 语句是从 Python 2.6 开始引入的一种与异常处理相关的功能。with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

with语句类似

try :except:finally:

那为什么会出现with,本来可以用try except finally来解决的问题,为什么要用with语句呢?

  • python是一门简短精悍的语言,提倡简洁的编码风格,也可以理解为pythonic。
  • with使用了上下文管理器,可以自动获取上下文相关内容,让开发者更专注于业务。

(with语句更简洁。而且更安全。代码量更少。)

with语句是一个新的控制流结构

with 用法:

基本结构(格式)为:

with expression [as variable]:with-block

一个很好的例子是文件处理

你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。如果不用with语句,代码如下:

file = open("foo.txt")
data = file.read()
file.close()

这里有两个问题:

  • 可能忘记关闭文件句柄
  • 文件读取数据发生异常,没有进行任何处理

下面是处添加了异常处理的代码:

file = open("foo.txt")
try:data = file.read()
finally:file.close()

虽然这段代码运行良好,但是太冗长了。

这时候就是with一展身手的时候了。

除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。

下面是with版本的代码:

with open("foo.txt") as file:data = file.read()

2、上下文管理器

它是python中的一种协议,实现了这种协议的类的实例,都是上下文管理器对象。

那么怎么才能实现协议呢?

python中很简单,只需要在类定义的时候,实现两个方法即可。
一个是enter,另一个是exit

示例代码:

class A():def __init__(self, val_a):self.a = val_adef __enter__(self):print("class A‘s __enter__ function.’")def __exit__(self, exc_type, exc_val, exc_tb):print("class A's __exit__ function.")

这样,就创建好了一个实现了上下文管理器协议的对象。你可以应用到任何类中。

Python中还有其他的高级特性也能创建上下文管理器,比如使用装饰器@contextmanager。contextmanager装饰被定义在contextlib模块使用了@contextmanager装饰器修饰的方法都会变成上下文管理器对象。python提供了contextlib模块,省去了写__enter__和__exit__重复工作了。contextlib模块提供了3个对象:contextmanager装饰器、上下文管理器closing和nested函数。

分享一篇大佬的博客:

深入理解Python with语句 – 标点符 (biaodianfu.com)****

十二、contextlib简化上下文管理器

Python 在 contextlib 模块中还提供了一个 contextmanager 的装饰器,更进一步简化了上下文管理器的实现方式。

相当于简化__enter__和__exit__:

@contextlib.contextmanager装饰器将__enter__和__exit__合起来并进行了一系列操作

通过 yield 将函数分割成两部分,yield 之前的语句在 enter 方法中执行,yield 之后的语句在 exit 方法中执行。紧跟在 yield 后面的值是函数的返回值。

from contextlib import contextmanager@contextmanager
def file_manager(name, mode):try:f = open(name, mode)yield ffinally:f.close()with file_manager('test.txt', 'w') as f:f.write('hello world')

这段代码中,函数 file_manager() 是一个生成器,当我们执行 with 语句时,便会打开文件,并返回文件对象 f;当 with 语句执行完后,finally block 中的关闭文件操作便会执行。你可以看到,使用基于生成器的上下文管理器时,我们不再用定义“enter()”和“exit()”方法,但请务必加上装饰器 @contextmanager,这一点新手很容易疏忽。

另一位大佬的解答:

contextlib模块的作用是提供更易用的上下文管理器,它是通过Generator实现的。

contextlib中的contextmanager作为装饰器来提供一种针对函数级别的上下文管理机制。

常用框架如下:

from contextlib import contextmanager
@contextmanagerdef make_context():print 'enter'try:yield "ok"except RuntimeError,err:print 'error',errfinally:print 'exit'>>>with make_context() as value:print value输出为:enterokexit

其中,yield写入try-finally中是为了保证异常安全(能处理异常)as后的变量的值是由yield返回。

yield前面的语句可看作代码块执行前操作,yield之后的操作可以看作在__exit__函数中的操作。

以线程锁为例:

@contextlib.contextmanager
def loudLock():print 'Locking'lock.acquire()yieldprint 'Releasing'lock.release()with loudLock():print 'Lock is locked: %s' % lock.locked()print 'Doing something that needs locking'#Output:
#Locking
#Lock is locked: True
#Doing something that needs locking
#Releasing
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. JVM-GC复习

    1.堆->分区&#xff08;由于使用的算法不同&#xff09; 2.jvm有哪些垃圾回收器&#xff0c;实际中如何选择? 图中展示了7种作用于不同分代的收集器&#xff0c;如果两个收集器之间存在连线&#xff0c;则说明它们可以搭配使用。虚拟机所处的区域则表示它是属于新生代还是…...

    2024/5/5 5:18:33
  2. pyinstaller简单使用

    https://pyinstaller.readthedocs.io/en/stable/ pyinstaller打包py脚本为系统可执行程序格式&#xff0c;windows下支持打包为exe可执行文件。 安装 pip install pyinstaller 工作流程 对脚本进行解析在脚本目录生成 xxx.spec 文件创建一个 build 目录&#xff0c;写入一些…...

    2024/4/13 14:42:38
  3. The view app01.views.account.login didn‘t return an HttpResponse object. It returned None instead.

    解决方案 if form.is_valid():passreturn render(request, xxx.html, locals()) else:return render(request, xxx.html, locals())...

    2024/5/5 5:29:08
  4. 【数据结构与算法】之深入解析“N皇后”的求解思路与算法示例

    一、题目要求 n 皇后问题研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个不同的 n 皇后问题的棋子放置方案&#xff0c;该方案中 ‘Q’ 和 ‘.’…...

    2024/4/19 15:34:38
  5. VTK:图像噪声源用法实战

    VTK:图像噪声源用法实战 程序输出程序完整源代码程序输出 程序完整源代码 #include <vtkImageActor.h> #include <vtkImageCast.h> #...

    2024/4/13 14:42:43
  6. 如何统计自己写了多少Java代码。

    将主方法中的参数修改为自己的工作空间即可递归统计出所有Java代码的行数。 import java.io.BufferedReader; import java.io.File; import java.io.FileReader;/*** 统计指定目录下java文件的行数** author Jaynnay* date 2016-11-25 下午3:59:57*/ public class CountFileRo…...

    2024/4/13 16:40:29
  7. 大型项目中函数太多,调用关系复杂,如何解决?

    背景 最近过年&#xff0c;和朋友在外面算是玩 high 了。快活了一周之后&#xff0c;玩也玩得差不多了&#xff0c;觉得还是得找点正事做做。于是找来了一个微型操作系统 ucore 分析源码。虽然说是小型的 OS &#xff0c;但也有接近一万行代码&#xff0c;而且代码中逻辑和函数…...

    2024/4/19 17:35:38
  8. 2021压力容器设计标准规范设备型式参数制造检验设计手册常用标准(共757份,3.28G,附件中为网盘链接)

    2021压力容器设计标准规范设备型式参数制造检验设计手册常用标准&#xff08;共757份&#xff0c;3.28G&#xff0c;附件中为网盘链接&#xff09;。 下载地址&#xff1a;https://download.csdn.net/download/mengchensubi/79398992 文档列表内容&#xff1a; 下载地址&…...

    2024/4/7 21:13:00
  9. VTK:图像镜垫用法实战

    VTK:图像镜垫用法实战 程序输出程序完整源代码程序输出 程序完整源代码 #include <vtkImageActor.h> #include <vtkImageCanvasSource2D.h> #...

    2024/4/13 14:42:38
  10. 《C语言进阶》 第一部分 深度剖析数据在内存中的存储

    大家好&#xff0c;从这篇文章开始&#xff0c;我们就进入了C语言进阶部分。内容比较丰富&#xff0c;干货多多&#xff0c;希望大家能够有所收获。 文章目录1. 数据类型介绍1.1 类型的基本归类2. 整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍2.3 练习&#xff1a;3…...

    2024/4/18 2:40:54
  11. VTK:图像中位数用法实战

    VTK:图像中位数用法实战 程序输出程序完整源代码程序输出 程序完整源代码 #include <vtkImageActor.h> #include <vtkImageCanvasSource2D.h> #...

    2024/4/18 10:32:37
  12. Java初学者从零基础入门到使用完整项目专栏--之构建Java开发环境(一、Java JDK的下载安装配置)

    作为TIOBE榜上有名的热门编程语言之一&#xff0c;Java往往是众多初学者与诸多高校重点关注的课程&#xff0c;在编程界占据着举足轻重的地位&#xff1b;笔者作为一枚大二的Java学习者&#xff0c;个人认为从最开始就先修习编程语言的语法然后才逐步跟随导师写项目&#xff0c…...

    2024/4/13 14:43:43
  13. Python学习笔记(12)——numpy库的安装与简单运行

    先直达网址安装适合版本的numpy库 numpy下载链接&#xff1a; numpy PyPI CMD>>F:&#xff08;切换安装盘&#xff09;>>切换python库的安装文件夹>>F:\python\Lib\site-packages>>pip install numpy1.21.5(由于我的python是3.7所以不能安装最新版…...

    2024/5/5 8:55:24
  14. VTK:图像掩码用法实战

    VTK:图像掩码用法实战 程序输出程序完整源代码程序输出 程序完整源代码 #include <vtkImageActor.h> #include <vtkImageCanvasSource2D.h> #...

    2024/4/7 21:12:54
  15. 报错 【hiveserver2】hive --service hiveserver2 报错 GC overhead limit exceeded

    项目场景&#xff1a; hive --service hiveserver2 报错, 导致hiveserver2 服务无法使用 问题描述&#xff1a; Exception in thread "HiveServer2-Handler-Pool: Thread-556" java.lang.OutOfMemoryError: GC overhead limit exceeded原因分析&#xff1a; hive…...

    2024/4/13 14:43:43
  16. 122. 买卖股票的最好时机 II

    给定一个数组 prices &#xff0c;其中 prices[i] 表示股票第 i 天的价格。 在每一天&#xff0c;你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它&#xff0c;然后在 同一天 出售。 返回 你能获得的 最大 利润 。 输入: prices [7,1,…...

    2024/4/7 21:12:52
  17. 4.类-对象概念-构造-析构

    4.1.类封装 C语言中一般是由数据和算法组成&#xff0c;数据和算法彼此独立&#xff0c;关联性不强&#xff0c;在C中将相互关联的数据和算法封装起来&#xff0c;形成结构体或者类&#xff0c;无论类还是结构体都是一个抽象的概念&#xff0c;只有定义类的变量时&#xff0c;…...

    2024/4/13 14:43:28
  18. VTK:图像椭圆源用法实战

    VTK:图像椭圆源用法实战 程序输出程序完整源代码程序输出 程序完整源代码 #include <vtkImageActor.h> #include <vtkImageCast.h> #...

    2024/4/19 12:37:11
  19. 2021锅炉技术标准规范汇编安全节能技术监察规程检测与控制技术(共118份,183M)

    2021锅炉技术标准规范汇编安全节能技术监察规程检测与控制技术&#xff08;共118份&#xff0c;183M&#xff09;。 下载地址&#xff1a;https://download.csdn.net/download/mengchensubi/79397733 文档列表内容&#xff1a; 下载地址&#xff1a;https://download.csdn.ne…...

    2024/4/20 7:17:06
  20. VTK:图片不同用法实战

    VTK:图片不同用法实战 程序输出程序完整源代码程序输出 程序完整源代码 #include <vtkImageActor.h> #include <vtkImageCanvasSource2D.h> #...

    2024/4/13 14:43:33

最新文章

  1. 【Linux】`nohup`命令详解:让你的任务在后台持续运行

    我把我唱给你听 把你纯真无邪的笑容给我吧 我们应该有快乐的 幸福的晴朗的时光 我把我唱给你听 用我炙热的感情感动你好吗 岁月是值得怀念的留恋的 害羞的红色脸庞 谁能够代替你呀 趁年轻尽情的爱吧 最最亲爱的人啊 路途遥远我们在一起吧 &#x1f3b5; 叶…...

    2024/5/5 10:52:46
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【开源语音项目OpenVoice](一)——实操演示

    目录 一、前菜 1、Python选择 2、pip源切换 3、ffmpeg配置问题 4、VSCode添加Jupyter扩展 二、配置虚拟环境 1、下载源码 方法一 直接下载源码压缩包 方法二 使用git 1&#xff09;git加入鼠标右键 2&#xff09;git clone源码 2、VSCode出场 1&#xff09;创建pyth…...

    2024/4/30 4:00:30
  4. [C++/Linux] UDP编程

    一. UDP函数 UDP&#xff08;用户数据报协议&#xff0c;User Datagram Protocol&#xff09;是一种无连接的网络协议&#xff0c;用于在互联网上交换数据。它允许应用程序发送数据报给另一端的应用程序&#xff0c;但不保证数据报能成功到达&#xff0c;也就是说&#xff0c;它…...

    2024/5/3 8:59:07
  5. CrossOver玩游戏会损害电脑吗 CrossOver玩游戏会卡吗 Mac玩游戏 crossover24免费激活

    CrossOver是一款可以在macOS上运行Windows应用程序的软件&#xff0c;它利用了Wine技术&#xff0c;无需安装虚拟机或双系统&#xff0c;可以直接在苹果系统下运行Windows游戏。那么&#xff0c;使用CrossOver玩游戏会损害电脑吗&#xff1f;CrossOver玩游戏会卡吗&#xff1f;…...

    2024/5/4 20:57:28
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/4 23:55:17
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/4 18:20:48
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57