毕尔巴鄂对阵皇家社会:两支近邻球队将于西甲联赛 “巴斯克德比”中为捍卫荣耀而战贝壳第三季度营收226亿元 经调净利润17.8 亿元 同比下降17.46%AI营销,让科技巨头尝到了大模型商业化的甜头安恒信息范渊在乌镇峰会谈AI:以工具视之、以工具用之、以工具治理之诺基亚与微软再合作,为 Azure 数据中心供货延长五年天岳先进发布业界首款 300mm(12 英寸)N 型碳化硅衬底三星介绍内部安全团队 Project Infinity 攻防演练项目,高效修复 Galaxy 手机平板漏洞上海市将推进低空飞行服务管理能力建设,2027 年底前累计划设相应航线不少于 400 条岁末,海尔给您备好一套“小红花”为什么说Q10K Pro是今年最值得入手的电视?看完这几点就明白了!“小墨方·大不凡”!Brother“小墨方”系列彩喷一体机全新上市黄仁勋:AI智能需求强劲,“物理定律”限制英伟达芯片增长诺基亚与微软再合作,为Azure数据中心供货延长五年国家数据局:到2029年基本建成国家数据基础设施主体结构中国已发展成为全球最大的互联网市场,拥有全球最多的网民和移动互联网用户中国铁塔:计划按照10:1的比例合股美国FCC正式划定5.9GHz频段用于C-V2X技术在AI领域奋起直追!苹果要对Siri大革新 2026年正式发布日本机构公布量子专利榜单:本源量子、国盾量子位居全球第1中国联通:拟向华为、中兴展开5G网络设备竞争性谈判采购
  • 首页 > 数据存储频道 > 数据库频道 > 编程开发

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

    2023年08月07日 15:35:26   来源:51CTO

      编译 | 王瑞平

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

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

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

      一目了然,Python只需一行!

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

      ——节选自《Fluent Python》

      如果你的目标是成为一名经验丰富的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 或pp :打印表达式的值。

      b 或break :在指定的行上设置新断点。

      h或help:在使用pdb时提供帮助。

      q或quit:退出调试器并终止程序。

      十一、功能十一:collections模块中的Counter

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

      图片

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

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

      1.排除不需要的值

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

      2.多位数分隔符

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

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

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

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

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

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

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

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

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

      文章内容仅供阅读,不构成投资建议,请谨慎对待。投资者据此操作,风险自担。

    即时

    新闻

    明火炊具市场:三季度健康属性贯穿全类目

    奥维云网(AVC)推总数据显示,2024年1-9月明火炊具线上零售额94.2亿元,同比增加3.1%,其中抖音渠道表现优异,同比有14%的涨幅,传统电商略有下滑,同比降低2.3%。

    企业IT

    重庆创新公积金应用,“区块链+政务服务”显成效

    “以前都要去窗口办,一套流程下来都要半个月了,现在方便多了!”打开“重庆公积金”微信小程序,按照提示流程提交相关材料,仅几秒钟,重庆市民曾某的账户就打进了21600元。

    3C消费

    华硕ProArt创艺27 Pro PA279CRV显示器,高能实力,创

    华硕ProArt创艺27 Pro PA279CRV显示器,凭借其优秀的性能配置和精准的色彩呈现能力,为您的创作工作带来实质性的帮助,双十一期间低至2799元,性价比很高,简直是创作者们的首选。

    研究

    中国信通院罗松:深度解读《工业互联网标识解析体系

    9月14日,2024全球工业互联网大会——工业互联网标识解析专题论坛在沈阳成功举办。