首发于 Python 入门教程

Python入门 函数 提高篇

一、匿名函数 lambda

lambda 匿名函数,他是一种比def更简单的函数,该函数的定义逻辑非常简单,函数体只能有一个表达式,返回结果为表达式的值。

1、lambda 匿名函数定义

lambda [参数1[,参数2,.....参数n]]:表达式

实例:

释:可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x*x+1为函数体,用函数来表示为:

非常容易理解,在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。

2、lambda 匿名函数的 if...else..

lambda expression1 if condition else expression2
释义:如果condition 为True,条件表达式的结果为expression1,否则为expression2

示例:

注意:lambda 并不会给程序运行效率的提高,只会使代码简洁些,非常简单的函数可以使用lambda。 如果需要使用到for...in...或if...else... ,最好不用lambda,它对代码的可读性和可重用性影响很大。 复杂的lambda是逗B用来炫技的。

3、lambda 匿名函数灵活运用

lambda 匿名函数使Python3的有些类和函数使用更加灵活。如:filter, map, reduce

filter(function,sequence) 过滤筛选类,他能过滤筛选序列中的数据,Python2返回list列表,Python3返回可迭代对象。


map(function,sequence) 将function调用映射到每个序列的对应元素上,Python2返回所有值的列表,Python3返回可迭代对象。


reduce(function,sequence,[initial]) 累积函数,function有两个参数,如无initial值,取sequence第一个元素与第二个为function参数,有则initial值作为第一个参数,sequence的第一个参数作为第二个参数。function返回值作为下次调用的第一个参数,取sequence中没选取的后一个参数作为函数第二个参数,依次类推将结果积累返回。

示例:

输出结果:

[18, 12, 6] [12, 46, 28, 24, 44, 34, 22]
70
71


二、Python函数的可变参数(*args, **kwargs)

如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数。可变参数有序列可变与关键字可变。

1、*args 序列可变参数

序列可变参数定义格式如下:

:args加了星号(*)的参数名会存放所有未命名的不带键的参数,将这些参数转换为一个元组存储在args中。我们选择传入0~n个不带键的参数。

注意:序列可变参数中的args传入参数可以是元组或列表,也可以只不带关键字的任意多个参数。

示例:

输出结果:

Bobo: woodman:80,90,man, Helen:('女', 20), Baby:女,20, Baby:女,20,

注意:第7、8行 说明可变参数可以传入任意值;第11行调用函数variablefun('Helen', tuple1),传入的是整个元组,函数会认为是一个元组参数 ('女', 20);第13行variablefun('Baby', *tuple1)传入参数元组前加了星号,程序会将元组数据拆开,按照顺序传入数据,*tuple1 传入的是两个参数‘女’和 20 。


2、**kwargs 键对值可变型参数

序列可变参数定义格式如下:

:kwargs 加了星号(**)的参数名会存放所有未命名的带有键对值的变量参数,将这些参数转换为一个字典存储在kwargs 中。我们选择传入0~n个带有键值对的参数。

注意:键对值可变参数中的kwargs 传入参数可以是字典,也可以是任意带关键字的参数。

示例:

输出结果:

name: woodman ---------- name: Bob sex : 男 ---------- name: Alan sex : 男 class : 2016012 ---------- name: Heln sex : 女 score : 89 ----------

注意:最后一行,我们将参数name也放入了字典tuple2中,通过**tuple2传入函数,这样也是可用的。

三、变量作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,在哪里赋值决定了该变量的作用域。

Python的作用域一共有4种,分别是:

L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域

变量的查找以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这这些语句内定义的变量,外部也可以访问。

示例:

1、全局变量和局部变量

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

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

示例:

输出结果:

5
函数内是局部变量total : 30
函数外是全局变量total : 0

注意:第4行print(total2)访问了total2,访问后我不能在对total2赋值; 第5行total = arg1 + arg2我们在函数内改变了total的值,total成为了函数内的局部变量,它并不会影响全局变量total 的值。

2、global 和 nonlocal关键字(了解)

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

示例:

输出结果

123
456

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了

示例:

输出结果:

10
100

函数基础篇: Python入门 函数 基础篇


2019年3月28日,第一次修改,增加思维导图

深圳SEO优化公司海南建网站公司大鹏营销网站公司黔西南高端网站设计推荐阜新企业网站设计价格阜阳SEO按天收费石岩网站seo优化多少钱衡水关键词按天收费推荐成都外贸网站制作哪家好红河阿里店铺托管孝感网站制作价格赤峰网站优化推荐深圳百搜标王赣州百度竞价价格包头网页制作哪家好德宏网页设计多少钱福永网络营销多少钱保山建站庆阳网站开发哪家好达州网站优化哪家好玉林百度seo南充seo网站优化多少钱黔南网站建设设计价格包头网站建设设计公司永州百度网站优化排名价格张北品牌网站设计公司淄博网站优化报价海口企业网站制作价格宁德网站搭建推荐菏泽高端网站设计多少钱海南外贸网站建设歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化