Python编程从入门到实践-读书笔记(下)

简介: 基础知识重点摘录字符串在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。这种灵活性让你能够在字符串中包含引号和撇号:

该编写什么样的注释

  • 编写注释的主要目的是阐述代码要做什么,以及是如何做的。
  • 你总是可以通过研究代码来确定各个部分的工作原理,但通过编写注释,以清晰的自然语言对解决方案进行概述,可节省很多时间。
  • 编写有意义的注释。如果不确定是否要编写注释,就问问自己,找到合理的解决方案前,是否考虑了多个解决方案。如果答案是肯定的,就编写注释对你的解决方案进行说明吧。
  • 相比回过头去再添加注释,删除多余的注释要容易得多。

Python 之禅

过于强调灵活性会导致大型项目难以维护:要通过研究代码搞清楚当时解决复杂问题的人是怎么想的,既困难又麻烦,还会耗费大量的时间。经验丰富的程序员倡导尽可能避繁就简。 Python社区的理念都包含在Tim Peters撰写的“Python之禅”中。通过如下方式获取即可:

>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly. # 编程是要解决问题的,设计良好、高效而漂亮的解决方案都会让程序员心生敬意。
Simple is better than complex. # 如果有两个解决方案,一个简单,一个复杂,但都行之有效,就选择简单的解决方案吧。这样,你编写的代码将更容易维护,你或他人以后改进这些代码时也会更容易。
Complex is better than complicated. # 现实是复杂的,有时候可能没有简单的解决方案。在这种情况下,就选择最简单可行的解决方案。
Readability counts. # 即便是复杂的代码,也要让它易于理解。开发的项目涉及复杂代码时,一定要为这些代码编写有益的注释。
Now is better than never. # 不要企图编写完美无缺的代码;先编写行之有效的代码,再决定是对其做进一步改进,还是转而去编写新代码。
...
复制代码


函数编写指南

  • 应给函数指定描述性名称,且只在其中使用小写字母和下划线。描述性名称可帮助你和别人明白代码想要做什么。给模块命名时也应遵循上述约定。
  • 每个函数都应包含简要地阐述其功能的注释,该注释应紧跟在函数定义后面,并采用文档字符串格式。文档良好的函数让其他程序员只需阅读文档字符串中的描述就能够使用它。
  • 形参指定默认值时,等号两边不要有空格:def function_name(parameter_0, parameter_1='default value')
  • 对于函数调用中的关键字实参,也应遵循这种约定:function_name(value_0, parameter_1='value')
  • 如果形参很多,导致函数定义的长度超过了79字符,可在函数定义中输入左括号后按回车键,并在下一行按两次Tab键,从而将形参列表和只缩进一层的函数体区分开来。
  • 所有的import语句都应放在文件开头,唯一例外的情形是,在文件开头使用了注释来描述整个程序。

类编码风格

  • 类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。
  • 对于每个类,都应紧跟在类定义后面包含一个文档字符串。这种文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定。每个模块也都应包含一个文档字符串,对其中的类可用于做什么进行描述。
  • 可使用空行来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。
  • 需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import语句,再添加一个空行,然后编写导入你自己编写的模块的import语句。在包含多条import语句的程序中,这种做法让人更容易明白程序使用的各个模块都来自何方。

重构

将代码划分为一系列完成具体工作的函数。这样的过程被称为重构。重构让代码更清晰、更易于理解、更容易扩展。


项目部分重点摘录


游戏项目:外星人入侵

规划项目

开发大型项目时,做好规划后再动手编写项目很重要。规划可确保你不偏离轨道,从而提高项目成功的可能性。

依赖库:Pygame

在Pygame中,颜色是以RGB值指定的。这种颜色由红色、绿色和蓝色值组成,其中每个值的可能取值范围都为0~255。颜色值(255, 0, 0)表示红色, (0, 255, 0)表示绿色,而(0, 0, 255)表示蓝色。通过组合不同的RGB值,可创建1600万种颜色。

编写一个名为settings的模块,其中包含一个名为Settings的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。这样,我们就能传递一个设置对象,而不是众多不同的设置。

在大型项目中,经常需要在添加新代码前重构既有代码。重构旨在简化既有代码的结构,使其更容易扩展。

一开始将代码编写得尽可能简单,并在项目越来越复杂时进行重构。

研究既有代码,确定实现新功能前是否要进行重构。


数据可视化项目

依赖库:

  • matplotlib:它是一个数学绘图库,我们将使用它来制作简单的图表,如折线图和散点图。
  • Pygal:它专注于生成适合在数字设备上显示的图表。通过使用Pygal, 可在用户与图表交互时突出元素以及调整其大小,还可轻松地调整整个图表的尺寸,使其适合在微型智能手表或巨型显示器上显示。


matplotlib

  • 折线图plt.plot(input_values, squares, linewidth=5)
  • 散点图plt.scatter(x_values, y_values, s=100)
  • 使用颜色映射plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolor='none', s=40),颜色映射(colormap)是一系列颜色,它们从起始颜色渐变到结束颜色。
  • 自动保存图表plt.savefig('squares_plot.png', bbox_inches='tight'),其中:第二个实参指定将图表多余的空白区域裁剪掉。如果要保留图表周围多余的空白区域,可省略这个实参。
  • 隐藏坐标轴:plt.axes().get_xaxis().set_visible(False)
  • 设置绘图窗口的尺寸:plt.figure(dpi=128, figsize=(10, 6)),其中:形参figsize指定一个元组,向matplotlib指出绘图窗口的尺寸,单位为英寸。如果你知道自己的系统的分辨率,可使用形参dpi向figure()传递该分辨率,以有效地利用可用的屏幕空间。
  • 给图表区域着色plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
  • 绘制斜的日期标签fig.autofmt_xdate(),以免它们彼此重叠。

pygal

使用 Python 可视化包Pygal来生成可缩放的矢量图形文件。

如果你打算以在线方式使用图表,请考虑使用Pygal来生成它们,这样它们在任何设备上显示时都会很美观。

  • 绘制直方图 hist = pygal.Bar()

Pygal使用的国别码存储在模块i18n(internationalization的缩写)中。字典COUNTRIES包含的键和值分别为两个字母的国别码和国家名。

Pygal提供了图表类型Worldmap,可帮助你制作呈现各国数据的世界地图。

datetime

字符串转日期对象示例:

from datetime import datetime
first_date = datetime.strptime('2014-7-1', '%Y-%m-%d')
print(first_date)
复制代码


模块datetime中设置日期和时间格式的实参:

  • %A 星期的名称,如Monday
  • %B 月份名,如January
  • %m 用数字表示的月份( 01~12)
  • %d 用数字表示月份中的一天( 01~31)
  • %Y 四位的年份,如2015
  • %y 两位的年份,如15
  • %H 24小时制的小时数( 00~23)
  • %I 12小时制的小时数( 01~12)
  • %p am或pm
  • %M 分钟数( 00~59)
  • %S 秒数( 00~61)

两种常见格式存储的数据:CSV和JSON

读取 CSV 格式数据:

import csv
# 从文件中获取最高气温
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    highs = []
    for row in reader:
        highs.append(row[1])
    print(highs)
复制代码


读取 JSON 格式数据:

import json
# 将数据加载到一个列表中
filename = 'population_data.json'
with open(filename) as f:
    pop_data = json.load(f)
# 打印每个国家2010年的人口数量
for pop_dict in pop_data:
    if pop_dict['Year'] == '2010':
        country_name = pop_dict['Country Name']
        population = int(float(pop_dict['Value']))
        print(country_name + ": " + population)
复制代码


Python不能直接将包含小数点的字符串转换为整数,为消除这种错误,我们需要先将字符串转换为浮点数,再将浮点数转换为整数。

requests

接口请求示例:

import requests
# 执行API调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code:", r.status_code)
# 将API响应存储在一个变量中
response_dict = r.json()
# 处理结果
print(response_dict.keys())
复制代码


WEB应用程序项目

制定规范

完整的规范详细说明了项目的目标,阐述了项目的功能,并讨论了项目的外观和用户界面。与任何良好的项目规划和商业计划书一样,规范应突出重点,帮助避免项目偏离轨道。

对网站管理员隐藏有些敏感信息。例如, Django并不存储你输入的密码,而存储从该密码派生出来的一个字符串——散列值。每当你输入密码时, Django都计算其散列值,并将结果与存储的散列值进行比较。如果这两个散列值相同,就通过了身份验证。通过存储散列值,即便黑客获得了网站数据库的访问权,也只能获取其中存储的散列值,而无法获得密码。在网站配置正确的情况下,几乎无法根据散列值推导出原始密码。


在大型项目中,通常有一个用于整个网站的父模板——base.html,且网站的每个主要部分都有一个父模板。每个部分的父模板都继承base.html,而网站的每个网页都继承相应部分的父模板。这让你能够轻松地修改整个网站的外观、网站任何一部分的外观以及任何一个网页的外观。这种配置提供了一种效率极高的工作方式,让你乐意不断地去改进网站。

Django根据settings.py中设置SECRET_KEY的值来实现大量的安全协议。在这个项目中,我们提交到仓库的设置文件包含设置SECRET_KEY。对于生产网站,应更细致地处理设置SECRET_KEY。如果你创建的项目的用途很重要,务必研究如何更安全地处理设置SECRET_KEY。

附录重点摘录-寻求帮助

每个人学习编程时都会遇到困难,因此作为程序员,需要学习的最重要的技能之一是如何高效地摆脱困境

第一步:判断形势。

明确回答三个问题

你必须能够明确地回答如下三个问题,才能够从他人那里获得帮助。

  1. 你想要做什么?(陈述足够详细,让Python社区的其他人员能够施以援手)
  2. 你已尝试哪些方式?(你的答案应提供足够多的细节,这样别人就不会建议你去重复已经尝试过的方式)
  3. 结果如何?(知道准确的错误消息对在线搜索解决方案或寻求帮助很有用)

有时候,通过回答这三个问题,你会发现遗漏了什么,从而无需再做其他的事情就能摆脱困境。


再试试

有时候,只需回过头去重新来一次,就足以解决很多问题。

歇一会儿

如果你很长时间内一直在试图解决同一个问题,那么休息一会儿实际上是你可采取的最佳战术。长时间从事一个任务时,你可能变得一根筋,脑子里想的都是一个解决方案。你对所做的假设往往会视而不见,而休息一会儿有助于你从不同的角度看问题。不用休息很长时间,只需让你能够摆脱当前的思维方式就行。如果你坐了很长时间,起来做做运动。溜达溜达或去外面待一会儿,也可以喝杯水,或者吃点清淡而健康的零食。

如果你心情沮丧,也许该将工作放到一边,整天都不考虑了。晚上睡个好觉后,你常常会发现问题并不是那么难解决。

第二步:在线搜索

良好的搜索技能和具体的关键字有助于你找到现有的资源,供你用来解决当前面临的问题。

搜索计算机显示的错误消息也极有帮助。

第三步:IRC

程序员可通过IRC( Internet Relay Chat)实时地交流。如果你被问题困住,那么在网上搜索也找不到答案,那么在相关的IRC频道( channel)中寻求帮助可能是最佳选择。出没在这些频道中的人大多彬彬有礼、乐于助人,在你能够详细地描述你想做什么、尝试了哪些方法以及这些方法的结果时尤其如此。


经验

  • 要理解新的编程概念,最佳的方式是尝试在程序中使用它们。
  • 作为新手,最值得养成的习惯之一是,在代码中编写清晰、简洁的注释。
  • 有时候,使用临时变量会让代码更易读;而在其他情况下,这样做只会让代码无谓地变长。你首先应该考虑的是,编写清晰易懂且能完成所需功能的代码;等到审核代码时,再考虑采用更高效的方法。
  • 一开始应让代码结构尽可能简单。先尽可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类移到独立的模块中。如果你喜欢模块和文件的交互方式,可在项目开始时就尝试将类存储到模块中。先找出让你能够编写出可行代码的方式,再尝试让代码更为组织有序。
  • 每个函数都执行单一而清晰的任务。
相关文章
|
7天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
5天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
5天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
6天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
|
6天前
|
消息中间件 分布式计算 并行计算
Python 高级编程与实战:构建分布式系统
本文深入探讨了 Python 中的分布式系统,介绍了 ZeroMQ、Celery 和 Dask 等工具的使用方法,并通过实战项目帮助读者掌握这些技术。ZeroMQ 是高性能异步消息库,支持多种通信模式;Celery 是分布式任务队列,支持异步任务执行;Dask 是并行计算库,适用于大规模数据处理。文章结合具体代码示例,帮助读者理解如何使用这些工具构建分布式系统。
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
|
存储 关系型数据库 编译器
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
137 1
|
存储 算法 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
108 1
|
存储 算法 Java
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)
|
安全 Java C++
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(上)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计

热门文章

最新文章