`
chelsea
  • 浏览: 117905 次
  • 来自: ...
社区版块
存档分类
最新评论

Python:无可比拟的参数机制

 
阅读更多

0. pass object reference by value, hehe

1. 任意参数,避免了对参数个数的依赖,全面超越Unary,Binary的表达能力

允许用一个参数占位符来表达运行时的多个参数,使Python可以写出不依赖参数个数的通用算法,将函数、过程、谓词区分为零元、一元、二元已经不像在其它语言中那样迫不得已

比如说通用算法map,C++提供了map的一元形式:map(unary_functor, begin, end),那么如何使map适用于二元算子呢?通常有两种做法:

  • 一种是添加map的二元形式(在Java实现的Apache Common Functor中就是这么做的),局限在于三元、四元呢?
  • 一种是使用适配器,将二元函数适配为一元,如bind1st, bind2nd等,当参数不固定时要写出专用的适配器

Python使你可以写出map的通用形式:

def map(oper, *sqs): #simulate standard map()
return [ oper( *[(sq[i]) for sq in sqs] ) for i in range(len(sqs[0]))]

或者,使用内置的zip函数,更紧凑一点:

def map(oper, *sqs): #another way to simulate standard map()
return [ oper( *tuple ) for tuple in zip(*sqs) ]

是的,这就是任意元都通吃的map,只有一行代码而已;我没有看过Python源代码,不知道真正的map是如何实现的

测试一下:

def testUnaryMap(self):
self.assertEquals([1,2,3], map(math.ceil, [0.6, 1.3, 2.4]) )

def testBinaryMap(self):
self.assertEquals([64,25,6], map(math.pow, [4,5,6], [3,2,1]) )

......
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

2. Keyword参数,避免了位置依赖,极大提高可读性,降低错误倾向

参数不宜过多基本是普适的,但不是人人都遵守,在C++, Java中,如果参数比较多,又都是同一类型,对客户程序员来说简直就是恶梦,他要仔细核对参数的位置,不要将相同类型的参数弄颠倒了,编译器和IDE都帮不上什么忙;

另一个不便之处就是无论你的函数声明、定义时参数的名字多么具有可读性和意义明显,编译之后就只剩类型信息了

然而Python提供了期待已久的根据参数名字传递参数的特性,基本解决了前面两个问题,观察一下下面这行代码:

pathCtrl = wx.TextCtrl(self, -1, "", (30, 50), (150, 20))

你知道,或者说你记得住(30, 50),(150, 20)哪一对是位置,那一对是大小吗?再看下面这一行

pathCtrl = wx.TextCtrl(self, -1, "", pos=(30, 50), size=(150, 20))

真是清晰舒适啊

分享到:
评论

相关推荐

    Beginning Python:Using Python 2.6 and Python 3.1

    ### 关于《Beginning Python:使用Python 2.6和Python 3.1》的知识点解析 #### 一、概述 本书《Beginning Python:使用Python 2.6和Python 3.1》是一本旨在帮助读者从零开始学习Python编程语言的基础书籍。作者...

    可爱的 Python:将 XML 和 Python结合起来

    可爱的 Python:将 XML 和 Python结合起来

    python:GAT 代码

    总的来说,"python:GAT 代码" 是关于使用 Python 实现 GAT 模型的项目,它结合了图神经网络和注意力机制的优点,为处理图数据提供了一种高效且灵活的解决方案。这个项目可能包含了从数据预处理到模型训练和评估的...

    Python:Python函数与模块教程

    在Python中,函数的定义使用`def`关键字,后跟函数名和圆括号内的参数列表。函数体包含在缩进的代码块中。例如: ```python def add_numbers(x, y): """ 计算两个数的和 参数: x (int): 第一个加数 y (int): ...

    Python毕业设计:车牌识别系统源码.zip

    Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python...

    Machine Learning with Python (Theory and Implementation)

    82篇顶会巨佬撰写的入门机器学习与深度学习的神书

    Python: Practical Python Programming For Beginners and Experts [2016]

    Python: Practical Python Programming For Beginners and Experts English | 9 July 2016 | ISBN: 1535192976 | 170 Pages Start work on your website, app, or search engine today with this practical Python ...

    07-1:Python课程 教程 进阶 PYTHON函数:参数列表、内存分配、设计原则、递归

    在本“07-1:Python课程 教程 进阶 PYTHON函数:参数列表、内存分配、设计原则、递归”的教程中,我们将深入探讨Python编程语言中的关键概念,特别是与函数相关的高级主题。这些主题对于任何希望在Python领域深化...

    Deep Learning with Python: A Hands-on Introduction

    Nikhil Ketkar, "Deep Learning with Python: A Hands-on Introduction" English | ISBN: 1484227654 | 2017 | 143 pages | PDF | 7 MB Discover the practical aspects of implementing deep-learning solutions ...

    python的License授权机制(csdn)————程序.pdf

    Python的License授权机制是软件开发中的重要组成部分,用于规定软件的使用、分发和修改条件。在Python中,开发者可以选择不同的开源或商业许可证来保护他们的代码,并决定用户如何与代码互动。以下是对Python ...

    《Python编程:从入门到实践》源代码文件

    《Python编程:从入门到实践》是一本广受欢迎的Python编程教材,旨在帮助初学者掌握Python语言的基础知识,并通过实际项目提升编程技能。该书涵盖了从基础语法到高级特性的全面教程,同时还提供了丰富的实践项目,使...

    dive-into-python3 (英文版)+深入python3(中文版)

    《深入Python3》则更注重对Python3的深入理解和进阶使用,不仅包含了基础概念,还深入探讨了Python3的内部机制。这本书可能涵盖类与对象的高级用法、装饰器、元类、垃圾回收、C扩展、并发编程、网络编程、数据库操作...

    Python 获得命令行参数的方法(推荐)

    本篇将介绍python中sys, getopt模块处理命令行参数 如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢? 需要模块:sys 参数个数:len(sys.argv) 脚本名: sys.argv[0] 参数1: sys...

    python参数魔法:可变参数与关键字参数深度解析

    ### Python参数魔法:可变参数与关键字参数深度解析 Python作为一种高级编程语言,在设计之初就致力于简化编程工作,提升开发效率。它所拥有的特点,如动态类型系统、自动内存管理、大型标准库以及开放源代码等,都...

    python微分方程拟合求解参数

    python微分方程拟合求解参数

    python内存管理机制

    ### Python内存管理机制详解 #### 一、引言 Python作为一种高级动态语言,在运行时创建和销毁大量对象的过程中,内存管理扮演着至关重要的角色。它不仅直接影响到程序的执行效率,还关系到资源的合理利用。本文将...

    dive into python (深入python)中文教程

    4. **函数**:了解如何定义和调用函数,以及参数传递机制,包括位置参数、关键字参数和默认参数。 5. **模块**:Python的模块化设计使得代码可重用性极高,学会导入和创建模块,可以提高代码的组织和管理。 6. **...

Global site tag (gtag.js) - Google Analytics