前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于“Python”的核心知识点整理大全50

关于“Python”的核心知识点整理大全50

作者头像
用户10920956
发布2024-01-19 09:16:40
960
发布2024-01-19 09:16:40
举报
文章被收录于专栏:lzylzy

GitHub的API返回有关每个仓库的大量信息:repo_dict包含68个键(见)。通过仔细查看 这些键,可大致知道可提取有关项目的哪些信息(要准确地获悉API将返回哪些信息,要么阅读 文档,要么像此处这样使用代码来查看这些信息)。 下面来提取repo_dict中与一些键相关联的值: python_repos.py

代码语言:javascript
复制
--snip--
# 研究有关仓库的信息
repo_dicts = response_dict['items']
print("Repositories returned:", len(repo_dicts))
# 研究第一个仓库
repo_dict = repo_dicts[0]
print("\nSelected information about first repository:")
1 print('Name:', repo_dict['name'])
2 print('Owner:', repo_dict['owner']['login'])
3 print('Stars:', repo_dict['stargazers_count'])
print('Repository:', repo_dict['html_url'])
4 print('Created:', repo_dict['created_at'])
5 print('Updated:', repo_dict['updated_at'])
print('Description:', repo_dict['description'])

在这里,我们打印了表示第一个仓库的字典中与很多键相关联的值。在1处,我们打印了项 目的名称。项目所有者是用一个字典表示的,因此在2处,我们使用键owner来访问表示所有者 的字典,再使用键key来获取所有者的登录名。在3处,我们打印项目获得了多少个星的评级, 以及项目在GitHub仓库的URL。接下来,我们显示项目的创建时间(见4)和最后一次更新的时 间(见5)。最后,我们打印仓库的描述。输出类似于下面这样:

代码语言:javascript
复制
Status code: 200
Total repositories: 713065
Repositories returned: 30
Selected information about first repository:
Name: httpie
Owner: jkbrzt
Stars: 16101
Repository: https://github.com/jkbrzt/httpie
Created: 2012-02-25T12:39:13Z
Updated: 2015-07-13T14:56:41Z
Description: CLI HTTP client; user-friendly cURL replacement featuring intuitive UI, JSON support,
syntax highlighting, wget-like downloads, extensions, etc. 

从上述输出可知,编写本书时,GitHub上星级最高的Python项目为HTTPie,其所有者为用户 jkbrzt,有16 000多个GitHub用户给这个项目加星。我们可以看到这个项目的仓库的URL,其创建 时间为2012年2月,且最近更新了。最后,描述指出HTTPie用于帮助从终端执行HTTP调用(CLI 是命令行界面的缩写)。

17.1.6 概述最受欢迎的仓库

对这些数据进行可视化时,我们需要涵盖多个仓库。下面就来编写一个循环,打印API调用 返回的每个仓库的特定信息,以便能够在可视化中包含所有这些信息: python_repos.py

代码语言:javascript
复制
--snip--
# 研究有关仓库的信息
repo_dicts = response_dict['items']
print("Repositories returned:", len(repo_dicts))
1 print("\nSelected information about each repository:")
2 for repo_dict in repo_dicts:
 print('\nName:', repo_dict['name'])
 print('Owner:', repo_dict['owner']['login'])
 print('Stars:', repo_dict['stargazers_count'])
 print('Repository:', repo_dict['html_url'])
 print('Description:', repo_dict['description']) 

在1处,我们打印了一条说明性消息。在2处,我们遍历repo_dicts中的所有字典。在这个 循环中,我们打印每个项目的名称、所有者、星级、在GitHub上的URL以及描述:

代码语言:javascript
复制
Status code: 200
Total repositories: 713067
Repositories returned: 30
Selected information about each repository:
Name: httpie
Owner: jkbrzt
Stars: 16101
Repository: https://github.com/jkbrzt/httpie
Description: CLI HTTP client; user-friendly cURL replacement featuring intuitive UI, JSON support,
syntax highlighting, wget-like downloads, extensions, etc.
Name: django
Owner: django
Stars: 15028
Repository: https://github.com/django/django
Description: The Web framework for perfectionists with deadlines.
--snip--
Name: powerline
Owner: powerline
Stars: 4315
Repository: https://github.com/powerline/powerline
Description: Powerline is a statusline plugin for vim, and provides statuslines and prompts for several
other applications, including zsh, bash, tmux, IPython, Awesome and Qtile. 

上述输出中有一些有趣的项目,可能值得再看一眼。但不要在这上面花费太多时间,因为我 们即将创建的可视化可让你更容易地看清结果。

17.1.7 监视 API 的速率限制

大多数API都存在速率限制,即你在特定时间内可执行的请求数存在限制。要获悉你是否接近了GitHub的限制,请在浏览器中输入https://api.github.com/rate_limit,你将看到类似于下面的响应:

代码语言:javascript
复制
{
 "resources": {
 "core": {
 "limit": 60,
 "remaining": 58,
 "reset": 1426082320
 },
1 "search": {
2 "limit": 10,
3 "remaining": 8,
4 "reset": 1426078803
 }
 },
 "rate": {
 "limit": 60,
 "remaining": 58,
 "reset": 1426082320
 }
} 

我们关心的信息是搜索API的速率限制(见1)。从2处可知,极限为每分钟10个请求,而在 当前这一分钟内,我们还可执行8个请求(见3)。reset值指的是配额将重置的Unix时间或新纪 元时间(1970年1月1日午夜后多少秒)(见4)。用完配额后,你将收到一条简单的响应,由此知 道已到达API极限。到达极限后,你必须等待配额重置。


注意

很多API都要求你注册获得API密钥后才能执行API调用。编写本书时,GitHub没有这样 的要求,但获得API密钥后,配额将高得多。


17.2 使用 Pygal 可视化仓库

有了一些有趣的数据后,我们来进行可视化,呈现GitHub上Python项目的受欢迎程度。我们 将创建一个交互式条形图:条形的高度表示项目获得了多少颗星。单击条形将带你进入项目在 GitHub上的主页。下面是首次尝试这样做: python_repos.py

代码语言:javascript
复制
import requests
import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
# 执行API调用并存储响应
URL = 'https://api.github.com/search/repositories?q=language:python&sort=star'
r = requests.get(URL)
print("Status code:", r.status_code) 
# 将API响应存储在一个变量中
response_dict = r.json()
print("Total repositories:", response_dict['total_count'])
# 研究有关仓库的信息
repo_dicts = response_dict['items']
1 names, stars = [], []
for repo_dict in repo_dicts:
2 names.append(repo_dict['name'])
stars.append(repo_dict['stargazers_count'])
# 可视化
3 my_style = LS('#333366', base_style=LCS)
4 chart = pygal.Bar(style=my_style, x_label_rotation=45, show_legend=False)
chart.title = 'Most-Starred Python Projects on GitHub'
chart.x_labels = names
5 chart.add('', stars)
chart.render_to_file('python_repos.svg') 

我们首先导入了pygal以及要应用于图表的Pygal样式。接下来,打印API调用响应的状态以 及找到的仓库总数,以便获悉API调用是否出现了问题。我们不再打印返回的有关项目的信息, 因为将通过可视化来呈现这些信息。 在1处,我们创建了两个空列表,用于存储将包含在图表中的信息。我们需要每个项目的名 称,用于给条形加上标签,我们还需要知道项目获得了多少个星,用于确定条形的高度。在循环 中,我们将项目的名称和获得的星数附加到这些列表的末尾2。 接下来,我们使用LightenStyle类(别名LS)定义了一种样式,并将其基色设置为深蓝色(见 3)。我们还传递了实参base_style,以使用LightColorizedStyle类(别名LCS)。然后,我们使用 Bar()创建一个简单的条形图,并向它传递了my_style(见4)。我们还传递了另外两个样式实参: 让标签绕x轴旋转45度(x_label_rotation=45),并隐藏了图例(show_legend=False),因为我们 只在图表中绘制一个数据系列。接下来,我们给图表指定了标题,并将属性x_labels设置为列表 names。 由于我们不需要给这个数据系列添加标签,因此在5处添加数据时,将标签设置成了空字符 串。生成的图表如图17-1所示。从中可知,前几个项目的受欢迎程度比其他项目高得多,但所有 这些项目在Python生态系统中都很重要。

17.2.1 改进 Pygal 图表

下面来改进这个图表的样式。我们将进行多个方面的定制,因此先来稍微调整代码的结构, 创建一个配置对象,在其中包含要传递给Bar()的所有定制: python_repos.py

代码语言:javascript
复制
--snip--
# 可视化
my_style = LS('#333366', base_style=LCS)
1 my_config = pygal.Config()
2 my_config.x_label_rotation = 45
my_config.show_legend = False
3 my_config.title_font_size = 24
my_config.label_font_size = 14
my_config.major_label_font_size = 18
4 my_config.truncate_label = 15
5 my_config.show_y_guides = False
6 my_config.width = 1000
7 chart = pygal.Bar(my_config, style=my_style)
chart.title = 'Most-Starred Python Projects on GitHub'
chart.x_labels = names
chart.add('', stars)
chart.render_to_file('python_repos.svg')

在1处,我们创建了一个Pygal类Config的实例,并将其命名为my_config。通过修改my_config 的属性,可定制图表的外观。在2处,我们设置了两个属性——x_label_rotation和show_legend, 它们原来是在创建Bar实例时以关键字实参的方式传递的。在3处,我们设置了图表标题、副标 签和主标签的字体大小。在这个图表中,副标签是x轴上的项目名以及y轴上的大部分数字。主标 签是y轴上为5000整数倍的刻度;这些标签应更大,以与副标签区分开来。在4处,我们使用 truncate_label将较长的项目名缩短为15个字符(如果你将鼠标指向屏幕上被截短的项目名,将 显示完整的项目名)。接下来,我们将show_y_guides设置为False,以隐藏图表中的水平线(见5)。 最后,在处设置了自定义宽度,让图表更充分地利用浏览器中的可用空间。 在7处创建Bar实例时,我们将my_config作为第一个实参,从而通过一个实参传递了所有的 配置设置。我们可以通过my_config做任意数量的样式和配置修改,而7处的代码行将保持不变。 图17-2显示了重新设置样式后的图表。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 17.1.6 概述最受欢迎的仓库
  • 17.1.7 监视 API 的速率限制
  • 注意
    • 17.2 使用 Pygal 可视化仓库
      • 17.2.1 改进 Pygal 图表
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档