作用域
1
2
3
|
if
1
=
=
1
:
name
=
'alex'
print
(name)
|
python中是没有块儿作用域的,所以python可以输出name
java/c中有块级作用域,提示name没有定义
Python中无块级作用域
1
2
3
4
|
# if 1 == 1:
# name = 'alex'
# print(name)
#输出结果为alex
|
1
2
3
4
5
6
7
8
9
10
11
|
# for i in range(10):
# name = i
# print((name))
#输出结果为:9
# def func():
# name = 'alex'
# func()
#
# print(name)
#执行结果报错:name is notdefined
|
#Python中是由作用域链的,找变量的时候是由内向外找,知道找不到报错。
#提示:Python的作用域在执行前已经确定。 函数未执行前作用域链就已经确定了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
name
=
'alex'
def
f1():
print
(name)
def
f2():
name
=
'eric'
"""
"""
name
=
'alex'
def
f1():
print
(name)
def
f2():
name
=
'eric'
return
f1
ret
=
f2()
ret()
"""
"""
li
=
[
lambda
:x
for
x
in
range
(
10
)]
r
=
li[
0
]()
print
(r)
|
#li是列表
#li列表中的元素:【函数,函数,函数。。。。】
#函数在没有执行前,内部代码不执行
#?li[0],函数
#?函数()
#返回值是???
python2中默认经典类,如果继承object()是新式类
python3中默认新式类
I/O多路复用
server端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import
socket
import
select
sk
=
socket.socket()
sk.bind((
'127.0.0.1'
,
9999
,))
sk.listen(
5
)
inputs
=
[sk, ]
while
True
:
rlist, w, e
=
select.select(inputs,[],[],
1
)
#inputs:列表中存放sk,和conn对象,如果有新连接请求过来,sk对象就会变化,rlist就等于sk,
#如果是已经建立的连接,发过来消息,返回的就是conn的对象
print
(rlist)
# 监听sk(服务器端)对象,入股osk对象发生变化,表示客户端来连接了,此时rlist值为[sk]
# 监听conn对戏那个,如果conn发生变化,表示客户端有新消息发送过来了,此时rlist的值为[客户端]
# rlist = [wuwenyu,]
# rlist = [zhanglei, ]
# rlist = [sk]
# rlist 中socket对象列表,[sk,]
for
r
in
rlist:
if
r
=
=
sk:
#新客户来连接,则建立新的conn,把conn加入到inputs列表中
#如果r != sk,则是已经建立连接的对象,conn,那么conn接收消息。
conn, address
=
r.accept()
#conn是什么? 其实就是socket对象
inputs.append(conn)
conn.sendall(bytes(
'hello'
, encoding
=
'utf-8'
))
#rlist = [sk,], rlist =[sk1,],rlist = [sk1,sk2]
#rlist = []
else
:
#有人给我发消息了
r.recv(
1024
)
|
client端:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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'
))
sk.close()
|