第十章:Python の 网络编程进阶

本課主題

  • Python中的作用域补充
  • socketserver 源码
  • 本周作业

Python中的作用域补充

  1. Python世界里沒有块级作用域的:在 Java/C+ 世界里没法打印 name。

    # 在 Java/C+ 世界里没法打印 name
    # 但在 Python/ JavaScript 世界里可以打印 name
    >>> if 1 == 1:
    ...     name = ‘Janice‘
    ...
    >>> print(name)
    Janice

    Python中无块级作用域(小知识点一)

    >>> for i in range(10):
    ...    name = i
    ...
    >>> print(name)
    9

    Python中无块级作用域(小知识点二)

  2. 但在 Python/ JavaScript 世界里可以打印 name。在 Python 中是以函数作为作用域。

    >>> del name
    >>> def func():
    ...     name = ‘Janice‘
    ...
    >>> print(name)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name ‘name‘ is not defined

    Python 中是以函数作为作用域(小知识点三)

  3. Python是有作用域链条,对于作用域来说,在函数没有执行之前,它的作用域已经确定啦,作用域链也已经确定啦

    >>> name = ‘alex‘
    
    # 这是 f1()是作用域,它是一个内部的作用域
    >>> def f1():
    ...     print(name)
    ... 
    
    # 这是 f2()是作用域
    >>> def f2():
    ...     name = ‘eric‘
    ...     f1()
    ... 
    
    >>> f2()
    alex

    Python是有作用域链条(小知识点四)

    >>> name = ‘alex‘
    
    # 这是 f1()是作用域,它是一个内部的作用域
    >>> def f1():
    ...     print(name)
    ... 
    
    # 这是 f2()是作用域
    >>> def f2():
    ...     name = ‘eric‘
    ...     return f1
    ... 
    
    >>> ret = f2()
    >>> ret() # 这相当于运行 f1()
    alex

    Python是有作用域链条(小知识点五)

  4. For 循环,然后把每一个元素都加1,最后生成一个列表

    # 它会执行一个 For 循环,然后把每一个元素都加1,最后生成一个列表
    
    li = [x+1 for x in range(10) if x > 6]
    print(li)

    Python lambda + for 循环(小知识点六)

    >>> li2 = [lambda :x for x in range(10)]
    >>> ret = li2[0]()
    >>> print(ret)
    9

    Python lambda + for 循环(小知识点七)

    >>> li = []
    >>> for i in range(10):
    ...     def f1(x=i):
    ...        return x
    ...
    ...     li.append(f1)
    ...
    >>> print(li[0]())
    0
    >>> print(li[1]())
    1
    >>> print(li[2]())
    2

    Python lambda + for 循环(小知识点八)

socketserver 源码

用到了IO多路復用

多线程、多進層、協程

本周作业

day10作业

參考資料

银角大王:Python之路【第七篇】:线程、进程和协程

金角大王:

时间: 2024-08-24 03:59:12

第十章:Python の 网络编程进阶的相关文章

第十三章:Python の 网络编程进阶(二)

本課主題 Python 中的 ORM - SQLAlchemy Paramiko 介紹和操作 初探堡垒机 Python 中的 ORM - SQLAlchemy 这是一个叫 Object Relational Mapping,可以让我们通过类和对象来操作数据库,具体功能包括创建表,定义数据类型,新增或者查询,一舨MySQL 能做的功能,都可以在 SQLALchemy 里做. 表操作 创建表 CREATE TABLE 删除表 DROP TABLE 清空表 TRANSCATE 创建临时表 CREATE

第十二章:Python の 网络编程进阶(一)

本課主題 RabbitMQ 的介紹和操作 MySQL 的介紹 Python 操作 MySQL API RabbitMQ 的介紹和操作 MySQL 的介紹 操作 MySQL 安装了 MySQL,修改以下配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,把 bind=127.0.0.1 改成特地的IP地址,就可以接受远端登入. CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass'; GRANT ALL ON *.* TO 'my

python网络编程——socket进阶篇(select/poll/epoll)

原 生socket客户端在与服务端建立连接时,即服务端调用accept方法时是阻塞的,同时服务端和客户端在收数据(调用recv)时也是阻塞的.原生 socket服务端在同一时刻只能处理一个客户端请求,即服务端不能同时与多个客户端进行通信,实现并发,导致服务端资源闲置(此时服务端只占据 I/O,CPU空闲). 现在的需求是:我们要让多个客户端连接至服务器端,而且服务器端需要处理来自多个客户端请求.很明显,原生socket实现不了这种需求,此时我们该采用什么方式来处理呢? 解决方法:采用I/O多路复

python 网络编程 (二)---tcp

异常 python的socket模块实际上定义了4种可能出现的异常: 1)与一般I/O 和通信问题有关的socket.error; 2)与查询地址信息有关的socket.gaierror; 3)与其他地址错误有关的socket.herror; 4)与在一个socket上调用settimeout()后,处理超时有关的socket.timeout; import socket, sys, time host = sys.argv[1] textport = sys.argv[2] filename

[Python网络编程] DNS缓存解决方案

记得以前写爬虫的时候为了防止dns多次查询,是直接修改/etc/hosts文件的,最近看到一个优美的解决方案,修改后记录如下: import socket _dnscache={} def _setDNSCache(): """ Makes a cached version of socket._getaddrinfo to avoid subsequent DNS requests. """ def _getaddrinfo(*args, **

Python 网络编程

Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket()函数 Pyt

[Python网络编程]gevent httpclient以及网页编码

之前看到geventhttpclient这个项目,https://github.com/gwik/geventhttpclient,官方文档说非常快,由于响应使用了C的解析,所以我一直想把这玩意用到项目中, 这两天一直在纠结这玩意,说实在一句话,比较难用,封装的不给力,最大缺陷如下: 1.不支持重定向,重定向需要自己来写,很费事 2.新建的httpclient对象只能发送同域名的请求 这相当的蛋疼,我花了一点时间封装了一下,解决了上面的两个问题,还增加了自动编解码问题,代码如下: #!/usr/

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 C#网络编程之使用Socket类Send.Receive方法的同步通讯 Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. 最后希望文章对你有所帮助,如果有不

python 网络编程(五)---DNS域名系统

1.域名系统定义 DNS计算机域名系统由域名服务器和域名解析器组成.通常输入的是网址就是一个域名. 2.域名查询 查询方式包括: 1)正向查询:由域名查找对应的IP(如:119.75.218.77">www.baidu.com->119.75.218.77 ) 2)反向查询:由IP查找域名(如:119.75.218.77 –> www.baidu.com) 查询方式包括: 1)递归查询:当DNS服务器接收到客户端的查询请求时,会做出相应的反应(本地DNS服务器查询.其他服务器查