Python 编码时应该注意的几件事情

在编程过程中,多了解语言周边的一些知识,以及一些技巧,可以让你加速成为一个优秀的程序员。

对于Python程序员,你需要注意一下本文所提到的这些事情。 你也可以看看Zen of Python(Python之禅),这里面提到了一些注意事项,并配以示例,可以帮助你快速提高。

1. 漂亮胜于丑陋

实现一个功能:读取一列数据,只返回偶数并除以2。下面的代码,哪个更好一些呢?

halve_evens_only = lambda nums: map(lambda i: i/2, filter(lambda i: not i%2, nums))

 VS

 def halve_evens_only(nums):

    return [i/2 for i in nums if not i % 2] 

2. 记住Python中非常简单的事情

# 交换两个变量
a, b = b, a

# 切片(slice)操作符中的step参数。(切片操作符在python中的原型是[start:stop:step],即:[开始索引:结束索引:步长值])
a = [1,2,3,4,5]
>>> a[::2]  # 遍历列表中增量为2的数据
[1,3,5]

# 特殊情况下,`x[::-1]`是实现x逆序的实用的方式
>>> a[::-1]
[5,4,3,2,1]

# 逆序并切片
>>> x[::-1]
[5, 4, 3, 2, 1]

>>> x[::-2]
[5, 3, 1] 

 

3. 不要使用可变对象作为默认值

def function(x, l=[]):          #不要这样

def function(x, l=None):        # 好的方式
  if l is None:
l = []

 这是因为当def声明被执行时,默认参数总是被评估。

 

4. 使用iteritems而不是items

iteritems 使用generators ,因此当通过非常大的列表进行迭代时,iteritems 更好一些。

d = {1: "1", 2: "2", 3: "3"}
for key, val in d.items()       # 当调用时构建完整的列表
for key, val in d.iteritems()   # 当请求时只调用值
 

 

5. 使用isinstance ,而不是type

# 不要这样做

if type(s) == type(""): ...
if type(seq) == list or \
type(seq) == tuple: ...

# 应该这样

if isinstance(s, basestring): ...
if isinstance(seq, (list, tuple)): ...

 原因可参阅:stackoverflow

 

注意我使用的是basestring 而不是str,因为如果一个unicode对象是字符串的话,可能会试图进行检查。例如:

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False

 这是因为在Python 3.0以下版本中,有两个字符串类型str 和unicode。

 

6. 了解各种容器

Python有各种容器数据类型,在特定的情况下,相比内置容器(如list 和dict ),这是更好的选择。

我敢肯定,大部分人不使用它。我身边一些粗心大意的人,一些可能会用下面的方式来写代码。

freqs = {}
for c in "abracadabra":
    try:
        freqs[c] += 1
    except:
        freqs[c] = 1

 也有人会说下面是一个更好的解决方案:

freqs = {}
for c in "abracadabra":
    freqs[c] = freqs.get(c, 0) + 1

 更确切来说,应该使用collection 类型defaultdict。

from collections import defaultdict
freqs = defaultdict(int)
for c in "abracadabra":
    freqs[c] += 1

 其他容器:

namedtuple()    # 工厂函数,用于创建带命名字段的元组子类
deque           # 类似列表的容器,允许任意端快速附加和取出
Counter   # dict子类,用于哈希对象计数
OrderedDict   # dict子类,用于存储添加的命令记录
defaultdict   # dict子类,用于调用工厂函数,以补充缺失的值
  

7. Python中创建类的魔术方法(magic methods)

__eq__(self, other)      # 定义 == 运算符的行为
__ne__(self, other)      # 定义 != 运算符的行为
__lt__(self, other)      # 定义 < 运算符的行为
__gt__(self, other)      # 定义 > 运算符的行为
__le__(self, other)      # 定义 <= 运算符的行为
__ge__(self, other)      # 定义 >= 运算符的行为
 

8. 必要时使用Ellipsis(省略号“...”)

Ellipsis 是用来对高维数据结构进行切片的。作为切片(:)插入,来扩展多维切片到所有的维度。例如:

>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)

# 现在,有了一个4维矩阵2x2x2x2,如果选择4维矩阵中所有的首元素,你可以使用ellipsis符号。

>>> a[..., 0].flatten()
array([ 0,  2,  4,  6,  8, 10, 12, 14])

# 这相当于

>>> a[:,:,:,0].flatten()
array([ 0,  2,  4,  6,  8, 10, 12, 14])
 

原文:a few things to remember while coding in python

手把手教你用Docker快速部署ZLMediaKit流媒体服务器(含WebRTC配置) 本文详细介绍了如何使用Docker快速部署ZLMediaKit流媒体服务器,并配置WebRTC功能。通过容器化部署,实现环境一致性、资源隔离和快速扩展,同时提供WebRTC专项配置、多协议推拉流实战测试及生产环境优化建议,帮助开发者高效搭建企业级流媒体平台。 阅读详情

相关推荐

学习海康VisionMaster之BLOB分析

6):软阈值(相对):是一种动态阈值分割方法,其核心思想是 基于图像局部特性(如背景或参考区域)自适应调整阈值范围,适用于光照变化明显、背景灰度不均的场景。3:拖入位置修正功能:这个非常重要,模版匹配成功后会得到新的匹配坐标,那和创建模版时候的原点坐标会组合成一个坐标变换矩阵,通过这个矩阵,那后续的blob分析窗口则可以实现精确定位来查找目标对象。(2):设定参数:这里阈值方式是blob的核心算法,根据不同的应用场景来选择不同的阈值方式。8:高级参数:是设定blob区域的特征范围,用于筛选出来特定的区域。

yuhouxiyang的专栏 3618

Python编程的注意事项

Python 允许我们创建自定义异常类型并引发这些异常。这通常有助于更好地组织代码,使其易于调试和维护。passtry:")

星空下的仰望者 1813

西门子 标准程序解读---> 机器手抓取和涂胶控制程序

摘要 该程序实现机械手在OP70/OP90工位的自动化控制,核心功能包括: 流程控制:分段(Seg1-Seg11)管理抓件、涂胶、放件等动作,结合DB1050/DB1250数据块监控工位状态及变位机位置反馈。 安全机制:配置干涉区(FC124)、实时检测安全光/急停信号,防止碰撞;服务程序(FB191)支持维修位触发与安全隔离。 参数配置:通过DB块关联机器人速度、节拍(FB27)、车型编码(如空过=2)及手自动模式(DB70.DBX21.2)。 应用场景:适用于汽车焊接/装配线

工控智联驿站 1238

python代码编写规范及注意事项

python代码编写规范及注意事项

weixin_46713695的博客 615

Matlab实战:用Transformer+LSTM+SVM搞定股票价格预测(附完整代码)

本文介绍了一种基于Transformer、LSTM和SVM的混合建模方法,用于股票价格预测。该方法结合了Transformer的全局依赖捕捉能力、LSTM的时序特征提取优势以及SVM的非线性回归能力,有效应对金融时间序列的非平稳性和噪声问题。文章提供了完整的Matlab实现代码,并展示了混合模型在实盘测试中的优异表现,方向预测准确率达62%,最大回撤控制在3.2%以内。

milk8的博客 254

Vivado静态时序分析学习笔记(1)

静态时序分析分为片内时序分析(寄存器与寄存器之间的时序关系)和片外时序分析(IO时序分析)。(1)建立时间 setup time在时钟事件(上升沿/下降沿)发生之前数据信号应保持稳定的时间。把实际电路抽象成前级D触发器+组合逻辑+后级D触发器。

Fantaasky的博客 4375

在什么情况下、使用python类的使用-使用Python编程时的10个注意事项

原标题:使用Python编程时的10个注意事项1、初始变化量在Python里,一个表达式中的名字在它被赋值之前是没法使用的。这是有意而为的:这样能避免一些输入失误,同时也能避免默认究竟应该是什么类型的问题(0,None,””,[],?)。记住把计数器初始化为0,列表初始化为[],以此类推。2、从第一列开始确保把顶层的,未嵌套的代码放在最左边第一列开始。这包括在模块文件中未嵌套的代码,以及在交互提示...

weixin_37988176的博客 359

Linux DRM驱动实战:手把手教你用drmModeSetCrtc显示纯色画面(附完整代码)

本文提供了一份完整的Linux DRM驱动实战指南,手把手教你使用drmModeSetCrtc在屏幕上显示纯色画面。文章详细解析了从打开设备、获取资源、创建帧缓冲区到最终提交画面的完整调用流程,并附带了可直接编译运行的完整代码示例,帮助开发者快速上手Linux图形底层开发。

weixin_29216353的博客 511

Python编程需注意的规范

Python特别重视代码的可读性,对代码的排版和布局有严格要求。下面列出了编写Python代码需掌握的规范,养成良好的编程习惯。

qq_18937049的博客 1244

Aruba无线控制器实战:如何用Client Match优化企业办公区漫游(附SNR调优技巧)

本文深入解析了如何利用Aruba无线控制器的Client Match功能优化企业办公区无线漫游体验。通过实战配置,详细阐述了基于SNR(信噪比)的精细化调优策略,包括阈值设定、负载均衡与场景化参数调整,旨在解决终端粘滞、乒乓漫游等问题,实现智能、平滑的无缝漫游。

weixin_28318011的博客 225

【汽车ECU标定技术解析】DCM文件与A2L、HEX的协同工作机制

本文深入解析了汽车ECU标定中DCM、A2L与HEX三大核心文件的协同工作机制。A2L文件作为定义标定变量地址与规则的“图纸”,DCM文件承载工程师调试后的具体标定数据,最终通过A2L的地址映射,将DCM数据固化生成可刷入ECU的HEX文件,形成完整的标定数据流转闭环。

weixin_29214559的博客 436

编写python代码的一些注意事项

1. 遵循 PEP 8:2. 使用注释:3. 有意义的命名:1. 模块化:2. 避免全局变量:3. 函数和类的设计:1. 使用 try-except 块:2. 合理使用 finally:3. 自定义异常:1. 避免不必要的计算:2. 使用内置函数和库:3. 使用生成器:4. 并行和并发:1. 编写单元测试:2. 代码调试:1. 输入验证:2. 加密敏感数据:3. 避免硬编码敏感信息:1. 使用版本控制系统:2. 代码审查:1. 编写文档:2. 注释和 docstrings:1. 避免过度工程:2. 代码复用

weixin_42333247的博客 773

【系统分析师】2026年上半年真题:论文及解题思路

四篇论文围绕系统与开发实践展开: 安全架构设计强调数据加密(国密算法)、零信任访问控制及容灾架构,以某医疗云平台为例,实现RTO<5分钟的高可用保障。 架构风格应用解析微服务/事件驱动等风格选型,结合电商平台案例,通过服务拆分与异步通信提升扩展性。 需求评审机制提出正式评审与走查结合的方法,在金融系统中减少30%返工,解决业务规则二义性问题。 LLM测试生成利用大模型从需求/代码生成用例,辅以人工校验,使测试效率提升50%,覆盖边缘场景。 各篇均遵循“背景-理论-实践”结构,突出

数据知道的博客 779

python编码注意事项_Python 编码时应该注意的几件事情

在编程过程中,多了解语言周边的一些知识,以及一些技巧,可以让你加速成为一个优秀的程序员。对于Python程序员,你需要注意一下本文所提到的这些事情。 你也可以看看Zen of Python(Python之禅),这里面提到了一些注意事项,并配以示例,可以帮助你快速提高。1. 漂亮胜于丑陋实现一个功能:读取一列数据,只返回偶数并除以2。下面的代码,哪个更好一些呢?halve_evens_only = ...

weixin_39984963的博客 126

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Python编码时应该注意的一些事情

围绕一门语言学习它的文化精髓能让你成为一名更优秀的程序员更进一步,如果你还没读过Python之禅(Zen of Python) ,那么打开Python的命令提示符输入import this,列表中的每一项你都可以在这里找个相对应的例子。 (Credit: itswater )  吸引我注意力的一条是: 优雅胜于丑陋 (Beautiful is better than ugly) 看下面例子

Jessen_Qiang的专栏 475

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

学习时Python时需要注意的几个知识点

1、第一次写代码 不要害怕这件事情,写代码,其实和写作文一样,首先需要有一个题目,然后对题目进行拆解。至于文采,也就是代码漂不漂亮就是另一回事了。相信很多读者看过很多Python基础入门的书籍,或者购买了很多Python的视频课,但还是不知道怎么写代码。其中的原因只有一个,就是编码的思路没有转变。 转变Python编码思路的唯一一个方法就是实战。只有在实战中你才能发现:代码因为少或者多了一个字母,...

python学习者的博客 1412

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python查看汉字的编码_python汉字编码

在处理一段文本的时候,首先了解文本的汉字编码。在windows下默认的文件编码是GBK,而linux的一般是utf-8.想要查看文件的编码方式,使用vim打开文本,然后在命令行模式下输入:set fileencoding,回车即可。Python中有两种默认的字符串:str和unicode。在Python中一定要注意区分“Unicode字符串”和“unicode对象”的区别。后面所有的“unicod...

weixin_35779309的博客 4804

理解和解决Python2中的编码问题

前言经常处理一些文本,处理英文语料没什么问题,但是到了中文这儿就让人抓狂了,稍微不注意就会窜出各种乱码错误,平时出现几个小错误试试调调也能过去,但是对于编码这个问题还是畏惧,这几天好好整理了一下python的编码问题,感谢万能的Google和万能的StackOverflow,算是解决了我当前对编码问题的一些困惑编码的前世今生从unicode说去在计算机中,所有的东西都是以字节形式储存的,但是字节对于

luchi007的专栏 2万+

做好Python工程师,首先你需要做好的几件事

不要浪费太多别人的时间,因为你的同事也是有开发任务的,也是有他自己的事情。千万不要把大量的时间去浪费在一个技术难点上,你可以先把这个标记一个记号,然后去做其他比较重要的事情,可以暂时跳过这个技术难点去解决其他比较重要的事情,或者是去询问一些经验比较丰富的程序员。在使用搜索引擎的时候要学会提炼关键字,提炼关键字是非常重要的,因为编程的知识体系,英文所占的比重非常高,所以你要学好英语。如果你的英语很差怎么办?如果你经过自己的努力没有完成这样的任务,那么在工作汇报的时候,你要把自己努力的过程汇报给领导。

2301_77139641的博客 1281
上一篇: 分享14个jQuery插件开发人员易犯的错误
下一篇: javascript不可用的问题探究
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值