python范例_感知Python编程范例

python范例

每年年初,TIOBE都会公布其年度编程语言。 当最新的年度TIOBE年度索引报告出炉时,我再也没有惊讶地看到Python再次获得该称号 ,该称号是基于获得最多搜索引擎排名得分(尤其是在Google,Bing,Yahoo,Wikipedia,Amazon,YouTube,和百度)。

Python data from TIOBE Index

在TIOBE的发现中增加了分量,今年早些时候,将近90,000个开发人员参加了Stack Overflow的年度开发人员调查 ,该调查是对全球编码人员的最大,最全面的调查。 今年结果的主要收获是:

“ Python是增长最快的主要编程语言,在我们的调查中,编程语言的排名再次上升,今年排名Java并位居第二(在Rust之后)。”

自从我开始编程和探索不同的语言以来,我就看到了对Python的仰慕之情。 自2003年以来,它一直是十大最受欢迎的编程语言之一。 正如TIOBE的报告所述:

“它是当今大学中教授频率最高的第一语言,在统计领域中排名第一,在AI编程中排名第一,在脚本编写中排名第一,在编写系统测试中排名第一。此外,Python还在网络编程方面处于领先地位和科学计算(仅用于其他领域)。总之,Python无处不在。”

Python在多个领域Swift崛起,繁荣和占据主导地位的原因有很多,其中包括Web开发,科学计算,测试,数据科学,机器学习等。 原因包括其可读性和可维护性的代码; 对第三方集成和库的广泛支持; 模块化,动态和便携式结构; 灵活的编程; 学习的轻松和支持; 用户友好的数据结构; 生产率和速度; 最重要的是社区的支持。 Python的多样化应用是其综合功能的结果,这使它比其他语言更具优势。

使用Python时,您就像个耍蛇人。 这使您可以充分利用Python的承诺,即为开发人员提供一个不一致的环境,以便其以最适合特定情况的样式进行编码,并使代码更具可读性,可测试性和一致性。

Python编程范例

Python支持四种主要的编程范例 :命令式,函数式,过程式和面向对象。 无论您是否同意它们是有效的,甚至是有用的,Python都努力使这四个功能都可用并正常工作。 在我们深入研究哪种编程范例最适合特定用例之前,现在是对它们进行快速检查的好时机。

命令式编程范例

命令式编程范例使用自然语言的命令式语气来表达方向。 它像一系列口头命令一样,以逐步的方式执行命令。 遵循“如何解决”的方法,它可以直接更改程序的状态。 因此,它也称为有状态编程模型。 使用命令式编程范例,您可以快速编写非常简单而优雅的代码,对于涉及数据操作的任务非常方便。 由于其相对较慢的顺序执行策略,因此不能用于复杂或并行计算。

考虑这个示例任务,目标是获取字符列表并将其连接起来以形成字符串。 一种命令式编程风格的方法如下:


   
   
>>> sample_characters = [ 'p' , 'y' , 't' , 'h' , 'o' , 'n' ]
>>> sample_string = ''
>>> sample_string
''
>>> sample_string = sample_string + sample_characters [ 0 ]
>>> sample_string
'p'
>>> sample_string = sample_string + sample_characters [ 1 ]
>>> sample_string
'py'
>>> sample_string = sample_string + sample_characters [ 2 ]
>>> sample_string
'pyt'
>>> sample_string = sample_string + sample_characters [ 3 ]
>>> sample_string
'pyth'
>>> sample_string = sample_string + sample_characters [ 4 ]
>>> sample_string
'pytho'
>>> sample_string = sample_string + sample_characters [ 5 ]
>>> sample_string
'python'
>>>

在这里,变量sample_string类似于程序的状态,该状态在执行一系列命令后会发生更改,可以轻松提取该变量以跟踪程序的进度。 可以在上述代码的较短版本中使用for循环(也称为命令式编程)来完成相同操作:


   
   
>>> sample_characters = [ 'p' , 'y' , 't' , 'h' , 'o' , 'n' ]
>>> sample_string = ''
>>> sample_string
>>> for c in sample_characters:
...     sample_string = sample_string + c
...     print ( sample_string )
...
p
py
pyt
pyth
pytho
python
>>>

函数式编程范例

函数式编程范例将程序计算视为基于lambda微积分的数学函数的评估。 Lambda演算是数学逻辑的形式系统,用于基于函数抽象和使用变量绑定和替换的应用来表达计算。 它遵循“解决方案”的方法(即,在不描述其控制流程的情况下表示逻辑),因此也被归为声明性编程模型。

函数式编程范例促进了无状态函数,但是必须注意,Python的函数式编程实现偏离了标准实现。 据说Python是一种不纯函数语言,因为如果您不小心的话,可能会保持状态并产生副作用。 也就是说,函数式编程非常适合并行处理,对于需要递归和并发执行的任务非常高效。


   
   
>>> sample_characters = [ 'p' , 'y' , 't' , 'h' , 'o' , 'n' ]
>>> import functools
>>> sample_string = functools. reduce ( lambda s , c: s + c , sample_characters )
>>> sample_string
'python'
>>>

使用相同的示例,将一个字符列表连接成一个字符串的功能方法将与上面相同。 由于计算是在一行中进行的,因此没有明确的方法可以通过sample_string获取程序状态并跟踪进度。 此示例的函数式编程实现令人着迷,因为它减少了代码行,并且仅使用一行代码即可完成其工作,但不使用functools模块和reduce方法。 三个关键字functoolsreducelambda定义如下:

  • functools是用于高阶函数的模块,并提供作用于或返回其他函数的函数。 它鼓励编写可重用的代码,因为使用已传递的一些参数来复制现有函数和以有据可查的方式创建该函数的新版本会更容易。
  • reduce是一种方法,该方法将两个参数的函数从左到右累计应用于序列中的项,以将序列简化为单个值。 例如:
    
         
         
    >>> sample_list = [ 1 , 2 , 3 , 4 , 5 ]
    >>> import functools
    >>> sum = functools. reduce ( lambda x , y: x + y , sample_list )
    >>> sum
    15
    >>> ( ( ( ( 1 + 2 ) + 3 ) + 4 ) + 5 )
    15
    >>>
  • lambda函数是小型的,匿名的(即,无名的)函数,可以接受任意数量的参数,但仅吐出一个值。 当它们用作另一个函数的参数或驻留在另一个函数中时,它们很有用。 因此,它们一次只能用于一个实例。

过程编程范例

过程编程范例是命令式编程的一种子类型,其中,语句被构造为过程(也称为子例程或函数)。 程序组成更多是过程调用,其中程序可能驻留在Universe中的某个位置,并且执行是顺序执行的,因此成为资源利用的瓶颈。 像命令式编程范例一样,过程式编程也遵循状态模型。 过程编程范例有助于良好的程序设计实践,并允许以代码库的形式重用模块。

这种模块化的开发形式是非常古老的开发风格。 程序中的不同模块之间可以没有关系,可以位于不同的位置,但是拥有多个模块会对许多开发人员造成困难,因为这不仅会导致逻辑重复,而且会产生大量开销查找并做出正确的选择。 请注意,在以下实现中,可以在Universe中的任何位置定义stringify方法,并且要实现其技巧,仅需要使用所需参数进行适当的调用。


   
   
>>> def stringify ( characters ) :
...     string = ''
...     for c in characters:
...         string = string + c
...     return stringify
...
>>> sample_characters = [ 'p' , 'y' , 't' , 'h' , 'o' , 'n' ]
>>> stringify ( sample_characters )
'python'
>>>

面向对象的编程范例

面向对象的编程范例将基本实体视为其实例可以包含数据和修改该数据的相应方法的对象。 面向对象设计的不同原理有助于代码的可重用性,数据隐藏等,但这是一个复杂的过程,因此在面向对象的方法中编写相同的逻辑非常棘手。 例如:


   
   
>>> class StringOps:
...     def __init__ ( self , characters ) :
...         self . characters = characters
...     def stringify ( self ) :
...         self . string = '' . join ( self . characters )
...
>>> sample_characters = [ 'p' , 'y' , 't' , 'h' , 'o' , 'n' ]
>>> sample_string = StringOps ( sample_characters )
>>> sample_string. stringify ( )
>>> sample_string. string
'python'
>>>

我应该选择哪种编程范例?

重要的是要注意,不同类型的编程范例之间没有可比较的地方。 由于软件只不过是知识的表示,因此该问题的答案是: “表示我的问题的最佳方法是什么?” 正在选择一种特定的编程范例。

用外行的话来说,如果您的问题涉及到一系列简单的顺序操作,那么遵循传统的命令式编程范例在时间和精力上将是最便宜的,并且可以为您带来最佳效果。 在需要对值进行数学转换,过滤信息,映射和归约的问题的情况下,以程序计算作为数学函数的函数式编程可能会派上用场。 如果问题被构造成一堆相互关联的对象,这些对象具有某些特定属性,这些属性可以随时间的流逝而变化,取决于某些条件,那么面向对象的编程将非常有用。 当然,基于规则的方法在这里行不通,因为编程范例的选择也很大程度上取决于要处理的数据类型,系统的动态需求以及其他各种事情,例如可伸缩性。

分析最新的技术流行语可以帮助确定某些编程范例为什么比其他编程范例更好地工作。

  • 机器学习结合了命令式编程和函数式编程的健康组合,并具有一定的不变性。 最好从功能上进行特征提取和预处理,因为它们需要对数据进行数学处理,因为映射,归约和过滤几乎可以并行完成,而无需太多依赖彼此的数据点。 最好通过老式命令式编程来训练机器学习模型,因为优化功能的值(即程序状态)需要在每次迭代时进行更新,因此需要在算法的许多点上顺序执行。 在这种情况下,它比函数式编程要快。 它还避免在每个步骤之后创建所有内容的副本; 相反,它只是更新先前值的占位符。
  • 深度学习可以以功能性方式很好地执行,因为深度学习模型是组合的。 整个过程优化了一组复合函数,权重是不变且无状态的,并且只要计算出相应的输入,就可以按任何顺序应用更新。 使用函数式编程可免费提供并发性和并行性,并使使用大型分布式模型更容易。 在某些自定义范式中,函数式编程与信息论交织在一起,以避免过拟合统计模型。
  • 可以通过功能或面向对象的编程来进行数据操作 。 在函数式编程方式中,一切都是不可变的,算法表达简洁,并且存在本地模式匹配,但是像数学表达式一样的命令的表述是一门艺术。 以面向对象的编程方式对其进行处理可提供递归和迭代循环,以及基于类的结构,从而更易于扩展以获取更大的数据和新功能。 缺点是算法和代码逻辑没有以可读的方式表达。 尽管这两种范例都倾向于具有自动垃圾收集系统,并且可以平滑地访问和操作数据库,但是选择哪种方式很大程度上取决于程序员的知识。

带走

在任何情况下,任何两个开发人员都极有可能不同意最佳编码风格,并且有有效的论据来支持他们的观点。 Python的神奇之处在于,它使您可以选择在特定情况下最适合您的编程范例。

如以上示例所示,任务始终可以分解为子任务,其中每个较小的部分都以完全不同的范例进行编码。 只要使用的软件包最少,输入和输出清晰定义且复杂度适中,则混合匹配样式就可以完美地发挥作用。 没有规则说您不能根据需要组合样式。 在混合样式时,Python不会停止解释应用程序并显示样式错误。

因为没有针对给定用例选择正确编码风格的完美指南,所以最好的建议是尝试权衡利弊的几种范例,直到找到能带来简单而有效解决方案的范例。 在这个实验中,有时您会发现,与在整个解决方案中使用不同的样式相比,编程范例的组合更适用于解决方案的不同部分。 在此过程中,强烈建议记录各种样式的要求和试验,以与社区分享并获得反馈。 这些意见和建议将对开发以及团队成员和添加到团队中的任何将来的开发人员有所帮助。


Jigyasa Grover在10月13日至15日在北卡罗来纳州罗利的All Things Open上展示了Python编程的驯服风格

翻译自: https://opensource.com/article/19/10/python-programming-paradigms

python范例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值