知识点

1.函数
https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888
https://learnku.com/docs/byte-of-python/2018/functions/3344
有比较详细的解释,都看则可以全面学习。
‘*’作为标志,表示后面的为命名关键字参数。
‘*args’赋值的是元组。
‘**kw’赋值的为字典型。
global 定义全局变量,在所在位置并定义的参数,具有全局效应。

两个非同类型参数的计算:
在这里插入图片描述

调用时不赋值,则一直调用默认值:
在这里插入图片描述

小心
只有形参列表末尾的参数才能指定默认值,即你不能在声明参数列表时先声明有默认值的形参,然后再声明没有默认值的形参。
这是因为给形参赋值是按照实参的顺序进行的。例如函数声明 def func(a, b=5) 是有效的,而函数声明 def func(a=5, b) 是 无效的。

2.字符串
之前有次学习邮箱传送时,提示的\xe4\xb8\xad\xe6\x96\x87’这种类型,当时有点记忆,但就是不会操作,现在记录一下。
b’\xe4\xb8\xad\xe6\x96\x87’.decode(‘utf-8’) 打印出:中文 二字。

https://www.liaoxuefeng.com/wiki/1016959663602400/1017075323632896

chr(x)
将一个整数转换为一个字符
unichr(x)
将一个整数转换为Unicode字符
ord(x)
将一个字符转换为它的整数值
hex(x)
将一个整数转换为一个十六进制字符串
oct(x)
将一个整数转换为一个八进制字符串

格式化字符串
http://www.python3.vip/doc/tutorial/python/0010/
最详细

dict的增加为add(),减少remove(), dict.pop(key)和del dict[key].
list的增加append(),extend(),insert(位置,参数),+ 加号(将两个list相加)。减少remove(),del(),pop(),。
在这里插入图片描述
tuple是不可变组,不能增加减少,只能索引方式。.

formmat 函数一列:
在这里插入图片描述
在这里插入图片描述
3.列表生成式,生成器,迭代器
生成式:
看https://www.liaoxuefeng.com/wiki/1016959663602400/1017317609699776
这里面有介绍,主要是对列表内的计算方式很新奇,需要学习到。
比如:a = [x*x for x in range(1,11) if x % 2 !=0]
print(a)
以及d = {‘x’:‘A’,‘y’:‘B’,“z”:‘C’}
print([(k,’=’ ,v) for k,v in d.items()])

字典生成式是比较难的一点:https://blog.csdn.net/suifengOc/article/details/81841720
https://blog.csdn.net/weixin_41164823/article/details/80524100 此为网页headers的格式,将其格式化为字典方法。
在这里插入图片描述
在这里插入图片描述

生成器:因为列表占用内存空间很大的原因,需要节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。最常用的方法是yield函数。然后通过for循环依次打印出结果。
在这里插入图片描述
迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象
转自廖雪峰的网站
在这里插入图片描述
python中字符串拆分与合并——split()、join()、strip()和replace()
https://blog.csdn.net/qq_40170358/article/details/79774154 这里面讲的比较详细。

4.闭包,匿名函数,装饰器,偏函数
闭包:介绍和格式
内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数。
在Python中创建一个闭包可以归结为以下三点:
 闭包函数必须有内嵌函数
 内嵌函数需要引用该嵌套函数上一级namespace中的变量
 闭包函数必须返回内嵌函数
在这里插入图片描述
在这里插入图片描述
https://blog.csdn.net/weixin_44251004/article/details/86029184 这里面是闭包的详细使用方式,其中有各自例题,非常漂亮。所有例题都值得看一遍。
针对例3:求列表中所有大于2的偶数进行平方计算
new_lst = [i ** 2 for i in lst if i > 2 if i % 2 == 0]
这一行代码还可写成 new_lst = [i ** 2 for i in lst if i > 2 and i % 2 == 0]

匿名函数:当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便
用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。
list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
通过对比可以看出,匿名函数lambda x:

装饰器:在代码运行期间动态增加 函数 功能的方式,称之为“装饰器”(Decorator)。
本质上,decorator就是一个返回函数的高阶函数。所以,我们要定义一个能打印日志的decorator
有点困难,看下链接的使用方法吧:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584
在这里插入图片描述
下列表达式为经典装饰器使用方式:但最后的name属性都变为wrapper了,需要改变这种情况就需要其他办法。
两层嵌套:
def log(func):
def wrapper(*args, **kw):
print(‘call %s():’ % func.name)
return func(*args, **kw) 最先返回func 函数。
return wrapper
三层嵌套:
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print(’%s %s():’ % (text, func.name))
return func(*args, kw)
return wrapper
return decorator
这个3层嵌套的decorator用法如下:
@log(‘execute’)
def now():
print(‘2015-3-25’)
其他的继续看廖雪峰的官网吧
在这里插入图片描述
偏函数:简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
例题:int2 = functools.partial(int, base=2)
创建偏函数时,实际上可以接收函数对象、*args和
kw这3个参数
max2 = functools.partial(max, 10) 10做为一个参数被传递到等号左边了。
相当于:
args = (10, 5, 6, 7)
max2 = max(*args)
实际意义感觉不是很大,只是固定了一个默认值而已。我用偏函数做一个累积计算,和用其他方法的代码量差不多。仅是作为内置函数的再创新默认值还可以。自己设定的函数就是一样的代码量了。

**5.**实例属性和类属性
这个虽然比较简单,但是需要注意一些事项:
a. 实例属性优先于类属性
b.在这里插入图片描述
通过MethodType获取方法:
在这里插入图片描述
不给Student绑定方法的话,下边的b和student都没有name属性。且X.set_name 可以不用这么规范,改为其他X.st都可以。只是容易弄错。
再提示一遍,MethodType在py3.7里面没有三个参数了,只有两个,包括给类绑定方法也是一样。
没有MethodType(set_age,None,Student)。

6一些语法使用:
slots:为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性:
class Student(object):
slots = (‘name’, ‘age’) # 用tuple定义允许绑定的属性名称

@property:私有的单词意思。用法是将类里面的方法改为属性,这样就更精简代码。使用是需要获取的值要定义成私有名称如self._score。	
				  https://www.liaoxuefeng.com/wiki/1016959663602400/1017502538658208

__str__ 和__repr__:	

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
iter
如果一个类想被用于for … in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环:
class Fib(object):
def init(self):
self.a, self.b = 0, 1 # 初始化两个计数器a,b
def iter(self):
return self # 实例本身就是迭代对象,故返回自己
def next(self):
self.a, self.b = self.b, self.a + self.b # 计算下一个值
if self.a > 100000: # 退出循环的条件
raise StopIteration()
return self.a # 返回下一个值
现在,试试把Fib实例作用于for循环:

for n in Fib():
… print(n)

getitem
作用比__iter__灵活,可以分片取迭代出来的值,也可以只取某一个值,或者全部值 。详细参看:https://www.liaoxuefeng.com/wiki/1016959663602400/1017590712115904
相关函数的介绍:
https://blog.csdn.net/soulwyb/article/details/89485844

getattr
正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错。
要避免这个错误,除了可以加上一个score属性外,Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性
注意,只有在没有找到属性的情况下,才调用__getattr__

call
任何类,只需要定义一个__call__()方法,就可以直接对实例进行调用。
调用方式如下:

s = Student(‘Michael’)
s() # self参数不要传入
My name is Michael.

type 动态创建类
在这里插入图片描述

metaclass
metaclass允许你创建类或者修改类。换句话说,你可以把类看成是metaclass创建出来的“实例”。
metaclass是Python面向对象里最难理解,也是最难使用的魔术代码。正常情况下,你不会碰到需要使用metaclass的情况,所以,以下内容看不懂也没关系,因为基本上你不会用到。
https://www.liaoxuefeng.com/wiki/1016959663602400/1017592449371072

super() 函数是用于调用父类(超类)的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :
在这里插入图片描述
再看一个例题:
https://blog.csdn.net/AnimateX/article/details/80307010

7.错误和调试
高级语言通常都内置了一套**try…except…finally…**的错误处理机制。finally可以不用。
可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句
使用try…except捕获错误还有一个巨大的好处,就是可以跨越多层调用,比如函数main()调用foo(),foo()调用bar(),结果bar()出错了,这时,只要main()捕获到了,就可以处理

raise语句抛出一个错误的实例
方法:raise [exceptionType[,argument][,traceback]]
例: rasie exception (‘ValueError’,‘值’) 返回提示的错误信息为ValueError。错误的值为:比如0不能做分母,则返回一个‘0’。

logging 模块。和assert比,logging不会抛出错误,而且可以输出到文件。这模块很重要,需要长久学习,并熟练使用。
https://blog.csdn.net/baidu_39372836/article/details/90669645
https://docs.python.org/zh-cn/3/library/json.html#json.dumps
讲的很详细

8.json 如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
dumps()方法返回一个str,内容就是标准的JSON。类似的,dump()方法可以直接把JSON写入一个file-like Object。
要把JSON反序列化为Python对象,用loads()或者对应的load()方法,前者把JSON的字符串反序列化,后者从file-like Object中读取字符串并反序列化.由于JSON标准规定JSON编码是UTF-8,所以我们总是能正确地在Python的str与JSON的字符串之间转换。
https://www.liaoxuefeng.com/wiki/1016959663602400/1017624706151424
https://docs.python.org/zh-cn/3/library/json.html#json.dumps

9.网络爬虫
学习爬虫之前首先要学习法律风险:1.凡是网页+‘/robots.txt’下禁止的内容,尽量不要去爬取,如果仅是自己使用,不作为商业用途,不影响网页的运行速度偶尔爬取一次还是没问题的。2.代理IP的设置,在爬取人家之前,首先自己得穿好伪装,不然被反爬取就搞笑了,相应的还要承担自己没注意到的法律责任。
所以每次需要设置 proxies={伪IP}最好是多设置一些伪IP,防止多个不能使用的情况,暴露自己的真实IP。
requests
相关使用方法要多看资料咯。
很多教材都是介绍urllib,其实已经脱节了,但是也找不到用新方式的解决办法,测试了一个类urlopen读取全网页的办法,很不错。
在这里插入图片描述

socket Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。一个难点
Python 提供了两个基本的 socket 模块。
第一个是 Socket,它提供了标准的 BSD Sockets API。
第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
https://blog.csdn.net/rebelqsp/article/details/22109925
https://blog.csdn.net/dzh1125641239/article/details/82900319
https://www.cnblogs.com/wangcq/p/3520400.html 好像是针对C语言的解释
https://blog.csdn.net/kuangxie4668/article/details/91351419

正则表达式获取网络信息:
https://blog.csdn.net/wapecheng/article/details/94154682 这个比较详细。
实际上只用贪婪匹配‘.’ 或者‘.?’就能解决大部分问题。主要注意首位衔接不能有任何出错。

xpath 比正则表达式简单很多,所需要的代码量和时间也相对较少。很多复杂的网页地址非常适合直接复制xpath,而不需要自己去解读网页,再正则表达出来。
用pycharm时,虽然能安装lxml,但是无法调用etree,可以调用lxml.html。所以要先在电脑cmd环境下安装(windows:pip install lxml)。
格式为:from lxml import etree
content = ‘网址或者文本’
selector = etree.HTML(‘content’) #格式化文本信息
info = selector.xpath(’//标签1[@属性1=“属性值1”]/标签2[@属性2=“属性值2”]/…/text()’) #获取文本还有一种string()。
info = selector.xpath(‘ //标签1[@属性1=“属性值1”]/标签2[@属性2=“属性值2”]/…/@属性n’) #获取属性n的值
https://blog.csdn.net/qq_42787271/article/details/81613076 简单的介绍了一些方法。
更深的需要多看相关的知识(Python爬虫开发:从入门到。。。谢乾坤的书)介绍得多一些。但也不全面,不够详细。
https://python3webspider.cuiqingcai.com/4.1xpath-de-shi-yong
https://www.w3school.com.cn/xpath/index.asp
https://zhuanlan.zhihu.com/p/32187820 三个网页各有知识点
https://www.bazhuayu.com/tutorial/xitongxpath 这里有系统学习xpath的视频,不知道内容是否丰富,先记录。

beautifulsoup 做汤有些时候很方便,不用复杂的找路径或者正则,但是针对复杂的属性值,有些困难,至少在网上没有找到类似的例题。相关的使用方法有:
https://python3webspider.cuiqingcai.com/4.2beautifulsoup-de-shi-yong#find_all
https://blog.csdn.net/ZenG_xiangt/article/details/81713035 简洁的例举了所有用法,更深的就可以继续去查询其他的。
https://blog.csdn.net/A_Cx97/article/details/50762324
https://blog.csdn.net/chinaltx/article/list/2? 比较详细,还包括了很多其他模块的使用说明。
https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#find-all 这个最全面,最好是看这里面的,拾人牙慧总是会溜掉很多知识点。
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, ‘lxml’)
print(soup.prettify())
print(soup.p.string) #p为一般网页文本两边的标签名称,此方法只能打印第一p下面的一句文本。如果要打印所有的,需要for循环,简单的方法如下:
for i in soup.find_all(‘p’): # ‘p’可以和其他文本的标签一起被索引。如find_all([‘p’,‘div’,‘imag’]) 等等。
print(i.string)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值