给程序员的 30 个基本 Python 贴士与技巧之三完结篇

贴士#21. 一行代码计算任何数的阶乘

Python 2.x.

result   = (lambda k: reduce(int.__mul__, range(1,k+1),1))(3)

print(result)

#->   6

Python 3.x.

import   functools

result   = (lambda k: functools.reduce(int.__mul__, range(1,k+1),1))(3)

print(result)

#->   6

贴士#22. 找到列表中出现最频繁的数

test   = [1,2,3,4,2,2,3,1,4,4,4]

print(max(set(test),   key=test.count))

#->   4

贴士#23. 重置递归限制

Python 限制递归次数到 1000,我们可以重置这个值:

import   sys

x=1001

print(sys.getrecursionlimit())

sys.setrecursionlimit(x)

print(sys.getrecursionlimit())

#1->   1000

#2->   1001

请只在必要的时候采用上面的技巧。

贴士#24. 检查一个对象的内存使用

在 Python 2.7 中,一个 32 比特的整数占用 24 字节,在 Python 3.5 中利用 28 字节。为确定内存使用,我们可以调用 getsizeof 方法:

在 Python 2.7 中

import   sys

x=1

print(sys.getsizeof(x))

#->   24

在 Python 3.5 中

import   sys

x=1

print(sys.getsizeof(x))

#->   28

贴士#25. 使用 __slots__ 来减少内存开支

你是否注意到你的 Python 应用占用许多资源特别是内存?有一个技巧是使用 __slots__ 类变量来在一定程度上减少内存开支。

import   sys

class   FileSystem(object):

    def   __init__(self, files, folders, devices):

        self.files   = files

        self.folders   = folders

        self.devices   = devices

print(sys.getsizeof(   FileSystem ))

class   FileSystem1(object):

    __slots__   = ['files', 'folders', 'devices']

    def   __init__(self, files, folders, devices):

        self.files   = files

        self.folders   = folders

        self.devices   = devices

print(sys.getsizeof(   FileSystem1 ))

#In   Python 3.5

#1->   1016

#2->   888

很明显,你可以从结果中看到确实有内存使用上的节省,但是你只应该在一个类的内存开销不必要得大时才使用 __slots__。只在对应用进行性能分析后才使用它,不然地话,你只是使得代码难以改变而没有真正的益处。

【注:在我的 win10 python2.7 中上面的结果是:

#In   Python 2.7 win10

#1->   896

#2->   1016

所以,这种比较方式是不那么让人信服的,使用 __slots__ 主要是用以限定对象的属性信息,另外,当生成对象很多时花销可能会小一些,具体可以参见 python 官方文档:

The slots declaration takes a sequence of instance variables and reserves just enough space in each instance to hold a value for each variable. Space is saved because dict is not created for each instance. 】

贴士#26. 使用 lambda 来模仿输出方法

import   sys

lprint=lambda   *args:sys.stdout.write(" ".join(map(str,args)))

lprint("python",   "tips",1000,1001)

#->   python tips 1000 1001

贴士#27. 从两个相关的序列构建一个字典

t1   = (1, 2, 3)

t2   = (10, 20, 30)

print(dict   (zip(t1,t2)))

#->   {1: 10, 2: 20, 3: 30}

贴士#28. 一行代码搜索字符串的多个前后缀

print("http://www.google.com".startswith(("http://",   "https://")))

print("http://www.google.co.uk".endswith((".com",   ".co.uk")))

#1->   True

#2->   True

贴士#29. 不使用循环构造一个列表

import   itertools

test   = [[-1, -2], [30, 40], [25, 35]]

print(list(itertools.chain.from_iterable(test)))

#->   [-1, -2, 30, 40, 25, 35]

贴士#30. 在 Python 中实现一个真正的 switch-case 语句

下面的代码使用一个字典来模拟构造一个 switch-case。

def   xswitch(x):

    return   xswitch._system_dict.get(x, None)

xswitch._system_dict   = {'files': 10, 'folders': 5, 'devices': 2}

print(xswitch('default'))

print(xswitch('devices'))

#1->   None

#2->   2

结语 – 给程序员的基本 Python 贴士与技巧

希望上述的基本的 Python 贴士与技巧可以帮助你快速地 & 有效地完成任务,你可以在作业与项目中使用他们。

你的回馈会使看到这篇文章的我们变得更好,所以如果有时间,请分享你的想法,谢谢大家,希望大家可以一起在python学习路上前进。 作者:Python_开发 https://www.bilibili.com/read/cv42722/?from=search&spm_id_from=333.337.0.0 出处:bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

268 基于matlab的模拟双滑块连杆机构运动

基于matlab的模拟双滑块连杆机构运动,并绘制运动动画,连杆轨迹可视化输出,并输出杆件质心轨迹、角速度、速度变化曲线。可定义杆长、滑块速度,滑块初始位置等参数。程序已调通,可直接运行。 268 双滑块连杆机构运动 连…

Github单个文件或者单个文件夹下载插件

有时候我们在github上备份了一些资料,比如pdf,ppt,md之类的,需要用到的时候只要某个文件即可,又不要把整个仓库的zip包下载下来,毕竟有时文件太多,下载慢,我们也不需要所有资料,那么就可以使用到…

i-am-a-bot:一款基于多个大语言模型的验证码系统安全评估工具

关于i-am-a-bot i-am-a-bot是一款基于多个大语言模型的验证码安全评估工具,该工具提供了一个使用了多模态大语言模型(LLM)的自动化解决方案,可以帮助广大研究人员测试各种类型验证码机制的安全性。 从底层上看,i-am-a…

Flutter 中的 SliverIgnorePointer 小部件:全面指南

Flutter 中的 SliverIgnorePointer 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它提供了一系列的组件来帮助开发者构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的滚动组件中,SliverIgnorePointer 是一个用来包…

renren-fast-vue启动报错

问题描述 拉取人人开源vue项目启动失败 报错信息 版本信息 序号名称版本号1node14.21.3 启动方案 1.拉取项目 git clone https://gitee.com/renrenio/renren-fast-vue.git 2.执行安装依赖命令 npm install 3.此时报错 chromedriver2.27.2 install: node install.js 4.手动…

vscode写html不会自动补全

解决VSCode中HTML自动补全功能不工作的问题,可以通过以下几种方法之一进行解决:12 通过VSCode的Settings进行配置: 打开VSCode的Settings(通过点击左下角的设置图标或使用快捷键CtrlShiftP或CmdShiftP打开命令面板&#xff0c…

安装与使用ChatTTS文本转语音模型

非常自然的文本转语音(Text To Speech)TTS,支持中英文混读,还可以穿插笑声,听起来很真实自然。 1、有哪些优点 对话式 TTS: ChatTTS针对对话式任务进行了优化,实现了自然流畅的语音合成,同时支持多说话人。细粒度控制…

老师如何使用小程序发成绩?

作为一名老师,你有没有想过,发成绩其实可以不用那么麻烦?以前,我们可能得一张张地写成绩,或者一封封邮件地发,有时候还得担心信息泄露。但现在,有了小程序,一切都变得简单多了。 老师…

连锁超市能源能效管理方案

1.概述 连锁超市的能源消耗是其运营成本的重要组成部分。有效的能源能效管理不仅可以降低运营成本,也有助于环保,实现可持续发展。本文将探讨几种关键的能源能效管理策略。 2.智能照明系统 采用智能照明系统是提高能效的关键一步。这些系统可以根据店…

Oracle 数据库 varchar2 从 4000 扩展到 32k

Oracle 数据库 varchar2 从 4000 扩展到 32k 0. 引言1. 扩展 varchar2 支持长度2. 测试 0. 引言 今天来个项目需求,有1个字段的存储内容大概1万字。 当然其中1个方法是将这个字段的内容切分成几个字段,还有1个方法就是将 varchar2 默认支持 4000 的能力…

慎用lombok.Builder

lombok是一个Java库,使用注解方式来简化 Java 代码,可以减少诸如getter、setter的方法。 它常用的注解有: Getter、Setter、ToString 不必多说,分别实现getter、setter、toString、hashCode等方法。Data 则是包含上面的那些&…

【linux】自定义快捷命令/脚本

linux自定义快捷命令 场景自定义命令自定义脚本 场景 深度学习经常要切换到自己环境,conda activate mmagic,但是又不想每次重复打这么多字,想使用快捷命令直接切换。 自定义命令 使用别名(alias)或自定义脚本来创建…

CEF编译打包(支持MP4播放,windows-x64版本)

CEF编译打包(支持MP4播放,x64版本) 标签(空格分隔): CEF C Windows vs2022 文章目录 CEF编译打包(支持MP4播放,x64版本)背景一、准备工作二、编译环境准备三、具体编译流程大概流程创建工作目录init.batdown_cef.batdown_chromium.batdown_d…

先进的无人机GPS/GNSS模块解决方案

由于多星座支持和增强的信号接收能力,先进的GNSS模块提供了更高的精度和可靠性。集成传感器融合补偿信号中断,实现无缝导航。内置实时运动学(RTK)支持提供厘米级的定位精度。这些模块还优先考虑低功耗和紧凑的尺寸,确保更长的飞行时间和对无人…

【SpringMVC】_SpringMVC实现用户登录

目录 1、需求分析 2、接口定义 2.1 校验接口 请求参数 响应数据 2.2 查询登录用户接口 请求参数 响应数据 4、服务器代码 5、前端代码 5.1 登录页面login.html 5.2 首页页面index.html 6、运行测试 1、需求分析 用户输入账号与密码,后端校验密码是否正确&a…

【论文速读】Self-Rag框架,《Self-Rag: Self-reflective Retrieval augmented Generation》

关于前面的文章阅读《When to Retrieve: Teaching LLMs to Utilize Information Retrieval Effectively》,有网友问与Self-Rag有什么区别。 所以,大概看了一下Self-Rag这篇论文。 两篇文章的方法确实非常像,Self-Rag相对更加复杂一些。 When …

华为校招机试 - 矿车运输成本(20240522)

题目描述 露天矿采矿作业的特点是规模大,矿石和废料的移动量达到百万吨,运输成本开销较大,需要寻求一种最优的运输路径节省成本。 已知矿场可以划分成 N * M 的网格图,每个网格存在地形的差异,因此通过不同网格时,成本开销存在差异。 网格有以下 5 种类型: 标志为 S …

深度搜索算法(c++)

迷宫出口 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态, 0和1,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(…

一些知识点

springsecurity 认证流程 usernamepasswordAuthenticationFilter:用户名密码过滤 掉用AuthenticationManager:认证管理器,控制整个认证流程 调用uthenticationProvider:认证提供器,匿名访问,用户名密码访问,不同的访问有不同的提供…

Mac逆向Electron应用

工具库 解压asar文件 第一步 找到应用文件夹位置 打开活动监视器: 搜索相关应用 用命令行打开刚才复制的路径即可 open Applications/XXX.app/Contents/Resources/app第二步 解压打包文件 解压asar文件