python 知识点笔记
注意点1:
def bare_except(): while True: try: s = input("Input a number: ") x = int(s) break except: # oops! can't CTRL-C to exit print("Not a number, try again") 这样会捕捉所有异常,导致按下 CTRL-C 程序都不会终止,调整后的做法是 def bare_except(): while True: try: s = input("Input a number: ")
x = int(s)
break
except Exception: # 比这更好的是用 ValueError print("Not a number, try again")
注意点2: 如果函数参数使用可变对象,那么下次调用时可能会产生非预期结果,坏的做法def mutable_default_arguments(): def append(n, l=[]): l.append(n) return l l1 = append(0) # [0] l2 = append(1) # [0, 1] 调整后的做法,如下: def mutable_default_arguments(): def append(n, l=None): if l is None: l = [] l.append(n) return l l1 = append(0) # [0] l2 = append(1) # [1]
注意点3: 使用 time.time() 统计耗时坏的做法def timing_with_time(): start = time.time() time.sleep(1) end = time.time() print(end - start) 调整后的做法是使用 time.perf_counter(),更精确:def timing_with_time(): # more accurate start = time.perf_counter() time.sleep(1) end = time.perf_counter() print(end - start)
注意点4:
坏的做法
subprocess.run(["ls -l"], capture_output=True, shell=True)
如果 shell=True,则将 ls -l
传递给/bin/sh(shell) 而不是 Unix 上的 ls 程序,会导致 subprocess 产生一个中间 shell 进程, 换句话说,使用中间 shell 意味着在命令运行之前,命令字符串中的变量、glob 模式和其他特殊的 shell 功能都会被预处理。比如,$HOME 会在在执行 echo 命令之前被处理处理。
调整后的做法是拒绝从 shell 执行,如下:
subprocess.run(["ls", "-l"], capture_output=True)
注意点5:多用numpy来提高性能 坏的做法def not_using_numpy_pandas(): x = list(range(100)) y = list(range(100)) s = [a + b for a, b in zip(x, y)] 调整后的的做法,如下:import numpy as np def not_using_numpy_pandas(): # 性能更快 x = np.arange(100) y = np.arange(100) s = x + y
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程