python with原理

在python2.5+中可以用with来保证关闭打开的文件

with open(‘hello.txt‘) as f:
    do some file operations

为什么要引入with呢?

在之前如果要保证关闭文件需要这样:

f = open(‘hello.txt‘)
try:
  do some file operations
finally:
  f.close()

为了简化这些操作,pyhton2.5中引入with,在进入with时python会自动调用对象的__enter__ 函数,

离开with时会调用 __exit__ 函数,如下所示。

class SomeThing(object):
    def __enter__(self):
        set things up
        return self
    def __exit__(self, type, value, traceback):
        tear things down

是不是很简单?

比如我们可以实现一个自动释放资源的connection类

class Connection(object):
    def __enter__(self):
    print ‘enter‘
    return self

    def __exit__(self, type, value, traceback):
    print ‘exit‘

    def say_hi(self):
    print ‘hello, world‘

def open_connection():
    return Connection()

with open_connection() as conn:
    conn.say_hi()

程序输出为:

enter
hello, world
exit

python with原理

时间: 2024-08-10 19:15:41

python with原理的相关文章

可对Python运行原理进行可视化分析的工具

Python Tutor Python Tutor是一个对Python运行原理进行可视化分析的工具,网址为: http://www.pythontutor.com 使用范例 参考链接 原文地址:https://www.cnblogs.com/jiangling500/p/8353607.html

Python多线程原理与实现

Date: 2019-06-04 Author: Sun Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了解线程池的使用 1 线程基本概念 1.1 线程是什么? 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1) 地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 (3)

Python逆向(一)—— Python运行原理

一.什么是Python Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. 二.解释型语言和编译型语言的区别 我们编程都是用的高级语言,计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序.翻译的方式有两种,一个是编译,一个是解释. 用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统(不仅仅只是通过编译器,编译器只是编译系统的一部分)把高级语言翻译成机器语言(具体翻译过程可以参看下图),把源

Python盗号原理-代码实现截屏键盘记录远程发送(不要做坏事)

这年头盗号的从出不穷,不是脱裤就是社工钓鱼.今天呢我们就以前面的几篇技术文章做铺垫,来讲一下python盗号的原理(学习用途,请勿用于违法犯罪),知己知彼方能百战不殆嘛. 脱裤我们就不多提了,无非就是过滤不严谨导致的sql注入,或者数据库存储不安全,这个本篇文章暂且不说,当然有感兴趣的,我后面的文章或许也会讲讲. 最简单的,也是技术手段相对较低的盗号方式当属钓鱼了(当然,社工更考验心理),除了钓鱼网站,就是发布某些带有诱惑性的工具,诱导消费者下载,运行后开启后门,或者启用钩子进行键盘记录.本篇文

python运行原理

1.运行过程 python源程序运行时,不是直接交给机器去运行的,而是先交给python虚拟机(通过C语言实现的),然后由python虚拟机解释成机器可识别的指令去运行:   ——所以python是一种解释型语言或动态语言 2..pyc文件的作用 .pyc文件是python源程序在同python虚拟机交互时产生的python虚拟机可识别的字节码文件,然后python虚拟机再将其解释成机器可识别的指令:      ——.pyc文件是python源码转为的python虚拟机可识别的字节码文件 3.为

Python爬虫原理的小demo

案例讲解 import urllib #调用uerllib import webbrowser url = 'http://blog.csdn.net/xlgen157387' content = urllib.urlopen(url).read() open('test.html','w').write(content) #写入到test.html文件中 webbrowser.open_new_tab('test.html') #打开写入的文件 这样的话就可以通过Python代码实现,爬取网页

资深程序员:深入Python进程间通信原理!

输出 3.14159262176 管道pipe 管道是Unix进程间通信最常用的方法之一,它通过在父子进程之间开通读写通道来进行双工交流.我们通过os.read()和os.write()来对文件描述符进行读写操作,使用os.close()关闭描述符. 上图为单进程的管道 上图为父子进程分离后的管道 输出 3.14159262176 无名套接字socketpair 我们知道跨网络通信免不了要通过套接字进行通信,但是本例的多进程是在同一个机器上,用不着跨网络,使用普通套接字进行通信有点浪费. 上图为

python Unitest 原理详解

一.测试模型 下面这部分来自于某书籍资料,拿过来,按需参考一下: 测试模型(1)线性测试1.概念:通过录制或编写对应应用程序的操作步骤产生的线性脚本.单纯的来模拟用户完整的操作场景.(操作,重复操作,数据)都混合在一起.2.优点:每个脚本相对独立,且不产生其他依赖和调用.任何一个测试用例脚本拿出来都可以单独执行.3.缺点:开发成本高,用例之间存在重复的操作.比如重复的用户登录和退出.维护成本高,由于重复的操作,当重复的操作发生改变时,则需要逐一进行脚本的修改.4.线性测试实例:用户登录(2)模块

Python多进程原理与实现

Date: 2019-06-04 Author: Sun 1 进程的基本概念 什么是进程? ? 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要使用的资源:进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志. 2 父进程和子进程 ? Linux 操作系统提供了一个 fork() 函数用来创建子进