python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程

1. 函数定义

def test(x)
# discription
y = 2 * x
return y

  返回一个值,则返回原本的object;  

  过程与函数的区别,过程无return返回值,但是python会自动赋予一个None返回值。

def test(x)
# discription
y = 2 * x
print(y)

  若返回多个值,python会将多个元素包装成一个元组,并返回。即实际上仍然只返回一个值。

  函数只要碰到第一个return就会结束调用。

2. 传参数的方法

  位置参数,一一对应

  关键字参数,不须一一对应

test(x=5)

  混用位置参数与关键字参数时,位置参数必须位于关键字参数前面,且同一个形参不能传多个值。

3. 参数组

  可变长短的参数,*args,**kwargs

  *的作用就是for循环取参数

def test(x,*args)
print(x)
print(args[1]) test(1,2,3,4,5,6)
test(1,[2,3,4,5])  #传入整个列表作为一个整体
test(1,*[2,3,4,5])  #传入列表中的单个元素

  **kwargs处理键值对,字典

def test(x,**kwargs)
print(x)
print(kwargs) test(1,y=2,z=3)

  连起来用,*args必须位于**kwargs前面

def test(x,*args,**kwargs)
print(x)
print(args)
print(kwargs) test(1,2,3,5,66,y=2,z=3)
test(1,*[1,1,2,3],**{'y':1})

4. 默认参数

  如果定义函数时指定了默认参数,则在调用时可指定该参数,也可忽略该参数。

def test(x,y,z=2):
print(x,y,z) test(1,2) test(1,2,5)

5. 递归函数

  递归类似函数递推公式:

# recursion
def calc(n):
print(n)
if int(n/2) == 0:
return n
else:
return calc(int(n/2)) calc(10)

  函数递归调用过程如下图所示,递归函数重复调用自身,相当于重复调用子函数,当最终嗲用结束时,最内层的子函数返回值逐层返回给各个子函数

6. 函数作用域

  一个函数在调用时,不管在哪里调用,都只与该函数在定义时有关系。嵌套定义的函数必须从外层到内层逐层调用,不可只运行嵌套定义的子函数。

def foo():
name = 'abc'
def bar():
name = 'xyz'
print(name)
def tt():
print(name)
return tt
return bar print(foo()()())

7. 匿名函数

  匿名函数使用lambda关键词定义,需将lambda赋值给一个变量才能调用该匿名函数,lambda会自动将冒号后面的内容return返回给函数句柄。

# the next two functions are of the same function
# first
def calc(x):
return x+1
# second
func = lambda x:x+1
# lambda(10) is wrong
print(func(10))
  1. lambda匿名函数的定义相当于一个值,如果不赋值给一个变量,则此匿名函数会在定义后在内存里立即被释放
  2. lambda函数不能返回复杂逻辑,只能返回一行,一个确定的最终的结果
  3. 若需要返回多个值,则需要手动组成一个元组,这里与用def定义的函数不同
lambda x,y,z:(x+1,y+1,z+1)

8. 编程风格(方法论)

  1. 面向过程编程
  2. 函数式编程
    1. 不用变量保存状态,不修改变量
    2. 函数即变量地址
    3. 高阶函数:函数接收的参数是函数名,或函数的返回值中包含函数
    4. 尾调用优化:函数在最后一步调用另一个函数
  3. 面向对象编程

python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程的更多相关文章

  1. python开发基础04-函数、递归、匿名函数、高阶函数、装饰器

    匿名函数 lamba lambda x,y,z=1:x+y+z 匿名就是没有名字 def func(x,y,z=1): return x+y+z 匿名 lambda x,y,z=1:x+y+z #与函 ...

  2. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  3. python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)

    *** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...

  4. python学习笔记5-自定义函数

    1 自定义函数  (1)函数代码块以def关键字开头,然后函数标识符名称和圆括号  (2)任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数  (3)函数的第一行语句可以选择性的使用文 ...

  5. python全栈开发-Day12 三元表达式、函数递归、匿名函数、内置函数

    一. 三元表达式 一 .三元表达式 仅应用于: 1.条件成立返回,一个值 2.条件不成立返回 ,一个值 def max2(x,y): #普通函数定义 if x > y: return x els ...

  6. python之三元表达式、列表推导、生成器表达式、递归、匿名函数、内置函数

    目录 一 三元表达式 二 列表推到 三 生成器表达式 四 递归 五 匿名函数 六 内置函数 一.三元表达式 def max(x,y): return x if x>y else y print( ...

  7. python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数

    三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...

  8. day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...

  9. python之路day10-命名空间和作用域、函数嵌套,作用域链、闭包

    楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print ...

  10. Python 对象(type/object/class) 作用域 一等函数 (慕课--Python高级,IO并发 第二章)

    在python中一共有两种作用域:全局作用域和函数作用域全局作用域:在全局都有效,全局作用域在程序执行时创建,在程序执行结束时销毁:所有函数以外的区域都是全局作用域:在全局作用域中定义的变量,都属于全 ...

随机推荐

  1. TeleportPoint可瞬移的目标位置

    TeleportPoint.png 最外部的组件: Animation: 包含了该装置的几个动画Teleport Point: 点传送的脚本 teleport_marker_mesh: 外部的圆柱形光 ...

  2. CentOS 7 挂载ntfs分区!

    装好centos7发现可以看到分区,可是打不开,还是得用ntfs-3g 官网下好 http://www.tuxera.com/community/ntfs-3g-download/ 然后解压tar - ...

  3. js委托事件-addEventListeners(冒泡方向)

    JQuery中live().delegate().on()事件都能给新增元素绑定事件,原理就是用了事件委托. 实例: 给id为div的元素绑定一个click委托,如果冒泡上来的元素是P元素就会执行al ...

  4. http://elasticsearch-py.readthedocs.io/en/master/api.html

    API Documentation All the API calls map the raw REST api as closely as possible, including the disti ...

  5. 虚拟机安装(Cent OS)

    转载:http://www.cnblogs.com/kkdd-2013/p/3973807.html 0 前言 本篇主要介绍在虚拟机VMware上安装CentOS6.5的过程,并且在自己电脑上安装成功 ...

  6. (1)Redis 基本类型

    https://redis.io/ http://redisdoc.com/  中文 一. 库 redis默认16个库,0-15.默认端口号 6379 使用某个库  测试服务器是否连通 ping // ...

  7. 9. DMA

    9.1 介绍 Direct memory access(DMA) 直接存储器访问. 这两个DMA控制器总共有16个流(每个控制器8个),每个流用于管理来自一个或多个外围设备的内存访问请求.每个流总共可 ...

  8. struts基础

    六个基本包 struts2-core-2.1.6.jar :开发的核心类库 freemarker-2.3.13.jar :struts2的UI标签的模板使用freemarker编写 commons-l ...

  9. Java 序列化和反序列化(一)Serializable 使用场景

    目录 Java 序列化和反序列化(一)Serializable 使用场景 1. 最简单的使用:Serializable 接口 2. 序列化 ID 的问题 3. 静态字段不会序列化 4. 屏蔽字段:tr ...

  10. Java架构师必看的10本书

    1.大型网站系统与JAVA中间件实践 本书围绕大型网站和支撑大型网站架构的Java中间件的实践展开介绍. 从分布式系统的知识切入,让读者对分布式系统有基本的了解:然后介绍大型网站随着数据量.访问量增长 ...