Python基础(五)-函数
函数:
1、定义与使用:
def 函数名(参数):
"函数_文档字符串"
函数体
...
return [表达式]
##
def:表示函数的关键字
函数名:函数名称,根据函数名调用函数
文档字符串:函数第一行可以选择性的使用文档字符串--用于存放函数说明
函数体:函数中进行一系列的逻辑计算
参数:为函数提供数据
return [表达式]:结束函数,选择性地返回一个值给调用者。不加返回内容,隐式返回None
2、函数的优点:
代码重用;
保持一致性,易维护;
可扩展
3、过程
定义:简单特殊没有返回值的函数
当函数没有使用return显示的定义返回值时,Python解释器会隐式的返回None
def test01():
pass def test02():
return 0 def test03():
return 0,10,'hello',['alex','lb'],{'WuDaLang':'lb'} t1=test01()
t2=test02()
t3=test03() print 'from test01 return is [%s]: ' %type(t1),t1
print 'from test02 return is [%s]: ' %type(t2),t2
print 'from test03 return is [%s]: ' %type(t3),t3
返回值数=1 返回object
返回值数>1 返回元组tuple
4、函数参数:
(1)形参:定义函数时的参数,只有在被调用时才分配内存单元,调用结束即刻释放内存。
形参只在函数内部有效,函数调用结束返回主调用函数后则不能再使用该形参变量
(2)实参:调用函数时的参数,可以是常量、变量、表达式、函数等,无论实参是哪种类型的值,在进行函数调用时,都必须 有确定的值,以便把这些值传送给形参。因此应预先赋值,输入等办法使参数获得确定值
(3)位置参数和关键字:
位置参数:标准调用,实参与形参位置一一对应,多或少都不行
关键字调用:位置无需固定,
混合使用时,位置参数必须在关键字参数左边,且不能重复赋值
(4)默认参数
在定义形参时,给参数一个确定的值,调用时不改动返回原值;若变动,返回变动后的值
5、局部变量与全局变量
局部变量:定义在子程序中的变量;作用域是定义该变量的子程序中
全局变量:定义在程序最外层的变量;作用域是整个程序中
一般使用全大写定义全局变量,全小写定义局部变量,用于区分
当二者同名时,局部变量起作用
使用global 加变量名 不管在什么位置都可直接调用全局变量,也可做修改,修改后全局生效
使用nonlocal调用上一级代码变量
6、前向引用(函数即变量)
def action():
print 'in the action'
logger()
action()
报错NameError: global name 'logger' is not defined def logger():
print 'in the logger'
def action():
print 'in the action'
logger() action() def action():
print 'in the action'
logger()
def logger():
print 'in the logger'
7、嵌套函数
函数中又定义函数
8、递归
如果一个函数在内部调用自己本身,那这个函数就是递归函数。
特性:
(1)必须有一个明确的结束条件
(2)每次进入更深一层递归时,问题规模相比上次递归都应有所减少
(3)递归效率不高,递归层次过多会导致内存溢出
def calc(n):
if int(n/2)==0:
return n
#m=calc(int(n/2)) #内部调用函数本身
#print(m)
#return m #只有返回常量时,函数才结束 a=int(n/2)
m=calc(a)
return(m)
calc(10)
#print(calc(10))
#print(calc(10000)) ##过程分析:
#第一次return(calc(5))相当于return内接着调用函数calc,且尚未return值,且接着调用函数calc;
#第二次n=calc(5)时,return(calc(2))内部接着调用calc函数,结果也没有return常量,继续调用calc;
#第三次n=calc(2)时,return(calc(1))内部继续调用calc函数,
#第四次n=calc(1) 此时 int(n/2)==0 满足条件,return 1,调用结束,并返回给函数,之后再一层一层返回
经典案例:
1.阶乘 : f(n)=n!=n * (n-1) * (n-2) * ... * 2 * 1
def f(n):
if n == 1:
return 1
a=n*f(n-1)
return a f(3) #f(3) -->return(3*f(2))
#f(2)--> return(2*f(1))
#f(1)-->return 1
9、高阶函数:
满足一下任意条件:1、函数穿入参数是一个函数名 2、函数返回是一个函数名
10、匿名函数与三元表达式
三元表达式:x=1 if x<1 else x=2 --> 如果(if x<a )为True则返回(x=1)否则返回(x=2)
匿名函数:通俗的讲就是没有函数名 lambda 定义
lamba x:x+1 -->返回(x+1)
通常与其他函数结合使用
11、函数式编程
Python基础(五)-函数的更多相关文章
- python基础之函数详解
Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...
- python基础——匿名函数
python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...
- python基础——返回函数
python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...
- python基础——sorted()函数
python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...
- python基础——filter函数
python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...
- python基础——匿名函数及递归函数
python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...
- 八. Python基础(8)--函数
八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x): ' ...
- Python学习笔记(一)python基础与函数
1.python基础 1.1输入与输出 输出 用print加上字符串,就可以打印指定的文字或数字 >>> print 'hello, world' hello, world > ...
- Python基础:函数
一.概述 二.声明.定义和调用 三.参数 1.参数传递 2.实参类型 3.形参绑定 四.返回值 五.名字空间与作用域 1.基本概念 2.名字空间 3.作用域 4.总原则 六.高级 1.装饰器 2.生成 ...
- Day3 - Python基础3 函数、递归、内置函数
Python之路,Day3 - Python基础3 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...
随机推荐
- linux下面配置安装nodejs+npm
linux下 多亏这一篇文章= =我就卡死在文章所说的这个点里 附大牛链接:http://blog.sitearth.com/nodejs%E4%B8%8A%E4%BD%BF%E7%94%A8mong ...
- Android 点击桌面快捷方式和Notifycation跳转到Task栈顶Activity
我们一般下载的应用在第一次启动应用的时候都会给我创建一个桌面快捷方式,然后我在网上找了些资料整理下了,写了一个快捷方式的工具类,这样我们以后要创建快捷方式的时候直接拷贝这个类,里面提供了一些静态方法, ...
- Dubbo源码学习--注册中心分析
相关文章: Dubbo源码学习--服务是如何发布的 Dubbo源码学习--服务是如何引用的 注册中心 关于注册中心,Dubbo提供了多个实现方式,有比较成熟的使用zookeeper 和 redis 的 ...
- 日志快速筛选 之 linux命令grep|uniq|wc|awk
以前我个人的观念是,在线上运行的东西尽量不要记什么流水日志. 但是后来我变了,发现在线上记日志是一个绝对有必要的东西,尤其是在当下很流行的微服务的推动下,没有日志的帮助,犹如一个睁眼瞎,排查问题基本靠 ...
- [ios2]ios RSA
http://blog.iamzsx.me/show.html?id=155002 http://www.theosoft.net/ http://blog.sina.com.cn/s/blog_5f ...
- quagga源码分析--路由信息处理zebra-rib
对于各个协议生成的路由信息的处理属于quagga中非常重要的一个功能,如何在内核进行路由增加,更新,删除是一个复杂的过程. quagga在thread任务调度中加入了一种工作队列,work_queue ...
- eclipse中svn插件的安装和tortoiseSVN的安装
在项目的开发中一般都需要用到版本控制,其中用的比较多的就是svn(subVersion),svn的使用既可以以插件的形式,也可以以客户端的形式使用.今天就介绍一下eclipse中svn插件的2种安装方 ...
- Atitti 图像处理 特征提取的科技树 attilax总结
Atitti 图像处理 特征提取的科技树 attilax总结 理论 数学,信号处理,图像,计算机视觉 图像处理 滤波 图像处理 颜色转换 图像处理 压缩编码 图像处理 增强 图像处理 去模糊 图像处理 ...
- UVALive 7141 BombX
离散化,线段树.$2014$年$ACM/ICPC$亚洲区域赛上海站$D$题. 可以处理出炸任意相邻的$h$行能消灭的点的数量,以及炸任意相邻的$w$列能消灭的点的数量,分别用$py[i]$和$px[i ...
- shell 读取文件
#!/bin/bash content=`cat test.txt` echo "begin" for i in $content do echo $i done 读取前10行 t ...