学习笔记Python、generator、yield 、Cookies、fib函数分片、豆瓣音乐爬虫、爬猫

Python笔记Day8

生成器

>>> def simple_generator_function():
>>>    yield 1
>>>    yield 2
>>>    yield 3
>>> for value in simple_generator_function():
>>>     print(value)
1
2
3
>>> our_generator = simple_generator_function()
>>> next(our_generator)
1
>>> next(our_generator)
2
>>> next(our_generator)
3

迭代生成包含1的素数

def get_primes(input_list):
result_list = list()
for element in input_list:
    if is_prime(element):
        result_list.append()

return result_list
或者更好一些的…
def get_primes(input_list):
return (element for element in input_list if is_prime(element))
下面是 is_prime 的一种实现…
def is_prime(number):
if number > 1:
    if number == 2:
        return True
    if number % 2 == 0:
        return False
    for current in range(3, int(math.sqrt(number) + 1), 2):
        if number % current == 0:
            return False
    return True
return False

generator 是用来产生一系列值的

yield 则像是 generator 函数的返回结果

yield 唯一所做的另一件事就是保存一个 generator 函数的状态

generator 就是一个特殊类型的迭代器(iterator)

和迭代器相似,我们可以通过使用 next() 来从 generator 中获取下一个值

通过隐式地调用 next() 来忽略一些值

MethodType:

用MethodType将方法绑定到类,并不是将这个方法直接写到类内部,而是在内存中创建一个link指向外部的方法,在创建实例的时候这个link也会被复制。

class Student(object):
pass

def set_name(self, name):
self.name = name

s1 = Student()
s2 = Student()
s3 = Student()
#将set_name方法绑定到s1实例上
s1.set_name = MethodType(set_name, s1, Student)
s2.set_name = MethodType(set_name, s2, Student)
s1.set_name('tom')
s2.set_name('tony')
>>> print s1.name, ',', s2.name
tom , tony
>>> print s3.name

Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    print s3.name
AttributeError: 'Student' object has no attribute 'name'
将方法绑定在类上:
class Student(object):
pass

def set_name(self, name):
self.name = name

#将方法绑定在类上(没有None参数)
Student.set_name = MethodType(set_name,Student)
s1 = Student()
s2 = Student()
s3 = Student()
s1.set_name('tom')
s2.set_name('tony')
>>> print s1.name, ',', s2.name, ',', s3.name
tony , tony , tony
cookies

Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,
或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,
由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用
户ID、密码、浏览过的网页、停留的时间等信息。当你再次来到该网站时,
网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页
面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。

1:Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、
进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

2:定义于RFC2109和2965都已废弃,最新取代的规范是RFC6265。

3:Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),
浏览器会将Cookie的key/value保存到某个目录下的文本文件内,
下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。

4:Cookie名称和值可以由服务器端开发定义,对于JSP而言也可以直接写入jsessionid,
这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置
或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

切片

@slice() 函数实现切片对象,主要用在切片操作函数里的参数传递。
参数说明:

start – 起始位置
stop – 结束位置
step – 间距
以下实例展示slice 的使用方法:

>>>myslice = slice(5)    # 设置截取5个元素的切片
>>> myslice
slice(None, 5, None)
>>> arr = range(10)
fib函数分片:
class Fib(object):
def __getitem__(self, n):
    if isinstance(n, int): # n是索引
        a, b = 1, 1
        for x in range(n):
            a, b = b, a + b
        return a
    if isinstance(n, slice): # n是切片
        start = n.start
        stop = n.stop
        if start is None:
            start = 0
        a, b = 1, 1
        L = []
        for x in range(stop):
            if x >= start:
                L.append(a)
            a, b = b, a + b
        return L
>>> arr
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> arr[myslice]         # 截取 5 个元素
[0, 1, 2, 3, 4]


>>> f = Fib()
>>> f[0:5]
[1, 1, 2, 3, 5]
>>> f[:10]
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
UTF8

utf8_encode是PowerBuilder的函数,该函数将 data 字符串转换为 UTF-8 编码,并返回编码后的字符串。UTF-8 是一种用于将宽字符值转换为字节流的 Unicode 的标准机制。

小爬虫:
豆瓣音乐类型:
import requests

from lxml import html

url='https://music.douban.com/' #需要爬的网址

page=requests.Session().get(url) 

tree=html.fromstring(page.text) 

result=tree.xpath('//tr//a/text()') #需要获取的数据

result1=tree.xpath('//tr//a/@href')

result2=tree.xpath('//tr[last()]//a/@href')

print(result)

print(result1)

print(result2)
下载猫:
import urllib.request

response = urllib.request.urlopen('http://placekitten.com/g/500/600')

cat_img = response.read()

with open('cat,jpg','wb') as f:
    f.write(cat_img)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值