网络编程-Python高级语法-闭包

什么叫闭包?通俗来说就是函数里嵌套函数,从表现形式来看,内部函数引用外部函数的作用域里的变量,那么内部函数就称为闭包

举例说明:

1、闭包=函数块+定义函数时的环境,inner就是函数块,x就是环境

def outer(x):
    def innner(y):
        return x+y
    return innner
a = outer(1)  # 调用outer函数返回内部函数inner返回的的函数变量
print(a(2))  # 通过函数变量传参并运行内部函数,然后返回函数结果运行结果:3

2、闭包不可以直接访问外部函数作用域的变量

def outer1():
    x = 2
    def inner1():
        x *=x
        return  x
    return inner1
print(outer1()())运行之后会报错,因为inner1内部不能直接调用外部函数的变量,但是通过下面修改就可以了

def outer1():  nolocal x  # 通过nolocal关键字来指定x不是闭包的局部变量  x=2  def inner1():    x*=x    return x  return inner1print(outer1()())运行结果:4

3、实际应用场景举例

ori = [0, 0]  # 坐标原点

def create(pos=ori):  # 传入坐标原点
    def play(derict, step):  # 方向和步长
        new_x = pos[0]+derict[0]*step   # 移动后点的新的x轴值
        new_y = pos[1]+derict[1]*step   # 移动后点的新的y轴值
        # 通过容器修改外部函数的局部变量值
        pos[0] = new_x
        pos[1] = new_y
        return pos
    return play
a = create()
print(a([1, 0],10))
print(a([0, 1], 20))

运行结果:[10, 0]         [10, 20]

原文地址:https://www.cnblogs.com/lz-tester/p/9800613.html

时间: 2024-11-01 23:10:32

网络编程-Python高级语法-闭包的相关文章

Unix网络编程(六)高级I/O技术之复用技术 select

I/O复用技术 本文将讨论网络编程中的高级I/O复用技术,将从下面几个方面进行展开: a. 什么是复用技术呢? b. 什么情况下需要使用复用技术呢? c. I/O的复用技术的工作原理是什么? d. select, poll and epoll的实现机制,以及他们之间的区别. 下面我们以一个背景问题来开始: 包括在以前的文章中我们讨论的案例都是阻塞式的I/O包括(fgetc/getc, fgets/gets),即当输入条件未满足时进程会阻塞直到满足之后进行读取,但是这样导致的一个 问题是如果此时进

《网络编程》高级 I/O

本节是套接字的高级 I/O .为套接字设置超时闹钟,使用更加方便的数据传输函数.套接字的 I/O 操作上设置超时有三种方法: 调用 alarm 函数,在它指定超时到期时产生 SIGALRM 信号: 在 select 函数中设置超时阻塞等待 I/O,以替代直接阻塞在 read 或write 调用上: 使用 SO_RCVTIMEO 和 SO_SNDTIMEO 套接字选项(这两个选项只是一部分实现支持): 下面使用 alarm 产生的 SIGALRM 信号为 connect 函数设置超时,当然系统会为

《网络编程》高级 UDP 套接字编程

概述 UDP 是一个无连接.不可靠的数据报协议,任何可靠传输都需由应用程序提供,例如:超时重传.序列号应答机制,但是它在某些场合使用效率高,方便.它支持广播和多播.有关<基本 UDP 套接字编程>参照该文,这里只是在那个基础上,记录一些在 UDP 编程中容易出现的问题. 辅助数据 辅助数据(也称为控制信息)可通过调用 recvmsg 和 sendmsg 函数使用,这里两个函数的定义可参考文章<高级 I/O>,使用 msghdr 结构体中的 msg_control 和 msg_con

Python网络编程之高级篇三

在高级篇二中,我们讲解了5中常用的IO模型,理解这些常用的IO模型,对于编写服务器程序有很大的帮助,可以提高我们的并发速度!因为在网络中通信主要的部分就是IO操作.在这一篇当中我们会重点讲解在第二篇当中提到的IO复用模型,即select机制.其实select机制有一些缺陷,后来产生了一种更加高效的机制epoll,稍后会讲解! 一.select机制 1. 原理:select可以理解成一个监听器,可以监听多个文件描述符.当某个文件描述符的状态发生改变了(可读/可写),操作系统就会发送消息给应用程序,

Python网络编程之高级篇二

在上一篇中,我们深入探讨了TCP/IP协议的11种状态,理解这些状态对我们编写服务器的时候有很大的帮助,但一般写服务器都是使用C/Java语言,因为这些语言对高并发的支持特别好.我们写的这些简单的服务器主要是为了深入学习TCP/IP协议.IO操作以及Python中协程的原理.在上一篇中也提到非阻塞这个概念,在这一篇中,我们继续深入探讨IO模型,因为理解IO操作对我们深入学习异步编程有很大帮助.所以在这一节中我们主要是从Linux内核态和用户态的层面来考虑IO操作时会发生什么样的事情,Linux内

python 高级语法

1 #coding:utf-8 2 3 #定义一个装饰器函数 4 def doc_func(func): 5 6 #包裹函数(闭包) 7 def warpfunc(): 8 #做一些额外的事情 9 print "%s called" %(func.__name__) 10 func() 11 12 return warpfunc 13 14 @doc_func 15 def foo(): 16 print "hello" 17 18 @doc_func 19 def

Python高级语法示例 &#365406;

原文: http://blog.gqylpy.com/gqy/412 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

Python高级语法-对象实例对象属性-类与实例,class方法静态方法等(4.6.1)

目录 1.说明 2.代码 关于作者 @ 1.说明 python中属性:类属性,实例属性 方法:类方法,实例方法,静态方法 想修改类属性,只能是类方法,因为只有类方法把cls(类)传入数据里面 静态方法也就是个普通的方法,为了方便而已 实例方法,不能通过类来直接调用,要调用也可以self = 对象名 具体下面 2.代码 class Provice(object): #类属性 country = "china" def __init__(self,name): #实例属性 self.nam

网络编程杂项高级

tcp聊天,#server端实现:import socketsk=socket.socket() # 实例化socket对象address=("0.0.0.0",8000) #设置端口sk.bind(address) # 绑定IP地址和端口sk.listen(5) #监听while True: conn,addr=sk.accept()#conn接受数据,addr获取客户端ip地址 while True: # 这个循环来实现相互之间聊天的逻辑 try: #win被中断连接就会异常 li