函数:

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基础(五)-函数的更多相关文章

  1. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  2. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  3. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  4. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  5. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  6. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  7. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

  8. Python学习笔记(一)python基础与函数

    1.python基础 1.1输入与输出 输出 用print加上字符串,就可以打印指定的文字或数字 >>> print 'hello, world' hello, world > ...

  9. Python基础:函数

    一.概述 二.声明.定义和调用 三.参数 1.参数传递 2.实参类型 3.形参绑定 四.返回值 五.名字空间与作用域 1.基本概念 2.名字空间 3.作用域 4.总原则 六.高级 1.装饰器 2.生成 ...

  10. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

随机推荐

  1. reading words in your computer and changing to female voice, linux festival text2wave saving wav files

    on a brand new linux PC, e.g. ubuntu 14.04 amd64 To hear voice sudo apt-get install festival -y then ...

  2. 关于JdbcTemplate的queryForList返回值

    通过spring的jdbctemplate返回的list其实封装的是需要通过如下方法得到里面的内容的 public void getAllUsers() { List allUsers = new A ...

  3. [修]python普通继承方式和super继承方式

    [转]python普通继承方式和super继承方式 原文出自:http://www.360doc.com/content/13/0306/15/9934052_269664772.shtml 原文的错 ...

  4. mmap学习

    mmap学习 内存页: Linux是以页为单位来管理物理内存的,一页大小一般等于4096字节.页容量越大,系统中可能存在的内存碎片就越多. mmap将一个磁盘上的文件或者对象映射进内存.文件被映射到多 ...

  5. 通过qsort(void * lineptr[], int left, int rifht, int (*comp)(void *, void *))解读指针函数和void指针

    原函数是<The C programint  language >5.11文本行排序的程序,如下: void qsort(void *v[], int left, int right, i ...

  6. Linux系统 nfs 共享及 挂载mount 配置

    要把 A服务器(192.168.1.1)的 /home 目录挂载到 B服务器(192.168.1.2)的/mnt目录 我们先在 A 服务器上编辑/etc/exports 文件, 添加下面这行代码 /h ...

  7. LearnCpp.com

    LearnCpp.com is a totally free website devoted to teaching you to program in C++. Whether you’ve had ...

  8. .NET基础——方法

    这一篇,我们来学习C#中的方法——函数 1.  方法的功能  方法的功能:用来复用代码的,当我们在一个程序中反复的写了同样的代码,我们就可以把需要重复写的代码定义在一个方法中,用到的时候只需要调用就可 ...

  9. [ios-必看] WWDC 2013 Session笔记 - iOS7中的多任务【转】

    感谢:http://onevcat.com/2013/08/ios7-background-multitask/ http://www.objc.io/issue-5/multitasking.htm ...

  10. 【Java每日一题】20170111

    20170110问题解析请点击今日问题下方的"[Java每日一题]20170111"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...