Python学习-day7

一、反射

在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

Python同样具有反射机制,使用反射获取到的函数和方法可以像平常一样加上括号直接调用,获取到类后可以直接构造实例;不过获取到的字段不能直接赋值,因为拿到的其实是另一个指向同一个地方的引用,赋值只能改变当前的这个引用而已。

反射机制的实现依赖一下几个内置函数:

hasattr(object, attr):判断object中是否存在attr属性或方法,存在则返回True,否则返回False

getattr(object,attr,default):如果存在attr属性(方法)则返回attr的值(方法地址)否则返回default值。

setattr():对容器中以参数为名称的内容进行修改

 delattr():删除容器中以参数为名称的内容

 例如下:定义一个Dog类并实例化,判断用户输入的内容是否是Dog中的方法,如果是执行该方法,如果不是,则添加为该对象的方法

 1 def bark(self):
 2     print(‘%s bark loudly‘%self.name)
 3
 4 def sleep(self):
 5     print(‘%s is sleeping‘%self.name)
 6
 7
 8 class Dog(object):
 9     def __init__(self,name):
10         self.name = name
11     def eat(self):
12         print(‘%s is eating‘%self.name)
13
14 d = Dog(‘bobo‘)
15 choice = input(‘>>:‘).strip()
16
17 if hasattr(d,choice):
18
19     func = getattr(d,choice)
20     func()
21
22 else:
23     setattr(d,choice,sleep)
24     func = getattr(d, choice)
25     func(d)

输入已存在的方法

>>:eat
bobo is eating

输入不存在的方法

>>:sleepy
bobo is sleeping

如果要判断对象中是否存在某属性,方法与上面相同

 1 class Dog(object):
 2     def __init__(self,name):
 3         self.name = name
 4     def eat(self):
 5         print(‘%s is eating‘%self.name)
 6
 7 d = Dog(‘poppy‘)
 8
 9 choice = input(‘>>:‘).strip()
10
11 if hasattr(d,choice):
12     attr = getattr(d,choice)
13     print(attr)
14 else:
15     setattr(d, choice, ‘8‘)
16     new_attr = getattr(d,choice)
17     print(new_attr)

输入已经存在的属性则打印出该属性值

>>:name
poppy

输入不存在的属性值,则为对象添加该属性,并赋值为8

>>:age
8

 二、网络编程

Python 提供了两个基本的 socket 模块。

第一个是 Socket,它提供了标准的 BSD Sockets API。

第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。

套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接 字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

例客户端程序:

 1 import socket
 2 client = socket.socket()#声明socket 类型,同时生成socket连接对象
 3 client.connect((‘localhost‘,6969))
 4 while True:
 5     msg = input(‘>>>:‘).strip()#不可以send空值
 6     #client.send(b‘你好jim‘.encode(‘utf_8‘))  # py3 中只能发送字节
 7     if len(msg) == 0:
 8         continue
 9     client.send(msg.encode(‘utf_8‘))
10     data = client.recv(1024)
11     print(‘received :‘, data)
12     client.close()

服务器端程序:

 1 import socket
 2
 3 server = socket.socket()
 4 server.bind((‘localhost‘,6969))#绑定要监听的端口
 5 server.listen(5)#最大允许排队数
 6 print(‘start to wait!‘)
 7 while True:
 8     # conn就是客户端连过来而在服务器端为其生成的一个连接实例
 9     conn, addr = server.accept()  # 等待
10
11     print(conn, addr)
12
13     print(‘phone comed!‘)
14     while True:
15         data = conn.recv(1024)
16
17         print(‘recv:‘, data)
18
19         conn.send(data.upper())
20
21 server.close()

时间: 2024-08-10 16:45:29

Python学习-day7的相关文章

python学习--day7 linux基础(5)

  第一部分: 一.nginx服务安装nginx包(源码安装)1.先cd /etc/yum.repos.d目录下2.yum install epel-release -y(安装扩展包)3.yum install nginx -y 4.rpm -qa nginx查看安装的nginx软件包或者rpm -ql nginx查看nginx里的全部文件     二.作为web服务修改配置文件 修改配置文件:vim /etc/nginx/nginx.conf  三.让配置生效,验证配置     第二部分 nf

Python学习day7文件操作

文本操作 # 读取utf-8编码数据,[转换]成unicode(str)编码的数据 # obj = open('D:\美女模特空姐护士联系方式.txt',encoding='utf-8',mode='r') # content = obj.read() # obj.close() # print(content,type(content)) # obj = open('D:\美女模特空姐护士联系方式.txt',mode='rb') # content = obj.read() # obj.clo

Python学习 day7 数据类型整理

数据类型整理 - int -bit_length 使用方法 用一个int型例如int后的n n.bit_length() - to_bytes,将数字转换成字节类型: 6表示用多少个人字节表示,little/big,用于指定生成字节的顺序 result = val.to_bytes(6,'little') print(result) - from_bytes,将字节转换成数字 result = b'\x02\x00\x00\x00\x00\x00' data = int.from_bytes(r

python学习DAY7(编码转码)

Unicode默认中英文为2个字节,16位 Unicode相当于编码的转码中介 ASCII不可存中文字符 utf-8(可变长):英文字符按照ASCII码 中文字符三个字节 #打印系统默认编码 import sys print(sys.getdefaultencoding()) ------------------------------------------- python2中: #若UTF-8转为GBK 默认编码为unicode 则需要进行解码操作,先解成UNICODE(可显示中文),再编码

python笔记 - day7

python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblogs.com/wupeiqi/p/4493506.html 大纲: configparser模块 XML模块 shutil模块以及压缩包处理 subprocess模块 面向对象学习 configparser: 模块解析:configparser用于处理特定格式的文件,其本质上是利用open来操作文件.

python学习:程序控制结构·作业20141219

Python学习:程序控制结构 20141219 编程环境: windows 7 x64 python 2.7.6 题目: 1 编写程序,完成下列题目(1分) 题目内容: 如果列出10以内自然数中3或5的倍数,则包括3,5,6,9.那么这些数字的和为23.要求计算得出任意正整数n以内中3或5的倍数的自然数之和. 输入格式: 一个正整数n. 输出格式: n以内中3或5的倍数的自然数之和. 输入样例: 10 输出样例: 23 时间限制:500ms内存限制:32000kb n = int(raw_in

python学习第二天

python学习的第二天就是个灾难啊,这天被打击了,自己写的作业被否认了,不说了,写博客还是个好习惯的,要坚持下去,就不知道能坚持到什么时候.呵呵!!! 这天教的知识和第一天的知识相差不大,区别在于比第一天讲的更细了(我们是两个老师教的,风格是不一样的),这次也写那些比较细的知识点. python的简介 (1)你的程序一定要有个主文件. (2)对于python,一切事物都是对象,对象基于类创建.#似懂非懂,不过有那么点似懂. 知识点 #__divmod__ 会把两个数字相除的商和余数以元组的方式

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

python学习之最简单的用户注册及登录验证小程序

文章都是从我的个人博客上粘贴过来的哦,更多内容请点击 http://www.iwangzheng.com 正如很多同学所知道的,楼主开始学习python了,前进的道路曲曲折折,有荆棘也有陷阱,从最简单的小程序写起,每天练习,将python进行到底. 有一点比较别扭的就是python的换行之后空四个空格,ruby都是两个,并且python在方法和循环语句的第一句都要加冒号 mysql> show create table user; mysql> alter table user add sal