编程技巧
00 min
2024-4-23

字符串与数值

  1. 不必预先计算字面表达式
    1. 对于950400 = 11 * 24 * 3600,表达式用 if delta_seconds > 11 * 24 * 3600也不会造成额外开销,更能表达代码含义。
  1. 超长字符串可读性的改善
    1. 对于超长文本,可以随意换行来拆行
      对于多级缩进代码中出现多行字符串情况,我们如果不用额外工具,只能写成这样
      显然这种写法破坏了代码的缩进视觉效果,显得突兀。为解决这个问题,一方面可以将多行字符串提取为外层全局变量,另一个解决办法就是使用标准库textwrap来解决:
      dedent方法会删除整段字符串左侧的空白缩进。

      容器类型

      1、函数传参本质
      Python在进行函数调用传参时,既不是值传递也不是引用传递,而是传递了“变量所指对象的引用”,当你调用func(orig_obj)时,函数内部创建了一个变量in_func_obj,它和传入函数的外部变量orig_obj都指向同一个对象。相当于执行了in_func_obj=orig_obj。所以对于函数内部执行in_func_obj += … 等修改操作,是否会影响外部变量,只取决于in_func_obj所指向的对象本身是否可变:
      • 不可变:函数内部会生成一个新对象,原对象(orig_obj所指对象不受影响)
      • 可变:函数内部对对象的变动会同样影响原对象
    2. 推导式
    3. 列表、集合、字典有推导式,元组没有,但是(i for i in range(10)) 也是合法语句,会生产一个生成器。
    4. 具名元组 namedtuple
    5. 普通元组只能按照索引访问,而具名元组除了可以按照索引访问外,还能为元组中为每个成员命名,这样可以通过名称访问成员。(函数返回多个对象,可以用具名元组包裹,然后用名称形式访问各个对象)