那些被忽视的Python核心功能...

news2024/11/29 0:41:10

最实用、最简单、最优美……近些年,大家学习Python的热潮从未消退;无论是数据分析还是科学计算都少不了Python的身影。

Python也没有让人失望,Java用100行代码写出的程序,用Python十行就能搞定!

当你要说Hello World时,C语言、Java、Python分别是这样的:

图片

一目了然,Python只需一行!

虽然Python非常容易学习,但是许多实践者只触及到它的表面,而忽视了深入研究这门语言更高级、更强大的方面,而正是这些被忽视的方面使它如此独特和强大。——节选自《Fluent Python》

(摄影:Stefan Steinbauer)

如果你的目标是成为一名经验丰富的Python程序员,你一定想了解的更多。因此,让我们共同了解下你没听过的Python核心功能,先从最简单的排列与组合开始...

功能一:排列与组合

你可以组合不同的for循环,输出排列、组合和笛卡尔积等。

1.排列

举个例子:当你在排列函数中输入{[1,2,3],2}时,会输出如下结果:

图片

2.组合

当你在组合函数中输入(‘ABC’,2)时,输出的排列如下:

图片

3.笛卡尔积

笛卡尔积是数学中的一种运算,用于求两个集合中所有可能的有序对。

当我们用笛卡尔积计算Python时,结果是这样的:

图片

功能二:可变的参数默认值

现在,开始增加难度...

当你每次调用fib_memo函数却不为memo参数赋值时,它将自动使用定义该函数时的原始值,公式和代码如下:

图片

由于在Python中,默认参数是可变的,你也可以像在“for循环”中一样在单个脚本中多次执行函数,每次执行都能自动增加要计算的斐波那契数,而不会超过“最大递归深度”限制,因为memo可持续扩展。

*重要提示:

请记住,尽管可变的默认参数(如上所述)可以减少代码,但它可能产生难以解决的bug。有些人将其判定为“陷阱”,而不是功能。因此,你仍需要坚持Python中所透露出的禅意:显式优于隐式。

就像Hacker news中指出的那样:if n not in memo比if not n in memo更容易读取,但是二者输出结果相同。

功能三:海象运算符

下面,再来讲讲比较有趣的“海象运算符”...

“海象运算符”是在Python 3.8版本中引入的赋值表达式运算符,用于在表达式中进行赋值操作,其符号为“:=”。这个符号有点像海象的眼睛和獠牙(因此被称为「海象运算符」)。

它可以被翻译成英文“whale calculus”,是一种基于单词语法规则的特殊运算符,用于定义表达式和一系列操作步骤的语言建模方式。

图片

显然,用Python,赋值和检查返回值是否包含真值变得更容易了:

图片

功能四:单星号(*)和双星号(**)

使用(*)可以在将参数或关键字参数传递给函数之前解压缩,让我们在如下代码中使用:

图片

当调用sum_numbers函数而不解包my_numbers时,会引发"TypeError",因为该函数需要输入两个单独的参数才能输出结果。

但是,通过使用(*),我们可以解压缩my_numbers函数中的值,并将它们作为单独的参数进行传递,从而产生正确的输出。

这种解包技术不仅适用于元组和列表,也适用于字典。

当关键字作为参数时,我们可以使用双星号(**),以如下代码为例:

图片

除解压缩序列以将其作为参数传递给函数外,你还可以使用它来创建新序列,例如:

图片

在此过程中,原始数字列表不受影响,并且你还将拥有一个new_list_numbers 变量,它包括相同列表的副本。

图片

功能五:any and any

any和all都是python中的内置函数,它们对可迭代对象(如,列表、元组或集合)进行操作,并根据可迭代对象中的元素以Boolean运算的形式返回,语句如下:

图片

你可以将any和all函数与列表推导式结合使用,列表推导式返回一个可迭代对象并将其作为参数传递给all函数:

图片

或任意函数:

图片

下表列出可迭代对象中用any和all函数赋值的输出差异:

图片

功能六:交换变量

用Python,你可以将参数打包((=)号右边)和解包((=)号左边)结合起来,并利用此功能交换变量:

图片

功能七:str vs repr

在字符串处理方面,Python中的str()和repr()有所不同。str()将值转化为前端样式文本,repr()是后端底层代码。

  • str()函数:将值转化为适于人阅读的形式,面向用户,返回值具有可读性、可理解性较强。
  • repr()函数:将对象转化为供解释器读取的形式,面向开发人员,返回值表示python解释器内部的含义。

下图是一个很好的例子:

图片

如你所见,repr()简单将时间排列为字符串后输出;如果你想确定当前变量是否包含字符串或时间对象,无法借此识别。

str()提供了变量持有的实际对象信息,这些信息在调试过程中非常有价值。

功能八:扩展的迭代解包

迭代解包可应用到任何可迭代对象上,唯一的硬性要求是:被迭代对象中的元素数量必须与接受这些元素的元组空档数一致,也可以使用星号 * 表示忽略多余的元素。

这种方式的优点在于:更好赋值、更好获取迭代对象中的某个值(一般的迭代对象分为:元组,列表,字典,字符串等)。

如果你想获得序列的第一个和最后一个值,需要输入如下代码:

图片

更换输入和输出语句后同样可行...

图片

其它组合也同样适用...

功能九:多个上下文管理器

通常,我们习惯一次性使用一个上下文管理器,比如,当你打开一个程序文件,需要输入如下代码:

图片

但是,在Python中,用一行语句就能打开多个文件。如果你想将行写入其它文件,用Python语句就很容易实现,例如:

图片

功能十:调试程序

为达到调试目的,我们可以在文件中输出大量变量或可以简单使用Python调试器(pdb),它可以帮我们设置断点:

图片

程序将在断点处停止,你可以在该断点处获取任何变量以检查其值或该特定断点是否存在。当程序遇到断点时,可使用如下几个命令:

  • n或next:执行下一行。
  • s或step:进入功能调用。
  • c或continue:继续执行,直到下一个断点。
  • l或list:显示当前代码的上下文。
  • p <expression>或pp <expression>:打印表达式的值。
  • b <line>或break <line>:在指定的行上设置新断点。
  • h或help:在使用pdb时提供帮助。
  • q或quit:退出调试器并终止程序。

功能十一:collections模块中的Counter

collections模块中的Counter类提供了一种便捷的方法,可以对可迭代对象中的元素进行计数:

图片

功能十二:使用下划线的两种情况

在Python中有两种需要用到下划线:多位数分隔或排除不需要的值。

1.排除不需要的值

下划线 _ 可被用作排除不需要的值:

图片

2.多位数分隔符

在处理多位数时,可以使用下划线 (_) 作为视觉分隔符,能增强可读性。这个功能是在Python3.6中被引入的。

图片

用户:简单、实用但范围有限

图片

在reddit上,我们找到了关于用户关于本篇文章的181条评论:

图片

正如文章开头所述,他们认为:“用Python调试出的程序确实简单、实用。”

话虽如此,有些用户也提出了质疑:“Pythonic的过滤器和映射方式更具可读性,但是范围有限。”

但这一点也不影响用户对Python的喜爱!

有需要开发软件,可以看看它

JNPF快速开发平台是引迈信息自研的低代码应用构建平台,通过可视化拖拽的方式,传统模式下需要2 周完成开发的应用,用JNPF只要 2小时。用JNPF搭建应用,你只需要关注业务本身。数据存储、运行环境、服务器、网络安全等,平台为你全部搞定。

支持连接多数据源,SQL Server、MySQL、Oracle、PostgreSQL,同时兼容国产数据库达梦、人大金仓等。应用体验中心:https://www.jnpfsoft.com/?csdn

写在最后:Python是你成为全栈工程师的必备武器

前端开发、后端开发、项目测试...如果你想成为一名合格的全栈工程师,Python是你不可或缺的“武器”。

图片

在开发领域如此内卷的情况下,要完成一个现代化项目,需要一个人来掌控全局,他不需要是各种技术的资深专家,但需要熟悉各种技术。对于一个团队特别是互联网企业来说,全局性思维的人真的不可多得。

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

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

相关文章

银河麒麟QT连接DM8数据库

1. 安装达梦8 官网下载, 按照官方文档进行安装即可. 2. 安装unixodbc 1> 下载odbc安装包 unixODBC-2.3.7pre.tar.gz 2> 解压 tar -xvf unixODBC-2.3.7pre.tar.gz3> 编译 ./configure -prefix /usr/local make && make install4> 查找配置 odbcinst -j5…

Redis集群部署(docker-compose)

更多更新信息请关注“技术客格”公众号 使用3主+3从的部署方式 一、服务器规划 序号 服务器 端口 节点名称 备注 1 192.168.1.120 6179 redis-1 2 192.168.1.1206279 redis-2 3 192.168.1.1206379 redis-3 4 192.168.1.1206479 redis-4 5 192.168.1.1206579 redis-5 6 192.…

多线程的创建,复习匿名内部类,Thread的一些方法,以及lambda的变量捕捉,join用法

一、&#x1f49b; Java的Thread类表示线程 1.创建类&#xff0c;继承Thread重写run方法 2.创建类&#xff0c;实现Runnable重写run方法 3.可以继承Thread重写run基于匿名内部类 4.实现Runnable重写run基于匿名内部类 5.lamdba表达式表示run方法的内容&#xff08;推荐&#x…

一、安全世界观

文章目录 1、 Web安全简史1.1 中国黑客简史1.2 黑客技术的发展历程1.3 web安全的兴起 2、黑帽子、白帽子3、安全的本质4、安全三要素5、如何实施安全评估5.1 资产等级划分5.2 威胁分析5.3 风险分析5.4 设计安全方案 6、白帽子兵法6.1 Secure By Default6.2 纵深防御原则6.3 数据…

在Raspberry Pi 4上安装Ubuntu 20.04 + ROS noetic(不带显示器)

在Raspberry Pi 4上安装Ubuntu 20.04 ROS noetic&#xff08;不带显示器&#xff09; 1. 所需设备 所需设备&#xff1a; 树莓派 4 B 型 wifi microSD 卡&#xff1a;最小 32GB MicroSD 转 SD 适配器 &#xff08;可选&#xff09;显示器&#xff0c;鼠标等 2. 树莓派…

积累常见的有针对性的python面试题---python面试题001

1.考点列表的.remove方法的参数是传入的对应的元素的值,而不是下标 然后再看remove这里,注意这个是,删除写的那个值,比如这里写3,就是删除3, 而不是下标. remove不是下标删除,而是内容删除. 2.元组操作,元组不支持修改,某个下标的内容 可以问他如何修改元组的某个元素 3.…

Git Submodule 更新子库失败 fatal: Unable to fetch in submodule path

编辑本地目录 .git/config 文件 在 [submodule “Assets/CommonModule”] 项下 加入 fetch refs/heads/:refs/remotes/origin/

sigmoid ReLU 等激活函数总结

sigmoid ReLU sigoid和ReLU对比 1.sigmoid有梯度消失问题&#xff1a;当sigmoid的输出非常接近0或者1时&#xff0c;区域的梯度几乎为0&#xff0c;而ReLU在正区间的梯度总为1。如果Sigmoid没有正确初始化&#xff0c;它可能在正区间得到几乎为0的梯度。使模型无法有效训练。 …

如何让子组件,router-view,呈现左右分布格局

1.用浮动进行浮动布局&#xff0c;定义一个大盒子&#xff0c;把浮动的样式写在公共样式里&#xff08;这里在main.js里定义一下全局布局&#xff09;。 2、能够在右边显示了

小研究 - MySQL 分区分表的设计及实(一)

随着信息技术的快速发展&#xff0c;数据量越来越大&#xff0c;海量的表查询操作需要消耗大量的时间&#xff0c;成为影响数据库访问性能提高的主要因素。为了提升数据库操作的查询效率和用户体验&#xff0c;在关系型数据库管理系统(MySQL)中通过 range 分区和 Merge 存储&am…

因果推断(三)双重差分法(DID)

因果推断&#xff08;三&#xff09;双重差分法&#xff08;DID&#xff09; 双重差分法是很简单的群体效应估计方法&#xff0c;只需要将样本数据随机分成两组&#xff0c;对其中一组进行干预。在一定程度上减轻了选择偏差带来的影响。 因果效应计算&#xff1a;对照组y在干预…

【kafka消息查询】kafka消费不到数据,写入端伙伴说他写入了,而且没有报错,如何来切割是写入的问题还是消费的问题

文章目录 前言情景再现如何确定是否写入了为什么出现不能写入总结 前言 kafka消费不到消息&#xff0c;如何查询界定是生产端的问题还是消费端的问题&#xff0c;特别是场景上下文已经丢失了的时候。 情景再现 使用命令&#xff1a; bin/kafka-console-consumer.sh --bootstr…

前端js用正则写一个车牌号验证

var car_number2 (rule, value, callback) > {var plateNumber /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏…

simpleNet

文章目录 simpleNet0. 背景1. 主要贡献2. 网络3. 方法细节3.1 Feature Extractor 特征提取器3.2 Features Adaptor特征适配器3.3 Anomalous Feature Generator 异常特征生成器3.4 Discriminator 鉴别器3.5 Loss function and Training 损失方程和训练3.6 Inference and Scoring…

网信办制定个人信息保护新规,企业应采取哪些举措实现身份审计合规

近日&#xff0c;国家互联网信息办公室就《个人信息保护合规审计管理办法&#xff08;征求意见稿&#xff09;》面向社会公开征求意见。征求意见稿指出&#xff0c;办法根据《中华人民共和国个人信息保护法》等法律法规制定&#xff0c;旨在指导、规范个人信息保护合规审计活动…

K8s的高可用搭建

高可用技术搭建 在master节点上需要部署&#xff1a;keepalived、haproxy

记一款开源免费的终端工具Tabby

经常需要在Windows电脑上远程操作Linux&#xff0c;常用的终端工具有Xshell、SecureCRT、Putty。其中Xshell和SecureCRT功能强大&#xff0c;但是要收费&#xff0c;Putty虽然免费&#xff0c;但是功能上略显单薄。今天给大家介绍的这款终端工具非常强大&#xff0c;他不仅界面…

怎么样通过Bootstrap已经编译好(压缩好)的源码去查看符合阅读习惯的源码【通过Source Map(源映射)文件实现】

阅读本篇博文前&#xff0c;建议大家先看看下面这篇博文&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/132089650 Bootstrap经编译(压缩)后的源码百度网盘下载地址&#xff1a; https://pan.baidu.com/s/14BM9gpC3K-LKxhyLGh4J9Q?pwdm02m Bootstrap未经编译…

【Spring专题】Spring底层核心原理解析

前言 Spring啊&#xff0c;可以说是我们大部分Java玩家【最熟悉的陌生人】了吧。八个字形容&#xff1a;似懂非懂&#xff0c;会也不会 你说简单应用&#xff0c;我们大家都会&#xff0c;那真要展开说两句的话&#xff0c;那只能来这么两句&#xff1a;这是第一句&#xff0…

C高级 作业 day4 8/7

1.整理思维导图 2.写一个函数&#xff0c;获取用户的uid和gid并使用变量接收 3.整理冒泡排序、选择排序和快速排序的代码 冒泡排序 //冒泡排序 void bubble_sort(int a[],int len) {int count0;for(int i1;i<len;i) //控制轮数{for(int j0;j<len-i;j) //控制每一轮交换…