鱼C论坛

 找回密码
 立即注册
查看: 3589|回复: 2

[学习笔记] 《Python零基础入门》第三十一讲~讲

[复制链接]
发表于 2017-12-10 01:34:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 py大神 于 2017-12-24 14:38 编辑

第三十一讲:
pickle模块。#pickle:泡菜
这个模块可以把Python的所用对象都转换成二进制的形式存放字节流。这个过程我们称之为存放:pickling。那么把二进制转换成对象就是读取:unpickling。
方法:
  1. >>> import pickle
  2. >>> mylist = [1,2,3]
  3. >>> pickle.file = open('mylist','wb')
  4. >>> pickle_file = open('mylist','wb')
  5. >>> pickle.dump(mylist,pickle_file)
  6. >>> pickle.close()
  7. Traceback (most recent call last):
  8.   File "<pyshell#11>", line 1, in <module>
  9.     pickle.close()
  10. AttributeError: module 'pickle' has no attribute 'close'
  11. >>> pickle_file.close()
  12. >>> pickle_file = open('mylist','rb')
  13. >>> mylist2 = pickle.load(pickle_file)
  14. >>> mylist2
  15. [1, 2, 3]
  16. >
复制代码


本节课有天气程序
第三十二讲:
主要介绍了错误的类型,总结见本专辑其他帖子。





第三十三讲:
try:
        要进行错误捕捉的代码
        当某行代码出错后,不再执行下面的代码,直接跳到except语句
except 错误类型 as 变量名:
        捕捉错误后执行的代码
finally:
        无论如何都会执行的代码
raise 异常名字
        引发一个异常。
如:
  1. >>> raise
  2. Traceback (most recent call last):
  3.   File "<pyshell#2>", line 1, in <module>
  4.     raise
  5. RuntimeError: No active exception to reraise
  6. >>> raise ZeroDivisionError('除数为零')
  7. Traceback (most recent call last):
  8.   File "<pyshell#1>", line 1, in <module>
  9.     raise ZeroDivisionError('除数为零')
  10. ZeroDivisionError: 除数为零
复制代码

异常解释可以定制




第三十四讲:
丰富的else语句和简洁的with语句









第三十六讲:类和对象
假如有一些数据,有一个函数,这个函数调用这些数据,那么把这些数据和这个函数封装进一个类(class),那么这些数据就是类的属性,函数就是类的方法
即:类=属性+方法
self参数:类中的方法函数必须有self参数,因为在实例化一个类的时候,实例化对象会将自身作为self参数代入方法函数,因为一个类可以实例化很多个对象,当多个对象同时调用相同的方法却传进去不同的参数的时候,python就会不知道是哪个对象要


Python的魔法方法:总是被双下划线包围
__init__(self)方法:构造方法
当实例化一个对象的时候,那么这个方法就会在对象被创建的时候自动调用




第五十四讲:爬虫————实战
urlopen()函数既可以是一个URL字符串,也可以是一个Request对象
如:作为Request对象
  1. import urllib.request

  2. req = urllib.request.Request('http://placekitten.com/g/500/600')#实例化Request对象
  3. response = urllib.request.urlopen(req)#将Request对象传进去
  4. cat_jpg = response.read()

  5. with open('cat_500_600','wb') as f:
  6.     f.write(cat_jpg)
复制代码

如:作为URL字符串
  1. import urllib.request

  2. response = urllib.request.urlopen('http://placekitten.com/g/500/600')#作为URL字符串传入进去
  3. cat_jpg = response.read()

  4. with open('cat_500_600','wb') as f:
  5.     f.write(cat_jpg)
复制代码

getinfo()方法得到一个HTTPMesagge对象
  1. >>> response.info()
  2. <http.client.HTTPMessage object at 0x0000020F5B491160>
复制代码

打印出来:
  1. >>> print(response.info())
  2. Date: Wed, 20 Dec 2017 12:30:16 GMT
  3. Content-Type: image/jpeg
  4. Content-Length: 26590
  5. Connection: close
  6. Set-Cookie: __cfduid=db50565700b9545274517be67286d4a0b1513773016; expires=Thu, 20-Dec-18 12:30:16 GMT; path=/; domain=.placekitten.com; HttpOnly
  7. Accept-Ranges: bytes
  8. X-Powered-By: PleskLin
  9. Access-Control-Allow-Origin: *
  10. Cache-Control: public
  11. Expires: Thu, 31 Dec 2020 20:00:00 GMT
  12. Server: cloudflare-nginx
  13. CF-RAY: 3d029ca760149613-SJC
复制代码

包含了远程服务器反悔的header信息
比如:Server: cloudflare-nginx就是服务器名称
getcode()得到HTTP的状态码,200则表示OK
  1. >>> response.getcode()
  2. 200
复制代码

——————————————————————爬有道词典————————————————————————
encode()把Unicode转换成其他形式
如:
  1. encode('utf-8')#把Unicode转换成utf-8
复制代码

decode()把其他转换成utf-8模式,方法同上
json结构:是一种轻量级的数据交换结构,就是用字符串的形式把Python的数据结构封装起来
————————————————编码问题——————————————
Unicode 编码系统的发明是为了统一各国文字的编码,因此把它称为万国码。Unicode 为每种语言设置了唯一的二进制编码表示方式,也就是说无论哪个国家的语言,都可以在 Unicode 上找到对应的代码。因此,当不同的编码系统进行相互转换的时候,可以利用 Unicode 做一个“中介”。

其他编码系统到 Unicode 的转换过程我们称为解码(decode),将 Unicode 转换为其他编码系统的过程称之为编码(encode)。例如 A 编码需要转换为 B 编码,过程如下:

A编码 -> decode(A) -> Unicode -> encode(B) -> B 编码






第五十七讲:
正则表达式:
search方法:从用于在字符串中搜索正则表达式第一次出现的位置。需要搜索的字符串需要用原始字符串。
        .        正则表达式的通配符。找到除了换行符以外的任何字符
        \d        用来匹配任何数字
字符类:用中括号        []        括起来要匹配的字符串
匹配次数:在要匹配的字符后加        {次数范围}
        ^        脱字符,要求要匹配的字符必须在开始位置。只有放在开始处才有作用,放其他位置表示其本身
如:
  1. >>> re.search('^fishc','i love fishc')#这里因为fishc没有在 i love fishc 的开始位置,所以匹配不到
  2. >>> re.search('^fishc','fishc,i,love')
  3. <_sre.SRE_Match object; span=(0, 5), match='fishc'>
  4. >>>
复制代码


        $                     要求必须在结束的位置。同上。
如:
  1. >>> re.search('fishc

  2.         []        和反斜杠的作用差不多,不过可以转义多个字符。但是        -        和        \        和        ^        不可转义

  3. 用括号        ()                可以打包多个

  4. 贪婪模式:即尽可能多的匹配
  5. 如:[code]>>> a = '<asd><gasdg><adsa><asd><asd>'
  6. >>> re.search(r'<.+>',a)
  7. <_sre.SRE_Match object; span=(0, 28), match='<asd><gasdg><adsa><asd><asd>'>
  8. >>>
复制代码

这里因为贪婪模式下,会一直往后查找>找到最后一个>的时候停止并返回
所以返回了整个字符串
非贪婪模式:
如:
  1. >>> re.search(r'<.+?>',a)
  2. <_sre.SRE_Match object; span=(0, 5), match='<asd>'>
  3. >>>
复制代码

加上问号即可,搜索到第一个符合正则表达式的字符串后就返回,所以返回的是第一个<>内的内容,'i love fishc')
<_sre.SRE_Match object; span=(7, 12), match='fishc'>
>>> re.search('fishc

        []        和反斜杠的作用差不多,不过可以转义多个字符。但是        -        和        \        和        ^        不可转义

用括号        ()                可以打包多个

贪婪模式:即尽可能多的匹配
如:
  1. >>> a = '<asd><gasdg><adsa><asd><asd>'
  2. >>> re.search(r'<.+>',a)
  3. <_sre.SRE_Match object; span=(0, 28), match='<asd><gasdg><adsa><asd><asd>'>
  4. >>>
复制代码

这里因为贪婪模式下,会一直往后查找>找到最后一个>的时候停止并返回
所以返回了整个字符串
非贪婪模式:
如:
  1. >>> re.search(r'<.+?>',a)
  2. <_sre.SRE_Match object; span=(0, 5), match='<asd>'>
  3. >>>
复制代码

加上问号即可,搜索到第一个符合正则表达式的字符串后就返回,所以返回的是第一个<>内的内容,'fishc,i,love')#这里fishc没有在fishc,i,love的最后位置,所以匹配不到
>>> [/code]

        []        和反斜杠的作用差不多,不过可以转义多个字符。但是        -        和        \        和        ^        不可转义

用括号        ()                可以打包多个

贪婪模式:即尽可能多的匹配
如:
这里因为贪婪模式下,会一直往后查找>找到最后一个>的时候停止并返回
所以返回了整个字符串
非贪婪模式:
如:
加上问号即可,搜索到第一个符合正则表达式的字符串后就返回,所以返回的是第一个<>内的内容

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-10 07:59:51 | 显示全部楼层
这么快啊学习进度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-10 14:54:01 | 显示全部楼层

其实有的地方还没弄明白,不过先把视频看一遍再说,弄不懂的就回来再研究。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 11:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表