容易混淆的知识点 、多路复用

 

一、容易混淆的知识点

  1.Pythoy中无块级作用域

#Pythoy中无块级作用域

if 1==1:
    name='alex'
for i in range(10):
    name =i
print (name)

#执行结果:
9

 

  2、Python中以函数为作用域

#Python中以函数为作用域
#作用域
def f1():
    name='a'
    def  f2():
        name ='b'
        print(name)
    f2()
f1()
#以下为执行结果:
b

 

 

  3、python 的作用域在执行之前已经确定

 

name = "alex"
def f1():
    print (name)
#python 的作用域在执行之前已经确定
def f2():
    name='eric'
    f1()
f2()
#执行结果为:
alex


name = "alex"
def f1():
    print(name)
def f2():
    name = "eric"
    return  f1
ret=f2()
ret()
#执行结果为:
alex

 

 

  4、新浪面试题

li =[lambda :x for x in range(10)]
print (li)
#li列表中的元素:[函数,函数,函数...]
#li#函数在诶有执行之前,内部代码不执行
r = li[0]()
print (r)

#执行结果
9

 

二、多路复用

  1.server

#server

import socket
import select

sk = socket.socket()
sk.bind(('127.0.0.1', 9999,))
sk.listen(5)

inputs = [sk,]
outputs = []
messages ={}
while True:
    rlist,wlist,e, = select.select(inputs, outputs,[],1)
    print(len(inputs),len(rlist),len(wlist), len(outputs))
    # 监听sk(服务器端)对象,如果sk对象发生变化,表示有客户端来连接了,此时rlist值为【sk】
    # 监听conn对象,如果conn发生变化,表示客户端有新消息发送过来了,此时rlist的之为 【客户端】
    # rlist = 【吴文煜,】
    # rlist = 【张磊,白宇,】
    # rlist = [sk,]
    for r in rlist:
        if r == sk:
            # 新客户来连接
            conn, address = r.accept()
            # conn是什么?其实socket对象
            inputs.append(conn)
            messages[conn]=[]
            conn.sendall(bytes('hello', encoding='utf-8'))
        else:
            # 有人给我发消息了
            print('=======')
            try:
                ret = r.recv(1024)
                # r.sendall(ret)
                if not ret:
                    raise Exception('断开连接')
                else:
                    outputs.append(r)
                    messages[r].append(ret)
            except Exception as e:
                inputs.remove(r)
                del messages[r]
    # 所有给我发过消息的人
    for w in wlist:
        msg=messages[w].pop()
        resp=msg +bytes('response', encoding='utf-8')
        w.sendall(resp)
        outputs.remove(w)

  2.client

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import socket

sk = socket.socket()
sk.connect(("127.0.0.1", 9999,))
data = sk.recv(1024)
print(data)
while True:
    inp = input(">>>")
    sk.sendall(bytes(inp,encoding='utf-8'))
    print(sk.recv(1024))
sk.close()

 

posted @ 2016-07-15 23:51  不是云  阅读(214)  评论(0)    收藏  举报