千家信息网

Python时操作坏习惯有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Python时操作坏习惯有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。很多文章都有介绍怎么写好 Python,我今天呢,相反,
千家信息网最后更新 2026年10月31日Python时操作坏习惯有哪些

Python时操作坏习惯有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

很多文章都有介绍怎么写好 Python,我今天呢,相反,说说写代码时的几个坏习惯。有的习惯会让 Bug 变得隐蔽难以追踪,当然,也有的并没有错误,只是个人觉得不够完美。

注意:示例代码在 Python 3.6 环境下编写

1 用列表作函数的默认参数

看下面这个例子

def func(a,  b =[]):      b.append(a)      print(f'a: {a}')      print(f'b: {b}')  func(1)  func(2)

正常我们期望的结果应该是这样的

a: 1   b: [1]   a: 2   b: [2]

但当我们执行代码后,只会得到这样的结果

a: 1   b: [1]   a: 2   b: [1, 2]

与预期不一致。为什么呢?因为 Python 列表是可变对象,而且函数传参又是传的引用,所以当第二次调用 func 方法前,b 中已经有了元素 1,调用后 b 最终有两个元素 1 和 2。

示例中 func 方法比较简单,当发现问题的时候简单看下就能找到根源。但是,如果是在一个比较复杂的方法里面,你有可能会粗心的忽略这一点,从而会碰到一些莫名其妙的问题。

所以,当我们要为函数设置默认参数的时候,不要使用可变对象。

上面的代码改成这样就 OK 了

def func(a,  b = None ):     if b is None:          b  = []     b.append(a)     print(f'a: {a}')     print(f'b: {b}')

执行后得到预期结果

a: 1   b: [1]   a: 2   b: [2]


2 文件操作

很多刚接触 Python 的伙伴做文件操作的时候很容易写类似的代码

file  =  open ('file_name')    try:        for line in file:            print(line)    finally:        file.close()

这没有问题,不过文件资源我们没有必要手动去维护,像关闭这样的操作交给上下文管理器做就好。

with open('file_name') as file:       for line in file:           print(line)

这样看起来不是清爽很多。

3 捕获所有异常

try:       pass  # 做一些操作   except Exception as e:       print(f'Exception {e}')


就像上面一样,有时我们为了能够快速的完成功能,很容易不管三七二十一,就捕获 Exception 异常。这可能会捕捉到键盘中断(KeyboardInterrupt)(CTRL + C)或断言错误(AsstionError)等异常。捕获不确定的异常,有时也会让我们的程序出现莫名其妙的问题,我们应该避免这样做。

准确的做法是根据上下文捕获 ValueError 、AttributeError 、TypeError 等比较具体的异常,然后做适当的错误处理,比如打印日志等。

4 忽略 Python 的 for…else 语法

开发中我们很容易碰到类似的需求,在一个列表中,确定某个特定的元素是否存在。比如,下面的代码便是确定列表中有没有奇数存在

numbers  = [1, 2, 3, 4, 5]   is_odd_exist  =  False  for n in numbers:      if n %  2  == 1:           is_odd_exist  =  True          break  if is_odd_exist:      print('Odd exist')  else:      print('Odd not exist')

这里,我们使用了一个标识 is_odd_exist,默认为 False。当找到奇数时,将其置为 True,然后跳出循环。这样写并没有问题,但是我们可以换种方式

numbers  = [1, 2, 3, 4, 5]   for n in numbers:       if n %  2  == 1:           print('Odd exist')           break   else:       print('Odd not exist')

先介绍下 Python 的 for…else 语法,当 for 循环是正常结束时(即不是通过 break 跳出结束的),会执行 else 中的语句。

这里,我们使用了相对于其他语言如 C、PHP 等不同的一种方式,完成了相同的功能,看起来代码也简洁了不少。

5 使用键遍历字典

初学 Python 的伙伴,可能容易写出这样的代码

member  = {'name': 'xiaoming',              'age': 18,              'mobile': '18312341234'}    for key in member:        print(f'{key}: {member[key]}')

同样,这也是没有问题的,但看起来并不直观。字典遍历的时候,其实可以直接取出键值信息,像这样

member  = {'name': 'xiaoming',            'age': 18,            'mobile': '18312341234'}  for key, val in member.items():      print(f'{key}: {val}')

这样的话,看起来要明了一些。

上面提到的几点有些带有自己一定的偏见,不要求大家都接受,选择合理的使用就好。

关于Python时操作坏习惯有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

问题 代码 方法 时候 元素 函数 文件 结果 错误 莫名其妙 上下 上下文 伙伴 功能 参数 奇数 字典 对象 方式 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会主任 广州宏创互联网科技 百单互联网科技有限公司 无线互联网科技 齐家互联网科技有限公司 成都狮子座互联网科技 丰台科技园 互联网公司 安控科技rtu产品工业互联网 云创客互联网科技公司 天速互联网络科技有限公司 知域互联网科技有限公司大骗子 健康食品互联网创新科技园项目 沐思想互联网科技有限公司 山东星卡互联网科技有限公司官网 每天都有哪些好的互联网科技 半导体是互联网高科技吗 上海乐五互联网科技有限公司 新氧科技和美国互联网有关系吗 北京天晋互联网科技有限公司 恒生互联网科技趋势 苏州找大状互联网科技有限公司 疫情对互联网科技公司影响 互联网科技垄断 互联网科技美容 银川新华互联网科技学校地址 小米互联网科技园设置 阿里互联网科技公司 福建科技产业互联网发展 朱啸虎曾投资哪些互联网科技企业 易租星互联网科技有限公司
0