广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python使用数字与字符串方法技巧有哪些
  • 725
分享到

python使用数字与字符串方法技巧有哪些

2023-06-29 13:06:12 725人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍了python使用数字与字符串方法技巧有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 少使用数字字面量下面的代码使用数字来作为判断条件的语句,如果你

这篇文章主要介绍了python使用数字与字符串方法技巧有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1. 少使用数字字面量

下面的代码使用数字来作为判断条件的语句,如果你从别人手里接手过这部分代码,很难第一时间理解它的意义。

def mark_trip_as_featured(trip):    """将某个旅程添加到推荐栏目    """    if trip.source == 11:        do_some_thing(trip)    elif trip.source == 12:        do_some_other_thing(trip)    ... ...    return

我们可以使用枚举的方式,对这些数字部分做一些说明。

from enum import IntEnumclass TripSource(IntEnum):    FROM_WEBSITE = 11    FROM_iOS_CLIENT = 12def mark_trip_as_featured(trip):    if trip.source == TripSource.FROM_WEBSITE:        do_some_thing(trip)    elif trip.source == TripSource.FROM_ioS_CLIENT:        do_some_other_thing(trip)    ... ...    return

将重复出现的数字定义成枚举类型,不仅改善了代码的可读性,还降低了代码出现 Bug 的机率。

当然不是所有的数字都需要用到枚举说明,像常见数字下标 0 和 -1
就不需要。

2. 裸字符串处理的问题

“ 裸字符串处理 ” 这里指只使用基本的加减乘除和循环、配合内置函数/方法来操作字符串,获得我们需要的结果。

def fetch_users(conn, min_level=None, gender=None, has_membership=False, sort_field="created"):    """获取用户列表       :param int min_level: 要求的最低用户级别,默认为所有级别    :param int gender: 筛选用户性别,默认为所有性别    :param int has_membership: 筛选所有会员/非会员用户,默认非会员    :param str sort_field: 排序字段,默认为按 created "用户创建日期"    :returns: 列表:[(User ID, User Name), ...]    """    # 一种古老的 sql 拼接技巧,使用 "WHERE 1=1" 来简化字符串拼接操作    # 区分查询 params 来避免 SQL 注入问题    statement = "SELECT id, name FROM users WHERE 1=1"    params = []    if min_level is not None:        statement += " AND level >= ?"        params.append(min_level)    if gender is not None:        statement += " AND gender >= ?"        params.append(gender)    if has_membership:        statement += " AND has_membership == true"    else:        statement += " AND has_membership == false"        statement += " ORDER BY ?"    params.append(sort_field)    return list(conn.execute(statement, params))

这样做虽然看起来简单,符合直觉,但是随着函数逻辑变得复杂,这段代码会变得容易出错。

更好的选择是利用一些开源的对象化模块来操作他们。
这里使用了 SQLAlchemy

def fetch_users_v2(conn, min_level=None, gender=None, has_membership=False, sort_field="created"):    """获取用户列表    """    query = select([users.c.id, users.c.name])    if min_level is not None:        query = query.where(users.c.level >= min_level)    if gender is not None:        query = query.where(users.c.gender == gender)    query = query.where(users.c.has_membership == has_membership).order_by(users.c[sort_field])    return list(conn.execute(query))

其它的替换思路:

Q: 目标/源字符串是结构化的,遵循某种格式吗?

其它的开源的对象化模块。

  • SQL:SQLAlchemy

  • XML:lxml

  • JSON、YAML …

尝试使用模板引擎而不是复杂字符串处理逻辑来达到目的。

  • Jinja2

  • Mako

  • Mustache

3. 展开复杂的计算字面量表达式

def f1(delta_seconds):    # 如果时间已经过去了超过 11 天,不做任何事    if delta_seconds > 950400:        return     ...

“为什么我们不直接把代码写成 if delta_seconds < 11 * 24 * 3600: 呢?”

“性能”,答案一定会是“性能”。 Python 是一门解释型语言,所以预先计算出 950400 正是因为我们不想让每次对函数 f1 的调用都带上这部分的计算开销。

不过事实是:即使我们把代码改成 if delta_seconds < 11 * 24 * 3600:,函数也不会多出任何额外的开销。

当我们的代码中需要出现复杂计算的字面量时,请保留整个算式吧。它对性能没有任何影响,而且会增加代码的可读性。

def f1(delta_seconds):    if delta_seconds < 11 * 24 * 3600:        return

4.实用技巧

4.1布尔值也是数字

True False 可以当成 1 和 0 使用

>>> True + 12>>> 1 / FalseTraceback (most recent call last):  File "<stdin>", line 1, in <module>ZeroDivisionError: division by zero

计数简化操作。

>>> l = [1, 2, 4, 5, 7]>>> sum(i % 2 == 0 for i in l)2

如果将某个布尔值表达式作为列表的下标使用,可以实现类似三元表达式的目的:

# 类似的三元表达式:"javascript" if 2 > 1 else "Python">>> ["Python", "Javascript"][2 > 1]'Javascript'

4.2改善字符串的可读性。

对于字符串我们常使用 \ 和 + 来讲字符串拆分成好几段。

还有一种简单的方法是用 ()。
用 ()括起来就可以随意拆行了。

s = (    "There is something really bad happened during the process. "    "Please contact your administrator.")

对于多级缩进字符串:

可以调用其他的标准库来达到简化效果。

from textwrap import dedentdef main():    if user.is_active:        # dedent 将会缩进掉整段文字最左边的空字符串        message = dedent("""\            Welcome, today's movie list:            - Jaw (1975)            - The Shining (1980)            - Saw (2004)""")

大数字也可以变得更加可阅读:

在数字之间加入下划线。

>>> 10_000_000.0  # 以“千”为单位划分数字10000000.0>>> 0xCAFE_F00D  # 16进制数字同样有效,4个一组更易读3405705229>>> 0b_0011_1111_0100_1110  # 二进制也有效16206>>> int('0b_1111_0000', 2)  # 处理字符串的时候也会正确处理下划线240

4.3以 r 开头的内建字符串函数。

例如 : .split() 和 .rsplit() 的区别是,一个从左到右分割字符串,另一个是从右到左处理字符串。

合理使用一些现成 string 操作函数可以让工作事半功倍。

4.4 float (" inf ")

float ( " inf " ) float ( " -inf ") ,对应着无穷大和无穷小。

float( " -inf ") < 任意数值 < float( " inf ")

一些可以用上的场合。

# A. 根据年龄升序排序,没有提供年龄放在最后边>>> users = {"tom": 19, "jenny": 13, "jack": None, "andrew": 43}>>> sorted(users.keys(), key=lambda user: users.get(user) or float('inf'))['jenny', 'tom', 'andrew', 'jack']# B. 作为循环初始值,简化第一次判断逻辑>>> max_num = float('-inf')>>> # 找到列表中最大的数字>>> for i in [23, 71, 3, 21, 8]:...:    if i > max_num:...:         max_num = i...:>>> max_num71

5.常见误区

5.1“value += 1” 并非线程安全

如下:这个操作并不是线程安全的。

这个简单的累加语句,会被编译成包括取值和保存在内的好几个不同步骤。

而在多线程环境下,任意一个其他线程都有可能在其中某个步骤切入进来,阻碍你获得正确的结果。

def incr(value):    value += 1# 使用 dis 模块查看字节码import disdis.dis(incr)      0 LOAD_FAST                0 (value)      2 LOAD_CONST               1 (1)      4 INPLACE_ADD      6 STORE_FAST               0 (value)      8 LOAD_CONST               0 (None)     10 RETURN_VALUE

常用 dis 模块去验证自己的操作,有时候,结果和我们预想的并不一样。

5.2字符串拼接并不慢

Python 的字符串拼接(+=)在 2.2 以及之前的版本确实很慢。
但之后的版本做了更新,效率已经大大提升,所有字符串的拼接还是可以使用的。

感谢你能够认真阅读完这篇文章,希望小编分享的“python使用数字与字符串方法技巧有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网Python频道,更多相关知识等着你来学习!

--结束END--

本文标题: python使用数字与字符串方法技巧有哪些

本文链接: https://www.lsjlt.com/news/325071.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python使用数字与字符串方法技巧有哪些
    这篇文章主要介绍了python使用数字与字符串方法技巧有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 少使用数字字面量下面的代码使用数字来作为判断条件的语句,如果你...
    99+
    2023-06-29
  • python使用数字与字符串方法技巧
    目录1. 少使用数字字面量2. 裸字符串处理的问题3. 展开复杂的计算字面量表达式4.实用技巧4.1布尔值也是数字4.2改善字符串的可读性。4.3以 r 开头的内建字符串函数。4.4...
    99+
    2022-11-13
  • JavaScript字符串的使用技巧有哪些
    这篇文章主要讲解了“JavaScript字符串的使用技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript字符串的使用技巧有哪些”吧!1.如何多次复制一个字符串JS 字...
    99+
    2023-06-27
  • Python字符串的使用方法有哪些
    这篇文章主要讲解了“Python字符串的使用方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python字符串的使用方法有哪些”吧!str(字符串)1.字符串是 Python 中最常...
    99+
    2023-06-02
  • Python中的字符串操作技巧有哪些?
    Python中的字符串操作技巧有哪些?字符串操作是Python编程中非常常见和重要的一部分。Python提供了许多内置函数和方法来进行字符串操作,让我们能够高效地处理和处理文本数据。下面我将介绍一些常用的字符串操作技巧,并给出具体的代码示例...
    99+
    2023-10-22
    连接(join) 切片(slice) 查找(find)
  • python中有哪些字符串方法
    python中有哪些字符串方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python...
    99+
    2023-06-14
  • python中字符串方法有哪些
    python中字符串方法有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;...
    99+
    2023-06-14
  • js数组与字符串常用方法有哪些
    这篇文章主要为大家展示了“js数组与字符串常用方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js数组与字符串常用方法有哪些”这篇文章吧。最近在梳理js...
    99+
    2022-10-19
  • python字符串的常用方法有哪些
    这篇文章主要介绍“python字符串的常用方法有哪些”,在日常操作中,相信很多人在python字符串的常用方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python字符串的常用方法有哪些”的疑惑有所...
    99+
    2023-06-29
  • Python字符串对齐方法有哪些
    这篇文章主要介绍Python字符串对齐方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均为Python开发...
    99+
    2023-06-14
  • Python字符串操作方法有哪些
    本篇内容主要讲解“Python字符串操作方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python字符串操作方法有哪些”吧!Python字符串中字符大小写的变换: * S.l...
    99+
    2023-06-17
  • Python中字符串的方法有哪些
    Python中字符串的方法有很多,下面是一些常用的字符串方法:- `capitalize()`: 将字符串的第一个字符转换为大写,并...
    99+
    2023-08-30
    Python
  • Java字符串操作的技巧有哪些
    本篇内容介绍了“Java字符串操作的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!01、如何在字符串中获取不同的字符及其数量?这道...
    99+
    2023-06-27
  • JavaScript字符串转换数字的方法有哪些
    这篇文章主要介绍“JavaScript字符串转换数字的方法有哪些”,在日常操作中,相信很多人在JavaScript字符串转换数字的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2022-10-19
  • python字符串切片常用方法有哪些
    一、切片切片:指对操作的对象截取其中一部分的操作,字符串、列表、元组都支持切片操作语法:序列[开始位置下标:结束位置下标:步长] ,不包含结束位置下标数据,步长为选取间隔,正负均可,默认为1举例如下:str = 'abcdefg_a...
    99+
    2023-05-14
    Python
  • MySql字符串函数使用技巧
            1、从左开始截取字符串 left(str, length) 说明:left(被截取字段,截...
    99+
    2022-10-18
  • python字符串有哪些函数
    python中有以下几种常见的字符串处理函数len()函数len()函数的作用是用于计算字符串的长度。strip()函数strip()函数的作用是用于删除字符串两边的空白符。isalpha()函数isalpha()函数的作用是用于判断字符串...
    99+
    2022-10-05
  • python字符串函数有哪些
    python中的字符串函数:1.capitalize()函数 ,将字符串的第一个字母变成大写;2.swapcase()函数,对字符串的大小写字母进行转换;3.lower()函数 ,将字符串中所有大写字符转换为小写;python中的字符串函数...
    99+
    2022-10-16
  • Python字符串的创建方法有哪些
    Python中字符串的创建方法有以下几种:1. 使用引号括起来的文本来创建字符串,可以使用单引号或双引号。例如:```str1 = ...
    99+
    2023-10-09
    Python
  • python中字符串操作方法有哪些
    这期内容当中小编将会给大家带来有关python中字符串操作方法有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作