• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > 跟老齐学Python之大话题小函数(1)

跟老齐学Python之大话题小函数(1)

作者:hebedich 字体:[增加 减小] 来源:互联网

hebedich 通过本文主要向大家介绍了跟老齐学python,跟老齐学python pdf,跟老齐学python下载,老齐 python,零基础学python 老齐等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

开篇就要提到一个大的话题:编程范型。什么是编程范型?引用维基百科中的解释:
编程范型或编程范式(英语:Programming paradigm),(范即模范之意,范式即模式、方法),是一类典型的编程风格,是指从事软件工程的一类典型的风格(可以对照方法学)。如:函数式编程、程序编程、面向对象编程、指令式编程等等为不同的编程范型。

编程范型提供了(同时决定了)程序员对程序执行的看法。例如,在面向对象编程中,程序员认为程序是一系列相互作用的对象,而在函数式编程中一个程序会被看作是一个无状态的函数计算的串行。
 
正如软件工程中不同的群体会提倡不同的“方法学”一样,不同的编程语言也会提倡不同的“编程范型”。一些语言是专门为某个特定的范型设计的(如Smalltalk和Java支持面向对象编程,而Haskell和Scheme则支持函数式编程),同时还有另一些语言支持多种范型(如Ruby、Common Lisp、Python和Oz)。
 
编程范型和编程语言之间的关系可能十分复杂,由于一个编程语言可以支持多种范型。例如,C++设计时,支持过程化编程、面向对象编程以及泛型编程。然而,设计师和程序员们要考虑如何使用这些范型元素来构建一个程序。一个人可以用C++写出一个完全过程化的程序,另一个人也可以用C++写出一个纯粹的面向对象程序,甚至还有人可以写出杂揉了两种范型的程序。
</div>

不管看官是初学者还是老油条,都建议将上面这段话认真读完,不管理解还是不理解,总能有点感觉的。

这里推荐一篇文章,这篇文章来自网络:《主要的编程范型》

扯了不少编程范型,今天本讲要讲什么呢?今天要介绍几个python中的小函数,这几个函数都是从函数式编程借鉴过来的,它们就是:

filter、map、reduce、lambda、yield

有了它们,最大的好处是程序更简洁;没有它们,程序也可以用别的方式实现,只不过麻烦一些罢了。所以,还是能用则用之吧。

lambda

lambda函数,是一个只用一行就能解决问题的函数,听着是多么诱人呀。看下面的例子:
>>> def add(x):     #定义一个函数,将输入的变量增加3,然后返回增加之后的值
...     x +=3
...     return x
...
>>> numbers = range(10)
>>> numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  #有这样一个list,想让每个数字增加3,然后输出到一个新的list中

>>> new_numbers = []
>>> for i in numbers:
...     new_numbers.append(add(i))  #调用add()函数,并append到list中
...
>>> new_numbers
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
</div>

 在这个例子中,add()只是一个中间操作。当然,上面的例子完全可以用别的方式实现。比如:
>>> new_numbers = [ i+3 for i in numbers ]
>>> new_numbers
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
</div>

 首先说明,这种列表解析的方式是非常非常好的。

但是,我们偏偏要用lambda这个函数替代add(x),如果看官和我一样这么偏执,就可以:
>>> lam = lambda x:x+3
>>> n2 = []
>>> for i in numbers:
...     n2.append(lam(i))
...
>>> n2
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
</div>

 这里的lam就相当于add(x),请看官对应一下,这一行lambda x:x+3就完成add(x)的三行(还是两行?),特别是最后返回值。还可以写这样的例子:
>>> g = lambda x,y:x+y  #x+y,并返回结果
>>> g(3,4)
7
>>> (lambda x:x**2)(4)  #返回4的平方
16
</div>

 通过上面例子,总结一下lambda函数的使用方法:
 •在lambda后面直接跟变量
 •变量后面是冒号
 •冒号后面是表达式,表达式计算结果就是本函数的返回值
 
为了简明扼要,用一个式子表示是必要的:
lambda arg1, arg2, ...argN : expression using arguments
</div>

 要特别提醒看官:虽然lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值,但是lambda 函数不能包含命令,包含的表达式不能超过一个。不要试图向 lambda 函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。

就lambda而言,它并没有给程序带来性能上的提升,它带来的是代码的简洁。比如,要打印一个list,里面依次是某个数字的1次方,二次方,三次方,四次方。用lambda可以这样做:
>>> lamb = [ lambda x:x,lambda x:x**2,lambda x:x**3,lambda x:x**4 ]
>>> for i in lamb:
...     print i(3),
...
3 9 27 81
</div>

 lambda做为一个单行的函数,在编程实践中,可以选择使用。根据我的经验,尽量少用,因为它或许更多地是为减少单行函数的定义而存在的。

map

先看一个例子,还是上面讲述lambda的时候第一个例子,用map也能够实现:
>>> numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]      #把列表中每一项都加3

>>> map(add,numbers)                #add(x)是上面讲述的那个函数,但是这里只引用函数名称即可
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

>>> map(lambda x: x+3,numbers)      #用lambda当然可以啦
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
</div>

 map()是python的一个内置函数,它的基本样式是:map(func, seq),func是一个函数,seq是一个序列对象。在执行的时候,序列对象中的每个元素,按照从左到右的顺序,依次被取出来,并塞入到func那个函数里面,并将func的返回值依次存到一个list中。

在应用中,map的所能实现的,也可以用别的方式实现。比如:
>>> items = [1,2,3,4,5]
>>> squared = []
>>> for i in items:
...     squared.append(i**2)
...
>>> squared
[1, 4, 9, 16, 25]

>>> def sqr(x): return x**2
...
>>> map(sqr,items)
[1, 4, 9, 16, 25]

>>> map(lambda x: x**2,items)
[1, 4, 9, 16, 25]

>>> [ x**2 for x in items ]     #这个我最喜欢了,一般情况下速度足够快,<

您可能想查找下面的文章:

  • 跟老齐学Python之使用Python查询更新数据库
  • 跟老齐学Python之使用Python操作数据库(1)
  • 跟老齐学Python之编写类之二方法
  • 跟老齐学Python之编写类之一创建实例
  • 跟老齐学Python之关于类的初步认识
  • 跟老齐学Python之传说中的函数编写条规
  • 跟老齐学Python之总结参数的传递
  • 跟老齐学Python之变量和参数
  • 跟老齐学Python之重回函数
  • 跟老齐学Python之Python文档

相关文章

  • Python 性能优化技巧总结
  • 用ReactJS和Python的Flask框架编写留言板的代码示例
  • Python的Tornado框架的异步任务与AsyncHTTPClient
  • 在MAC上搭建python数据分析开发环境
  • Python中死锁的形成示例及死锁情况的防止
  • Python中有趣在__call__函数
  • python实现网页链接提取的方法分享
  • Python中将字典转换为XML以及相关的命名空间解析
  • Django imgareaselect手动剪切头像实现方法
  • Python注释详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python常用模块介绍
    • Python的ORM框架中SQLAlchemy库的查询操作的教程
    • wxPython 入门教程
    • Python如何实现文本转语音
    • ubuntu系统下 python链接mysql数据库的方法
    • Python中数字以及算数运算符的相关使用
    • python脚本爬取字体文件的实现方法
    • 解析Python中的二进制位运算符
    • Python 冒泡,选择,插入排序使用实例
    • 基于python实现的抓取腾讯视频所有电影的爬虫

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有