专栏名称: 马哥Linux运维
马哥linux致力于linux运维培训,连续多年排名第一,订阅者可免费获得学习机会和相关Linux独家实战资料!
目录
相关文章推荐
InfoQ架构头条  ·  “天价”ERP ... ·  3 天前  
51好读  ›  专栏  ›  马哥Linux运维

Python3急速入门(三)函数与lambda表达式、闭包

马哥Linux运维  · 公众号  · 运维  · 2017-04-02 10:37

正文

函数 是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。

  • 函数代码块以def关键词开头,后接函数标识符名称和圆括号()

  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数

  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明

  • 函数内容以冒号起始,并且缩进

  • Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None

一、函数的定义:

若采用默认参数定义函数,调用函数时,缺省参数的值如果没有传入,则被认为是默认值:

不定长参数。加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可:

所有参数(自变量)在Python里都是按引用传递。如果在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None

内部函数。函数体内可以再定义函数:

二、函数变量作用域

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中

三、Python闭包

如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量

 

四、匿名函数

python 使用 lambda 表达式来创建匿名函数

lambda只是一个表达式,函数体比def简单很多

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去

lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数

虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率

lambda函数的语法只包含一个语句: lambda [arg1 [,arg2,.....argn]]:expression 

使用如下:

五、内置函数filter的使用:

官方文档内容如下:

filter(function, iterable)

Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.

function参数可传入None、函数、lambda表达式,iterable参数传入一个可迭代对象。

若function参数为None:返回可迭代对象中所有不为False的元素

若function参数为函数或lambda表达式:返回  将元素作为函数参数、函数返回值为True  的元素

今日值班老师


马哥教育一号女神老师,懂IT更懂IT男。
专注解决Linux技术难题,是天生的技术专家。
如果你正好遇到了问题,为什么不找她求助一下?

豌豆

Linux面授班,报名优惠400元,只有10个名额