分享4个Python中高效省时的技巧

目录
  • 反转列表
  • 交换两个值
  • 在函数内部循环
  • 减少函数调用次数
  • 总结

今天我想和大家分享 4 个省时的 Python 技巧,可以节省 10~20% 的 Python 执行时间。

反转列表

Python 中通常有两种反转列表的方法:切片或 reverse() 函数调用。这两种方法都可以反转列表,但需要注意的是内置函数 reverse() 会更改原始列表,而切片方法会创建一个新列表。

但是他们的表现呢?哪种方式更有效?让我们看一下下面的例子:

使用切片:

$ python -m timeit -n 1000000 -s 'import numpy as np' 'mylist=list(np.arange(0, 200))' 'mylist[::-1]'
1000000 loops, best of 5: 15.6 usec per loop

使用 reverse():

$ python -m timeit -n 1000000 -s 'import numpy as np' 'mylist=list(np.arange(0, 200))' 'mylist.reverse()'
1000000 loops, best of 5: 10.7 usec per loop

这两种方法都可以反转列表,但需要注意的是内置函数 reverse() 会更改原始列表,而切片方法会创建一个新列表。

显然,内置函数 reverse() 比列表切片方法更快!

交换两个值

用一行代码交换两个变量值是一种更具有 Python 风格的方法。

与其他编程语言不同,Python 不需要使用临时变量来交换两个数字或值。举个简单的例子:

variable_1 = 100
variable_2 = 500

要交换 variable_1 和 variable_2 的值,只需要一行代码。

variable_1, variable_2 = variable_2, variable_1

您也可以对字典使用相同的技巧:

md[key_2], md[key_1] = md[key_1], md[key_2]

该技巧可以避免多次迭代和复杂的数据转换,从而减少执行时间。

在函数内部循环

我们都喜欢创建自定义函数来执行我们自己的特定任务。然后使用 for 循环遍历这些函数,多次重复该任务。

但是,在 for 循环中使用函数需要更长的执行时间,因为每次迭代都会调用该函数。

相反,如果在函数内部实现了 for 循环,则该函数只会被调用一次。

为了更清楚地解释,让我们举个例子!

首先创建一个简单的字符串列表:

list_of_strings = ['apple','orange','banana','pineapple','grape']

创建两个函数,函数内部和外部都有 for 循环,从简单的开始。

def only_function(x):
    new_string = x.capitalize()
    out_putstring = x + " " + new_string
    print(output_string)

和一个带有循环的 for 函数:

def for_in_function(listofstrings):
    for x in list_of_strings:
        new_string = x.capitalize()
        output_string = x + " " + new_string
        print(output_string)

显然,这两个函数的输出是一样的。

然后,让我们比较一下,哪个更快?

如您所见,在函数内使用 for 循环会稍微快一些。

减少函数调用次数

判断对象的类型时,使用 isinstance() 最好,其次是对象类型标识 id(),对象值 type() 最后。

# Check if num an int type
type(num) == type(0) # Three function calls
type(num) is type(0) # Two function calls
isinstance(num,(int)) # One function call

不要将重复操作的内容作为参数放在循环条件中,避免重复操作。

# Each loop the len(a) will be called
while i < len(a):
    statement
# Only execute len(a) once
m = len(a)
while i < m:
    statement

要在模块 X 中使用函数或对象 Y,请直接使用 from X import Y 而不是 import X; then X.Y。这减少了使用 Y 时的一次查找(解释器不必先查找 X 模块,然后在 X 模块的字典中查找 Y)。

总而言之,你可以大量使用 Python 的内置函数。提高 Python 程序的速度,同时保持代码简洁易懂。

如果想进一步了解 Python 的内置函数,可以参考下表,或查看以下网站(https://docs.python.org/3/library/functions.html):

总结

到此这篇关于4个Python中高效省时技巧的文章就介绍到这了,更多相关Python高效技巧内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解10个可以快速用Python进行数据分析的小技巧

    一些小提示和小技巧可能是非常有用的,特别是在编程领域.有时候使用一点点黑客技术,既可以节省时间,还可能挽救"生命". 一个小小的快捷方式或附加组件有时真是天赐之物,并且可以成为真正的生产力助推器.所以,这里有一些小提示和小技巧,有些可能是新的,但我相信在下一个数据分析项目中会让你非常方便. Pandas中数据框数据的Profiling过程 Profiling(分析器)是一个帮助我们理解数据的过程,而Pandas Profiling是一个Python包,它可以简单快速地对Pandas 的

  • Python中的一些陷阱与技巧小结

    Python是一种被广泛使用的强大语言,让我们深入这种语言,并且学习一些控制语句的技巧,标准库的窍门和一些常见的陷阱. Python(和它的各种库)非常庞大.它被用于系统自动化.web应用.大数据.数据分析及安全软件.这篇文件旨在展示一些知之甚少的技巧,这些技巧将带领你走上一条开发速度更快.调试更容易并且充满趣味的道路. 学习Python和学习所有其他语言一样,真正有用的资源不是各个语言繁琐的超大官方文档,而是使用常用语法.库和Python社区共享知识的能力. 探索标准数据类型 谦逊的enume

  • 教大家玩转Python字符串处理的七种技巧

    前言 日常使用python经常要对文本进行处理,无论是爬虫的数据解析,还是大数据的文本清洗,还是普通文件的处理,都是要用到字符串. Python对字符串的处理内置了很多高效的函数,非常方便功能很强大.下面是我总结的常用的7招,有了这几招就能轻松应对字符串处理. 一.字符串的连接和合并 连接和合并 相加 //两个字符串可以很方便的通过'+'连接起来 合并//用join方法 二.字符串的切片和相乘 相乘//比如写代码的时候要分隔符,用python很容易实现 line='*'*30 print(lin

  • 35个Python编程小技巧

    这篇博客其实就是这个集合整理后一部分的公开亮相.如果你已经是个python大牛,那么基本上你应该知道这里面的大多数用法了,但我想你应该也能发现一些你不知道的新技巧.而如果你之前是一个c,c++,java的程序员,同时在学习python,或者干脆就是一个刚刚学习编程的新手,那么你应该会看到很多特别有用能让你感到惊奇的实用技巧,就像我当初一样. 每一个技巧和语言用法都会在一个个实例中展示给大家,也不需要有其他的说明.我已经尽力把每个例子弄的通俗易懂,但是因为读者对python的熟悉程度不同,仍然可能

  • Python中运行并行任务技巧

    示例 标准线程多进程,生产者/消费者示例: Worker越多,问题越大 复制代码 代码如下: # -*- coding: utf8 -*- import os import time import Queue import threading from PIL import Image def create_thumbnail(filename, size=(128, 128)):     try:         fp, fmt = filename.rsplit('.', 1)       

  • 关于Python中空格字符串处理的技巧总结

    前言 大家应该都知道字符串处理,是任何语言最常用到的. 其中就经常会碰到,对字符串中的空格处理,比如:去除前后空格,去除全部空格,或者以空格为分隔符来处理. 好在Python中字符串有很多方法,比如lstrip() ,  rstrip() ,  strip()来去除字符串前后空格,借助split()对字符来分隔: 实在不行,还可以借助于re模块的sub函数来替换. 下面列举下,各种情况下的处理技巧,通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,话不多说了,来一起看看详细的介绍吧. [

  • Python爬虫常用小技巧之设置代理IP

    设置代理IP的原因 我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站.假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问.所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,这样便不会出现因为频繁访问而导致禁止访问的现象. 我们在学习Python爬虫的时候,也经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败.高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以下面这篇文

  • 分享4个Python中高效省时的技巧

    目录 反转列表 交换两个值 在函数内部循环 减少函数调用次数 总结 今天我想和大家分享 4 个省时的 Python 技巧,可以节省 10~20% 的 Python 执行时间. 反转列表 Python 中通常有两种反转列表的方法:切片或 reverse() 函数调用.这两种方法都可以反转列表,但需要注意的是内置函数 reverse() 会更改原始列表,而切片方法会创建一个新列表. 但是他们的表现呢?哪种方式更有效?让我们看一下下面的例子: 使用切片: $ python -m timeit -n 1

  • 分享15 个python中的 Scikit-Learn 技能

    目录 1.数据集 2.数据拆分 3.线性回归 4.逻辑回归 5.决策树 6.Bagging 7.Boosting 8.随机森林 9.XGBoost 10.支持向量机(SVM) 11.混淆矩阵 12.K-均值聚类 13.DBSCAN聚类 14.标准化和规范化 标准化 正常化 15.特征提取 前言: Scikit-Learn 是一个非常棒的 python 库,用于实现机器学习模型和统计建模.通过它,我们不仅可以实现各种回归.分类.聚类的机器学习模型,它还提供了降维.特征选择.特征提取.集成技术和内置

  • Python中高效的json对比库deepdiff详解

    目录 deepdiff是什么 deepdiff安装 案例1.对比txt文件 案例2.对比json 工作中我们经常要两段代码的区别,或者需要查看接口返回的字段与预期是否一致,如何快速定位出两者的差异?除了一些对比的工具比如Beyond Compare.WinMerge等,或者命令工具diff(在linux环境下使用),其实Python中也提供了很多实现对比的库,比如deepdiff和difflib,这两个的区别是deepdiff显示的对比效果比较简洁,但是可以设置忽略的字段,difflib显示的对

  • 10 个Python中Pip的使用技巧分享

    目录 Python pip 1.安装 pip 2.升级 pip 3.安装库 4. 库的批量安装 5.卸载和升级包 6. 冻结 Python pip 依赖 7.查看库信息 8.查看需要升级的库 9. 检查兼容性问题 10. 将库下载到本地 众所周知,pip 可以安装.更新.卸载 Python 的第三方库,非常方便.你们中的许多人可能已经使用 pip 很长时间了,但不清楚它有哪些还不错的功能.希望我今天分享的技巧能让你从 Python pip 中受益. Python pip 让我们从 Python

  • Python中字符串的处理技巧分享

    一.如何拆分含有多种分隔符的字符串? 实际案例 我们要把某个字符串依据分隔符号拆分不同的字符段,该字符串包含多种不同的分隔符,例如: s = 'asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd' 其中<,>,<;>,<|>,<\t>都是分隔符,如何处理? 解决方案 连续使用split()方法,每次处理一种分隔符 # 使用Python2 def mySplit(s,ds): res = [s] for d

  • 分享10提高 Python 代码的可读性的技巧

    目录 1.字符串反转 2.首字母大写 3.查询唯一元素 4.变量交换 5.列表排序 6.列表推导式 7.合并字符串 8.拆分字符串 9.回文串检测 10.统计列表元素出现次数 1. 字符串反转 字符串反转有很多方法,咱们再这里介绍两种:一种是切片,一种是python字符串的reversed方法. # -!- coding: utf-8 -!- string = 'hello world' # 方法1 new_str = string[::-1] ic(new_str) # 方法二 new_str

  • Python中一些不为人知的基础技巧总结

    前言 本文主要给大家总结介绍了关于Python的一些基础技巧,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1.startswith()和endswith()参数可以是元组 当检测字符串开头或结尾时,如果有多个检测值,可以用元组作为startswith()和endswith()参数: # bad if image.endswith('.jpg') or image.endswith('.png') or image.endswith('.gif'): pass # good

  • Python中字符串对象语法分享

    目录 一.字符串的外观 1.字符串字面量 2.字符串与多行注释 3.字符串编码方式 二.字符串对象 1.str 2.str实现原理 3.str中的内置方法 4.字符串切片 前言:前面提到了Python中的数值型内置数据类型,接下来呢我们就着重介绍一下字符串类型.在Python中字符串是一个有序的字符集合,没有独立的字符数据类型,当字符串长度为1时就可以认为其是字符.Python的内置数据类型str用于字符串处理.str对象的值为字符系列字符串是不可变序列. 一.字符串的外观 1.字符串字面量 顾

  • python中not、and和or的优先级与详细用法介绍

    前言 (小白专用)本次所分享的是Python中的not.and.or的执行时的优先级,以及他们的具体用法.本文比较详细,不喜勿喷. 一.not.and.or的含义以及优先级 对象 返回结果 优先顺序 not x if x is false,then True,else False 1 x and y if x is false,then x,else y 2 x or y if x is false,then y,else x 3 含义:not是 "非" :and是 "与&q

  • Python中的字典合并与列表合并技巧

    目录 前言 1 合并字典 2 合并列表 前言 又到了每日分享Python小技巧的时候了,今天给大家分享的是Python中两种常见的数据类型合并方法. 1 合并字典 在某些场景下,我们需要对两个(多个)字典进行合并.例如需要将如下两个字典进行合并: dict1 = {"a": 2, "b": 3, "c": 5} dict2 = {"a": 1, "c": 3, "d": 8} 且合并后的

随机推荐