2、Python函数详解(0601)
函数的基础概念
1、函数是python为了代码最大程度的重用和最小化代码冗余而提供的基本程序结构;
2、函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件;
3、函数用于将相关功能打包并参数化;
4、在python中可以创建4中函数:
- 全局函数:定义在模块中
- 局部函数:嵌套于其他函数中
- lambda函数:表达式
- 方法:与特定数据类型关联的函数,并且只能与数据类型关联一起使用
5、python提供了很多内置函数
函数和过程的区别:函数都有return返回值,在python中,通常都有返回对象
创建函数
1、语法:
def functionName(parameters):
suite
2、一些相关的概念
- def 是一个可执行的语句
- 因此可以出现在任何能够使用语句的地方,甚至可以嵌套于其他语句,例如 if 或 while 中
- def 创建了一个对象并将其赋值给一个变量名(即函数名)
- return用于返回结果对象,其为可选;无return语句的函数自动返回None对象;
- 返回多个值时,彼此间用逗号隔开,且组合为元组形式返回一个对象;
- def语句运行之后,可以在程序中通过函数后附件括号进行调用,比如f1()
函数:名称空间
一个变量所能够生效的范围,就叫做变量的作用域,这个作用域通常称之为名称空间
函数作用域
1、python创建、改变或查找变量名都是在名称空间中进行;
2、在代码中变量名被赋值的位置决定了其能被访问到的范围
3、函数定义了本地作用域,而模块定义了全局作用域
- 每个模块都是一个全局作用域,因此,全局作用域的范围仅限于单个程序文件;
- 每次对函数的调用都会创建一个新的本地作用域,赋值的变量除非声明为全局变量,否则均为本地变量;
- 所有的变量名都可以归纳为本地、全局或内置的(由__bulitin__模块提供)
变量名解析:LEGB原则
变量名引用分三个作用域进行:首先是本地、之后是函数内、接着是全局,最后是内置
作用域越小,变量的优先级越高
Python闭包:在函数嵌套时,如果直接返回内层函数的话,同时如果内层函数调用了外层函数的变量,内层函数会自动记忆外层函数的变量,这种机制就叫做函数的闭合,也就是所谓的工厂函数
闭包法则:定义在外层函数内,但是却由内层函数引用的变量,在外层函数返回时,如果外层函数直接返回了内层函数作为返回结果,再次调用内层函数可以直接使用外层函数原有的变量,内层函数实现记忆的效果
参数传递
1、参数的传递是通过自动将对象赋值给本地变量实现的
2、不可变参数通过“值”进行传递
- 在函数内部改变形参的值,只是让其引用了另一个对象
3、可变参数通过“指针”进行传递
- 在函数内部改变形参的值,将直接修改引用的对象
4、有两种方式可避免可变参数被函数修改:
- 直接传递可变对象的副本:testFunc(A,B[:])
- 在函数内部创建可变参数的副本:B=B[:]
尽可能不要在函数内部修改传递过来的可变对象,使用对象复制可以避免
参数匹配模型
1、默认情况下,参数通过其位置进行传递,从左至右,这意味着必须精确的传递和函数头部一样多的参数;
2、但也可以通过关键字参数、默认参数或参数容器等改变这种机制
- 位置:从左至右
- 关键字参数:使用 “name=value” 的语法通过参数名进行匹配
- 默认参数:定义函数时使用 “name=value” 的语法直接给变量一个值,从而传入的值可以少于参数个数
- 可变参数:定义函数时使用 * 开头的参数,可用于收集任意多基于位置或关键字的参数
- 可变参数解包:调用函数时,使用 * 开头的参数,可用于将参数集合打散,从而传递任意多基于位置或关键字的参数
参数传递形式
位置参数:从左向右
关键字参数:按关键名称匹配
位置和关键字混用,混用上面两种方式时,所有位置参数,所有的关键字参数
定义函数时使用默认参数:有默认值的参数
混用有默认和无默认值的参数时,无默认值的应该放在前面
调用函数时使用可变参数要求:定义函数时使用
使用*:收集位置参数
使用**:收集关键字参数
可变参数解包:是在调用函数时,这个和上面的可变参数相反,可变参数是定义函数时使用 调用是为了分解,定义是为了整合
当变量、列表和字典混用时,无论是调用函数还是定义函数,一定是按照特定次序的,即次序是位置-->任意位置-->任意关键字
匿名函数lambda
1、lambda运算符
- lambda args:expression
- args:以逗号分割的参数列表
- expression:用到args中各参数的表达式
- lambda语句定义的代码必须是合法的表达式,不能出现多条件语句(可使用if的三元表达式)和其他非表达式语句,如for和while等
- lambda的首要用途是指定短小的回调函数
- lambda将返回一个函数而不是将函数赋值给某变量名
2、注意:
- lambda是一个表达式而非语句
- lambda是一个单个表达式,而不是一个代码块
3、def语句创建的函数将赋值给某变量名,而lambda表达式则直接返回函数
4、lambda也支持使用默认参数
可以把每一种处理机制定义成lambda,然后对这个数据对象掉调用lambda
python的函数式是编程内置的几个直接实现将函数应用在其他数据尤其是序列上的机制
python函数式编程
1、函数时编程
也称作泛函编程,是一种编程范型
它将电脑运算是为数学上的函数计算,并且避免状态以及可变数据
函数式编程语言最重要的基础式lambda演算,而且lambda演算的函数可以接受函数当作输入和输出
2、python支持有限的函数式编程功能
把函数当参数传递给另一个参数
filter()
fliter (func,seq):fliter过滤 func函数 seq序列 功能:把func应用在seq的每一个元素上,并返回一个新序列。
func时一个二元函数,也叫布尔函数,seq的值被布尔函数func判断以后,能够识别true或false,如果seq序列中的值可以使func的结果为真,则返回这个seq序列的值,最后形成一个的元素列表
过滤器
- filter()为已知的序列的每个元素调用给定的布尔函数
- 调用中,返回值为非零值的元素将被添加至一个列表中
练习:返回/etc/passwd中包含了/bin/bash字串的所有用户名为一个列表
map()
1、映射器
- map()将函数调用“映射”到每个序列的对应元素上,并返回一个含有所有返回的列表
2、带有单个列表的map()
3、带有多个队列的map()
将不同列表的同一个位置的元素整合成一个元组,最后生成一个元组列表,
生成的元组列表是经过map对每个序列同一位置的元素计算过后得到的;
map (func,seq1[,seq2...]) 将函数func应用在给定的序列上,并用一个列表来提供返回值;如果func为none,则func表现为一个身份函数,返回一个含有每个序列中元素集合的n个元组的列表。
map的目的是做映射,做映射的结果就是生成元组列表
让两个列表快速的构建成元素列表就用map 让每个元素都乘以2并返回这个元素本身
reduce()
reduce (func,seq[,init]) 将二元函数作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值;如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素,即如果由初始值,就计算初始值和第一个元素,如果没有初始值就计算第一个元素和第二个元素。
reduce一定是接受两个参数,返回一个值。
转载于:https://www.cnblogs.com/hanshanxiaoheshang/p/9367121.html
2、Python函数详解(0601)相关推荐
- python函数详解
写在篇前 函数能提高应用的模块性,和代码的重复利用率,是编程必须具备的基本抽象能力.python函数更是奇妙灵活,与很多特性值得探讨,本篇文章就来详细看看python 函数那些巧妙之处.首先,在篇 ...
- Python函数详解:函数定义、调用,lambda函数,高阶函数map,filter,reduce,函数式编程,模块化设计、代码复用、函数递归、enumerate()
一.函数 函数是一段具有特定功能的.可重用的语句组,通过函数名来表示和调用. 函数是一段代码的抽象和封装 函数是一段具有特定功能的.可重用的语句组 函数是一种功能的抽象,表达特定功能 两个作用:降低编 ...
- Python 函数详解
作用域 全局变量&局部变量 全局变量和局部变量都是在讨论无参数的函数,不要把全局变量和局部变量与函数的参数混淆了. 1.1 函数会在函数域中找变量(局部变量),如果函数内部没有定义该变量,则会 ...
- python函数详解_Python函数详解(转)
原地址:http://www.ithov.com/linux/100534_2.shtml 摘要:Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多 ...
- 【python入门篇——16】Python函数详解(函数定义,参数种类、返回值、作用域等)
一 函数 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 1.代码重用2.保持一致性3.可扩展性 二 函数的创建 2.1 格式: Pyt ...
- python函数详解_INDEX函数
一. 函数的作用 函数就是将一段具有独立功能的代码块 整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求. 函数在开发过程中,可以更高效的实现代码重用. 二. 函数的使用步骤 1. 定义 ...
- python基础知识~ 函数详解2
python~函数详解2 1 生成器函数 定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数 须知 yield和return一样,都可以返回数 ...
- python平方数迭代器_对python中的高效迭代器函数详解
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...
- Python之pandas:pandas中缺失值与空值处理的简介及常用函数(drop()、dropna()、isna()、isnull()、fillna())函数详解之详细攻略
Python之pandas:pandas中缺失值与空值处理的简介及常用函数(drop().dropna().isna().isnull().fillna())函数详解之详细攻略 目录 pandas中缺 ...
最新文章
- [生物] - 怎样理解细胞分裂次数是有限制的
- 伪共享(false sharing),并发编程无声的性能杀手
- Good String
- 用JAVA语言创建链表的方法
- oracle %date 0 10%,“date:~0,10%“是什么意思?
- cocos2d 解密ccbi_cocos2d-x高级学习
- 算法导论 pdf_学习数据结构和算法最好的书是什么?
- WDM驱动程序入门(1)-Hello WDM
- AD7124-4/8芯片的模拟通道、基准、顺从电压、测三线制RTD电路等注意事项
- php根据两点经纬度计算距离
- 数据库第6章总结——关系数据理论
- FIL新一轮上涨:FIL算力通证迎来新热潮
- php面包屑源码,推荐两款好用的WordPress面包屑插件
- 网络安全中接口测试的解决方案
- 国标GB/T28181视频流媒体网页无插件直播服务4G摄像头无插件直播国标GB28181协议注册、心跳和注销协议说明介绍
- 布局优化类毕业论文文献都有哪些?
- quest3D中解决鼠标移动到物体上弹出文字
- linux u盘 慢_Linux系统下测U盘(USB口)速度的工具和方法
- 一个简单的纸牌小游戏
- Activiti笔记