python对小数据池的代码分析

小数据池

目的:缓存我们字符串,整数,布尔值.在使用的时候不需要创建更多的对象

缓存:int,str,bool

int:缓存范围-5~256

str:

 

1.长度小于等于1,直接缓存

2.长度大于1.字符串中如果只有数字,字母,下划线,就会缓存

3.乘于1.同上,乘于大于1的数.仅包含数字,字母,下划线,最终长度小于20会缓存

4.使用sys模块中的intern()缓存字符串

代码块的关系:如果在同一个代码块中,默认的整数和字符串还有布尔值都会进行缓存,如果涉及计算,尊崇上面的规则,

如果跨代码块,按照上面的规则执行

1. 小整数对象池#

整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。

Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,

无论这个整数处于LEGB中的哪个位置,

所有位于这个范围内的整数使用的都是同一个对象。同理,单个字母也是这样的。

 

In [1]: a=-5

In [2]: b=-5

In [3]: a is b
Out[3]: True

In [4]: a=256

In [5]: b=256

In [6]: a is b
Out[6]: True

In [7]: a=1000

In [8]: b=1000

In [9]: a is b
Out[9]: False

intern机制处理空格一个单词的复用机会大,所以创建一次,有空格创建多次,但是字符串长度大于20,就不是创建一次了。

 

'''
想最快的入门Python吗?请搜索:"泉小朵",来学习Python最快入门教程。
也可以加入我们的Python学习Q群:902936549,看看前辈们是如何学习的。
'''
In [13]: a="abc"

In [14]: b="abc"

In [15]: a is b
Out[15]: True

In [16]: a="helloworld"

In [17]: b="helloworld"

In [18]: a is b
Out[18]: True

In [19]: a="hello world"

In [20]: b="hello world"

In [21]: a is b
Out[21]: False

 

s1 = "abcd"
s2 = "abcd"
print(s1 is s2)

s1 = "a" * 20
s2 = "a" * 20
print(s1 is s2)

s1 = "a" * 21
s2 = "a" * 21
print(s1 is s2)

s1 = "ab" * 10
s2 = "ab" * 10
print(s1 is s2)

s1 = "ab" * 11
s2 = "ab" * 11
print(s1 is s2)
# True
# True
# False
# True
# False

2.大整数对象池。

说明:终端是每次执行一次,所以每次的大整数都重新创建,

而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以

这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。

c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。

C1.b is C2.b

 

'''
想最快的入门Python吗?请搜索:"泉小朵",来学习Python最快入门教程。
也可以加入我们的Python学习Q群:902936549,看看前辈们是如何学习的。
'''
In [22]: a=1000

In [23]: b=1000

In [24]: a is b
Out[24]: False

In [25]: a=-1888

In [26]: b=-1888

In [27]: a is b
Out[27]: False

In [28]:

 

c1 = 1000
d1 = 1000
print(c1 is d1)  # True

class C1(object):
    a = 100
    b = 100
    c = 1000
    d = 1000


class C2(object):
    a = 100
    b = 1000


print(C1.a is C1.b)  # True
print(C1.a is C2.a)  # True
print(C1.c is C1.d)  # True
print(C1.b is C2.b)  # False

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是使用Python爬取双色球数据的示例代码: ```python import requests from bs4 import BeautifulSoup url = 'http://datachart.500.com/ssq/history/newinc/history.php?start=21001&end=21100' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') table = soup.find('table', {'class': 't_tr1'}) for row in table.find_all('tr')[2:]: cells = row.find_all('td') date = cells[0].get_text() red_balls = [cell.get_text() for cell in cells[1:7]] blue_ball = cells[7].get_text() print(date, red_balls, blue_ball) ``` 这段代码会从“http://datachart.500.com/ssq/history/newinc/history.php?start=21001&end=21100”这个网址上爬取双色球历史数据,包括日期、红球和蓝球,然后将数据打印输出。请注意,如果需要爬取不同期数的数据,请相应地更改URL中的“start”和“end”参数。 ### 回答2: 以下是一个使用Python爬取双色球数据的示例代码: ```python import requests from bs4 import BeautifulSoup # 设置请求头部信息,模拟浏览器访问 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"} # 发送GET请求获取双色球数据页面 url = "http://www.cwl.gov.cn/cwl_admin/kjxx/findKjxx/forIssue?name=ssq&code=&issueCount=100" response = requests.get(url, headers=headers) # 解析网页内容 soup = BeautifulSoup(response.text, "html.parser") # 定位双色球数据所在的表格 table = soup.find("table") # 获取表格的所有行 rows = table.find_all("tr") # 遍历每一行并提取数据 for row in rows: # 获取当前行的所有单元格 cells = row.find_all("td") # 检查是否为数据行 if len(cells) == 10: # 提取开奖日期、期号和中奖号码等信息 date = cells[0].text.strip() issue = cells[1].text.strip() numbers = cells[2].text.strip().split() reds = numbers[:6] blue = numbers[6] sales = cells[3].text.strip() pool = cells[4].text.strip() # 打印提取的数据 print(f"开奖日期:{date}") print(f"期号:{issue}") print(f"红色球号码:{reds}") print(f"蓝色球号码:{blue}") print(f"销售额:{sales}") print(f"奖金额:{pool}") print("====================") ``` 此代码使用requests库发起GET请求,使用BeautifulSoup库解析网页内容,并从中提取所需数据。具体步骤包括: 1. 导入所需的库:requests用于发送HTTP请求,BeautifulSoup用于解析网页内容。 2. 设置请求头部信息,模拟浏览器访问。 3. 发送GET请求获取双色球数据页面的HTML源代码。 4. 使用BeautifulSoup解析HTML源代码。通过查找特定的HTML元素和属性,定位双色球数据所在的表格。 5. 遍历表格的每一行,并提取相关数据。根据表格结构,通过查找特定的HTML元素,选取数据所在的单元格。 6. 打印提取的数据。 请注意,此代码仅为示例,实际应用中需要根据实际情况进行相应的修改和优化。 ### 回答3: 当然,下面是一个使用Python代码示例来爬取双色球数据的例子: ```python import requests from bs4 import BeautifulSoup # 定义要爬取的网页地址 url = 'http://www.lottery.gov.cn/historykj/history_1.jspx?_ltype=dlt' # 发送HTTP请求,获取网页内容 response = requests.get(url) html_content = response.text # 使用BeautifulSoup解析网页内容 soup = BeautifulSoup(html_content, 'html.parser') # 找到双色球数据所在的表格 table = soup.find('table', {'class': 'kj_tablelist02'}) # 遍历表格中的每一行 for row in table.find_all('tr')[1:]: # 提取开奖日期和开奖号码 date = row.find_all('td')[0].text.strip() numbers = [i.text for i in row.find_all('em')] # 输出结果 print('开奖日期:', date) print('开奖号码:', ' '.join(numbers)) print('---') ``` 这段代码使用了第三方库requests和BeautifulSoup来发送HTTP请求并解析网页内容。首先,我们定义了要爬取的双色球数据的网页地址,并发送GET请求获取网页内容。然后,使用BeautifulSoup来解析网页内容。 在网页中,双色球数据所在的表格具有`kj_tablelist02`类。我们使用`find`方法找到该表格,并使用`find_all`方法遍历表格中的每一行。对于每一行,我们提取开奖日期和开奖号码,并使用`print`语句输出结果。 注意,这只是一个简单的示例代码,你可能需要根据实际情况进行适当的修改和优化。另外,网页的结构可能随时变化,所以你需要根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值