python3进阶-微课学习-第四章 Pythonicness & Packaging

Python之禅

Python 中的一些行可能需要更多的解释。
找到简单问题的一个方法,最好是唯一的方法(正确的解决之道)。

难以解释的实现,源自不好的主意;如有非常棒的主意,它的实现肯定易于解释。

显式比隐式更好:最好准确地说明你的代码在做什么。这就是为什么向一个整数添加一个数字字符串需要显式的转换,而不是像在其他语言中那样在后台进行。
应该避免重复嵌套的结构。
错误不应该默默地传递:一般来说,当发生错误时,应该输出某种错误消息,而不是忽略它

PEP

Python 增强建议(Python Enhancement Proposals,PEP)是由经验丰富的 Python 开发人员对语言进行改进的建议。
PEP8 是Python官方提出的:Style Guide for Python Code,是社区规范。

它包含了许多关于变量名称的指导原则,这些概括在这里:

  • 模块命名尽量短小,使用全部小写的方式,可以使用下划线;

  • 类名应该是首字母大写 (CapWords) 风格,模块内部使用的类采用_CapWords的方式;

  • 函数命名使用全部小写的方式,可以使用下划线;

  • 常量命名使用全部大写的方式,可以使用下划线;

  • 类的属性若与关键字名字冲突,后缀一下划线,尽量不要使用缩略等其他方式。

空格的使用
PEP 8 还建议在操作符周围使用空格,并使用逗号来提高可读性。

总体原则,避免不必要的空格。
1 各种右括号前不要加空格。
2 逗号、冒号、分号前不要加空格。
3 函数的左括号前不要加空格。如Func(1)。
4 序列的左括号前不要加空格。如list[2]。
5 操作符左右各加一个空格,不要为了对齐增加空格。
6 函数默认参数使用的赋值符左右省略空格。
7 不要将多句语句写在同一行,尽管使用‘;’允许。
8 if/for/while语句中,即使执行语句只有一句,也必须另起一行。

其他PEP 8建议包括以下内容:

  • 行不得超过80个字符;
  • 应避免“从模块导入*”;
  • 每行只能有一条语句。

它还建议您使用空格而不是制表符来缩进。但是,这在一定程度上是个人喜好的问题。如果你使用空格,每行只能使用4个。选择一个并坚持下去更重要。
但总的来说,遵循 PEP 8 将大大提高代码的质量

函数参数

Python 允许具有不同数量的参数的函数。
使用 *args 作为函数参数,可以将任意数量的参数传递给该函数。参数可以作为函数主体中的元组参数访问。
例如:

def function(named_arg, *args):
   print(named_arg)
   print(args)

function(1, 2, 3, 4, 5)
1
(2, 3, 4, 5)

参数 *args 必须位于命名参数之后。
名字 args 只是一个惯例,你可以选择使用另一个自定义的名字
在这里插入图片描述

默认值

给函数指定的参数可以通过给它们一个默认值使其成为可选的参数。
指定默认值的参数,必须在未指定默认值参数之后。

例如:

def function(x, y, fruit="apple"):
   print(fruit)

function(1, 2)
function(3, 4, "banana")
apple
banana

在传入参数的情况下,默认值将被忽略。
如果参数未传入,则使用默认值
在这里插入图片描述
**kwargs(代表关键字参数)允许你处理尚未预先定义的命名参数。
关键字参数返回一个字典,其中键是参数名称,值是参数数值。

例如:

def my_func(x, y=7, *args, **kwargs):
   print(kwargs)

my_func(2, 3, 4, 5, 6, a=7, b=8)
{'a': 7, 'b': 8}

a 和 b 是我们传递给函数调用的参数的名称。
**kwargs 返回的参数不包含在 *args 中
在这里插入图片描述

元组解包

元组解包允许你将一个可迭代的元素(通常是一个元组)分配给变量

numbers = (1, 2, 3)
a, b, c = numbers
print(a)
print(b)
print(c)
1
2
3

交换变量的值可以通过 a, b = b, a,因为 b, a 在右边形成元组(b, a),然后解包
在这里插入图片描述
以星号(*)开头的变量将从迭代中取出所有其他变量剩余的值。
例如:

a, b, *c, d = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a)
print(b)
print(c)
print(d)
1
2
[3, 4, 5, 6, 7, 8]
9

range(20)生成一个列表为[0,1,2,···18,19]

这个列表被a, b, c, d, e, f, g瓜分,其中a分到了0,b分到1,c分到2,d分到3,f分到18,g分到19,剩余的值分给e(以星号()开头的变量将从迭代中取出所有其他变量剩余的值。)

所以e的值为[4,5,6····16,17],共14个元素
在这里插入图片描述

三元运算符

三元运算符提供if语句的功能,同时使用较少的代码。

三元运算符不应该被过度使用,因为它可以轻易地降低可读性,但是在分配变量时它们通常是有用的。

例如:

a = 7
b = 1 if a >= 5 else 42
print(b)
1

三元运算符检查条件并返回相应的值。在上面的例子中,如果条件成立,则 b 被赋值为 1。如果 a 小于 5,则将被分配 42。
另一个例子

status  = 1
msg = "注销" if status == 1 else "登录"

三元运算符与大多数运算符不同,它有三个参数
在这里插入图片描述

else 语句

else 语句与 if 语句一起使用最为普遍,但它也可以遵循 for 或 while 循环,从而赋予它不同的含义。
使用 for 或 while 循环,如果循环正常结束(当 break 语句不会导致循环退出时),则会调用其中的代码。
例如:

for i in range(10):
   if i == 999:
      break
else:
   print("Unbroken 1")

for i in range(10):
   if i == 5:
      break
else: 
   print("Unbroken 2")
Unbroken 1

第一个 for 循环正常执行,导致打印 “Unbroken 1”。
第二个循环由于中断而退出,这就是为什么 else 语句不被执行
在这里插入图片描述
else 语句也可以和 try/except 语句一起使用。
在这种情况下,只有在 try 语句中没有发生错误时才会执行其中的代码。
例如:

try:
   print(1)
except ZeroDivisionError:
   print(2)
else:
   print(3)

try:
   print(1/0)
except ZeroDivisionError:
   print(4)
else:
   print(5)
1
3
4

在这里插入图片描述

__ main__

大多数 Python 代码是要导入的模块,或者是执行某些操作的脚本。
但是,有时将一个文件既作为模块导入也作为脚本运行是非常有用的。
为此,将脚本代码放置在 if name == “main” 中。

这确保了单独运行文件会被允许,如果文件被导入,它将不会运行。
例如:

def function():
   print("This is a module function")

if __name__=="__main__":
   print("This is a script")
This is a script

当 Python 解释器读取源文件时,它会执行它在文件中找到的所有代码。在执行代码之前,它定义了一些特殊的变量。
例如,如果 Python 解释器正在将该模块(源文件)作为主程序运行,则会将特殊的 __ name__ 变量设置为 “__ main__”。
如果这个文件是从另一个模块导入的,__ name__ 将被设置为模块的名字。
在这里插入图片描述
如果我们将前一个示例的代码保存为 w3cschool.py 文件,则可以使用 w3cschool 名称将其作为模块导入到另一个脚本中。
w3cschool.py

def function():
   print("This is a module function")

if __name__=="__main__":
   print("This is a script") 

some_script.py

import w3cschool

w3cschool.function()
This is a module function

我们创建了一个名为 w3cschool 的自定义模块,然后在另一个脚本中使用它
在这里插入图片描述

主要的第三方库

Python 标准库本身包含广泛的功能。
但是,有些任务需要使用第三方库。一些主要的第三方库:
Django:用 Python 编写的最常用的 Web 框架,Django 支持包含 Instagram 和 Disqus 的网站。它有很多有用的功能,它所缺少的功能都被扩展包所覆盖。
CherryPy 和 Flask 也是流行的 Web 框架。
为了从网站上抓取数据,BeautifulSoup 库非常有用,并且比使用正则表达式构建自己的过滤机制效果更好

Python 可以使用许多第三方模块使科学计算和数学计算变得更容易。
matplotlib 模块允许你在Python中创建基于数据的图形。
NumPy 模块允许使用比嵌套列表的本地 Python 解决方案快得多的多维数组。它还包含执行数学运算的功能,如阵列上的矩阵变换。
SciPy 库包含许多对 NumPy 的扩展。

Python 也可以用于游戏开发。
通常,它被用作用其他语言编写的游戏的脚本语言,但它可以用来自己制作游戏
3D 游戏,可以使用 Panda3D 库。2D 游戏,你可以使用 pygame

打包

在 Python 中,术语打包指的是将模块写成标准格式,以便其他程序员可以轻松安装和使用它们。
这包括使用模块 setuptools 和 distutils。
打包第一步是正确组织现有文件。将所有要放入库的文件放在同一个父目录中。
该目录还应该包含一个名为 __ init__.py 的文件,该文件可以是空白的,但必须存在于目录中。

示例目录结构:

W3Cschool/
   LICENSE.txt
   README.txt
   setup.py
   w3c/
      __init__.py
      w3cschool.py
      w3cschool2.py

可以根据需要在目录中放置尽可能多的脚本文件
__ init__.py 文件的作用是什么呢?

_ _ init__.py 最明显的作用就是使包和普通目录区分;其次可以在该文件中申明模块级别的import语句从而使其变成包级别可见

打包的下一步是编写 setup.py 文件。
这包含组装软件包所需的信息,以便将其上传到 PyPI 并使用 pip (名称,版本等)进行安装。
setup.py 文件的示例:

from distutils.core import setup

setup(
   name='W3Cschool', 
   version='0.1dev',
   packages=['w3cschool',],
   license='MIT', 
   long_description=open('README.txt').read(),
)

创建 setup.py 文件后,将其上传到 PyPI,或使用命令行创建二进制分发(可执行安装程序)。
要构建源代码发行版,请使用命令行导航到包含 setup.py 的目录,然后运行 python setup.py sdist 命令。
运行 python setup.py bdist,或者对于Windows,使用 python setup.py bdist_wininst 来构建二进制分发。
使用 python setup.py register,然后用 python setup.py sdist upload 来上传一个包。

最后,用 python setup.py install 安装一个软件包

在这里插入图片描述

为用户打包

将脚本打包为相关平台(如 Windows 或 Mac 操作系统)的可执行文件很有用。

这对于 Linux 来说不是必需的,因为大多数 Linux 用户的确已经安装了Python,并且能够像原来一样运行脚本。
对于 Windows,许多工具可用于将脚本转换为可执行文件。例如,py2exe 可用于将 Python 脚本及其所需的库打包到单个可执行文件中。
PyInstaller 和 cx_Freeze 服务于相同的目的。
Mac 使用 py2app,PyInstaller 或 cx_Freeze。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
实战:用Python3开发点餐系统
思路:

纯面向对象,理解面向对象原理 ;
点餐系统的流程: 进入界面选择套餐类按钮–>进入套餐清单–>输入份数–>去重–>结账–>打印清单–>退出系统
用pyinstaller打包生成exe文件,方便没有安装python环境的学生;
用到的知识点: 面向对象编程、列表、正则表达式、字符串函数使用、文件处理、模块使用、pyinstaller打包等;
难点:
在这里插入图片描述
在这里插入图片描述
链接:https://pan.baidu.com/s/1DB5FM5Nkn0p-BhR2ZdW2LA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值