Python知识点小结 6

01

描述符

描述符:将某种特殊类型的类的实例指派给另一个类的属性。这个特殊类型需要实现以下三个方法的其中一个

1)__get__(self,instance,onwer)

2)__set__(self,instance,value)

3)__delete__(self,instance)

通过例子可以理解,self就是实例化的描述符对象x,instance就是实例化的Test对象test(也就是被描述的类的self),owner就是Test。描述符定义了属性x的行为。

property实际上就是描述符,通过里层的instance和表层的self将get,set,和del和被实例化的对象的getsize,setsize,delsize关联

一个自动转换华氏度和摄氏度的类:

1)摄氏度和华氏度只要存储其一

2)每个描述符的关键属性就那么几个get是self,instance,owner。set是self,instance,value。当赋值时,value就是被赋值的值

02

容器的魔法方法

协议:协议规定哪些方法必须被定义,但在python协议不那么正式

容器:如列表,元组,字典等可以存放数据的类型

不可变容器只需定义:__len_(self),__getitem__(self,key)

可变容器还需定义:__setitem__(self,key,value),__delitem__(self,key)

定义一个可记录调用次数的列表:

迭代(循环):使用iter()和next()依次迭代:

string = 'abcdefghijklmnopqrstuvwxyz'

it = iter(string)

next(it)

while语句的迭代:

while True:

try:

each = next(it)

except:

break

else:

print(each)

魔法方法:__iter__(),__next__()定义了在迭代时的行为

生成器:通过普通的函数实现,实际是特殊的迭代器,可以用next调用,与return不同的是,当yield执行后函数不会退出而是暂停在语句尾

用生成器实现斐波那契数列

注意细节:逗号的用法

列表推导式,集合推导式和字典推导式,没有字符串推导式和元组推导式:

比如0到99以内的被2整除而不被3整除的数:

numberlist = [ i for i in range(100) if not(i%2) and (i%3)]

显示0到9是否为偶数的字典:

dictlist =

集合:

numberset = (i for i in [1,2,3,3,3,4,4,5,5,6,7,7])

用()的是生成器推导式:可以用next来访问每一个元素,用生成器推导式做函数参数,不用带两层括号,可以直接输入

03

模块与包

每一个.py文件都是python的模块

模块的导入:

import filename //不用加py后缀,模块函数要使用filename.fuc格式

import filename as fn //模块函数使用fn.func格式

import filename as * //函数直接使用fuc格式

导入单个函数:

from filename import fuc as f

from filename import fuc

if __name__ = __main__:,意为当程序不是被导入的模块,而是主程序时才执行的语句

搜索路径:

方案1:导入模块与主程序放在同一个文件夹下,但是会出现一个问题:大型项目开发的模块难道全都放在同一个文件夹下?

方案2:导入的路径是一组路径的列表,位于该列表下的模块都可直接导入,可导路径可以import sys,再用sys.path查看,一般推荐模块放在python\lib\site-package下

方案3:使用sys.path.append()将模块所在的路径导入到可到路径里

包:大型项目要导入成千上万个模块,把他们都放在同一个文件夹下是不现实的。因此包把成千上万个模块分门别类地存放起来,再把模块的位置一一告诉python。

包的制作方法:

1):创建一个文件夹,用于存放模块,文件夹的名字及包的名字

2):在文件夹下创建一个__init__.py的文件,内容可以为空

3):将相关的文件放在文件夹中

包的导入:import packagename.filename as fn

学习python标准库:阅读doc文件夹下的技术文档

04

爬虫(Web Spider)

python访问互联网:

首先,python得知道需要访问的URL

URL由三部分组成:

1):第一部分是协议:https,http,ftp,file,ed2k...

2):第二部分是存放资源的服务器的域名系统或IP地址

3):第三部分是资源的具体地址,比如目录或文件名

python使用urllib包访问网络,它有四个模块分别为request,error,parse,robotparser

response = urllib.request.urlopen(url)

html = response.read() //得到的是二进制文件,需要解码

html = html.decode("utf-8")

使用python得到猫的图片并保存

将response.read()得到的二进制文件写入即将创建的jpg中即可

也可以先将url转变为Request对象再打开:

对urlopen之后的response还可以执行其他操作:

1):response.geturl():得到url

2):response.info():得到httpmessage对象

3):response.getcode():得到状态

使用python访问有道翻译:

point1:urlopen(url,data)中的data如果未赋值则以get形式提交,否则则以 post形式提交

point2:审查元素-->Network-->Headers-->Form Data下的所有数据存储为字典data,之后data需要使用urlencode函数编码为对应的格式,如‘utf-8'格式才能post,urlencode方法是parse模块下的函数,因此先导入parse模块

point3:urlopen之后需要read response,由于urlopen时encode为‘utf-8’,所以此时需要解码,使用decode()为html

point4:得到的html是一个json结构,使用json.load(html)可以载入html使之成为一个字典,然后就可以用字典的输出方式输出我们想要的内容

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180820G1TQE600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券