To be pythonic

第一章 引言

  •  C ? X: Y ===> X if C else Y
  • 将常量集中到一个文件中
  • 函数
(1)调用者在上,被调用者在下
(2)尽量短小,嵌套层次不宜过深
(3)一个函数只做一件事,保证函数语句力度的一致性
  • 代码过长
超过的部分用圆括号、方括号和花括号进行连接,并保持行链接的元素垂直对齐
  •  关于注释
(1)  注释是用来解释代码功能、原因及想法的而不是代码本身
(2)  给外部可访问的函数和方法添加文档注释,说明功能,参数,返回值及可能发生的异常值。外部调用人员查看docstring
(3)  删除而不是注释掉无用的代码,利用git找回被删除的代码
  • 空格的使用
(1)函数定义或类定义之间空两行,类定义与第一个方法之间、或者需要进行语意分割的地方空一行
(2)需要空格:赋值、比较、布尔运算 (=,==,>,<,!=,in,not in,is,is not,and, or, not)、强调前面的操作符
(3)不需要空格:逗号和分号前、函数名与左括号间、序列操作时序列名和[]之间、函数的默认参数两侧

第二章 编程惯用法

  • 枚举的几种替代方式
(1)类属性(支持无意义的操作)
(2)函数
(3) collections.namedtuple(允许枚举值重复)
(4)可以使用第三方模块flufl.enum
  • 浮点数
(1)涉及除法操作时先尽量将操作数转换为浮点类型再做运算
(2)浮点数只能接近不能精确表示,避免i==1.35这种表达式,或者 指定精度
  • 索引和值
(1)使用enumerate(seq)获取序列迭代的索引和值,seq可以时list、set、可迭代对象
(2)对于字典还是使用iteritems
  • 判断两个对象相等应该使用==而不是is
  • 考虑兼容性尽可能使用Unicode
(1)有中文的程序则在头文件制定编码方式

# coding=utf8

# !/usr/bin/python
# -*-coding: utf8 -*-

(2)对于中文字符,为了做到不同系统之间的兼容,建议直接使用Unicode表示方式
(3)利用unicode_literals自动将定义的普通字符识别为Unicode字符串
from __future__ import <span style="font-family: Arial, Helvetica, sans-serif;">unicode_literals</span>

In [5]: s = "中文字符"

In [6]: s
Out[6]: u'\u4e2d\u6587\u5b57\u7b26'

s += "Chinese character"

In [8]: s
Out[8]: u'\u4e2d\u6587\u5b57\u7b26Chinese character'

  • 构建合理的包层次来管理module
1. 包(就是目录)的构成:python文件(就是模块)+__init__.py,通过包名.模块名进行访问
2. __init__.py的作用:
(1)区分包和普通目录;
(2)在该文件中申明模块级别的import语句从而使其变成包级别可见.
比如有如下关系的包结构:
Package/ __init__.py
        Module1.py
        Module2.py
        Subpackage/ __init__.py
                 Module1.py
#Module1.py
class Apple:
        
        def __init__(self, id):
                self.id = id

如果要使用Apple类,当__init__.py文件为空时,要使用完整路径申明import语句:
from Package.Module1 import Apple
但是可以通过在__init__.py文件中添加语句,则可以直接通过Package导入类Apple:
#<span style="font-family: Arial, Helvetica, sans-serif;">__init__.py</span>

from Module1 import Apple
#直接通过Package导入类Apple
from Package import Apple
(3)通过在__init__.py中定义__all__变量,控制需要导入的子包或者模块
#__init__.py
__all__ = ['Module1', 'Module2', 'Subpackage']

再运行 from Package import *, 可以看到__all__变量中定义的模块和包被导入到当前名字空间。


3.使用包带来的便利:
(1)将关系密切的模块组成一个包,完善项目结构,增强代码可维护性和实用性;
(2)在嵌套的包结构中,每一个模块都以其所在的完整路径作为其前缀,因此即使名称一样,不同包下的模块也不会冲突
import Package.Module2
import Package.Subpackage.Module2





第四章 库

4.1 按需选择sort()或者sorted()

1. sort()作用于列表,直接修改原有列表,消耗内存少,效率高
2. sorted作用于可迭代对象,返回一个新的对象
3.利用sorted对不同数据结构进行排序
  • 对字典进行排序
from operator import itemgetter

phonebook = {'Emma': '9786', 'Sharon': '1871', 'Atina': '1094'}

sorted_pb = sorted(phonebook.iteritems(), key=itemgetter(1))

print sorted_pb
[('Atina', '1094'), ('Sharon', '1871'), ('Emma', '9786')]

  • 多维list排序
In [6]: result = [['Bob', 95.0, 'A'], ['Amy', 96.0, 'A'], ['Tom', 86.0, 'C'], ['Nann', 86.0, 'E']]

In [7]: sorted(result, key=itemgetter(1,2)) 
Out[7]: 
[['Tom', 86.0, 'C'],
 ['Nann', 86.0, 'E'],
 ['Bob', 95.0, 'A'],
 ['Amy', 96.0, 'A']]

In [8]: sorted(result, key=itemgetter(1,2), reverse=True)
Out[8]: 
[['Amy', 96.0, 'A'],
 ['Bob', 95.0, 'A'],
 ['Nann', 86.0, 'E'],
 ['Tom', 86.0, 'C']]

  • 字典的value是list排序
In [9]: mydict = {'Li':['M',7],'Zhang':['E',2],'Wang':['P',2],'Ma':['C',9],'Du':['C',2]}

In [10]: sorted(mydict.iteritems(), key=lambda (k,v): itemgetter(1)(v))
Out[10]: 
[('Du', ['C', 2]),
 ('Zhang', ['E', 2]),
 ('Wang', ['P', 2]),
 ('Li', ['M', 7]),
 ('Ma', ['C', 9])]



深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值