python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程
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))
- lambda匿名函数的定义相当于一个值,如果不赋值给一个变量,则此匿名函数会在定义后在内存里立即被释放
- lambda函数不能返回复杂逻辑,只能返回一行,一个确定的最终的结果
- 若需要返回多个值,则需要手动组成一个元组,这里与用def定义的函数不同
lambda x,y,z:(x+1,y+1,z+1)
8. 编程风格(方法论)
- 面向过程编程
- 函数式编程
- 不用变量保存状态,不修改变量
- 函数即变量地址
- 高阶函数:函数接收的参数是函数名,或函数的返回值中包含函数
- 尾调用优化:函数在最后一步调用另一个函数
- 面向对象编程
python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程的更多相关文章
- 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 #与函 ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)
*** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...
- python学习笔记5-自定义函数
1 自定义函数 (1)函数代码块以def关键字开头,然后函数标识符名称和圆括号 (2)任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 (3)函数的第一行语句可以选择性的使用文 ...
- python全栈开发-Day12 三元表达式、函数递归、匿名函数、内置函数
一. 三元表达式 一 .三元表达式 仅应用于: 1.条件成立返回,一个值 2.条件不成立返回 ,一个值 def max2(x,y): #普通函数定义 if x > y: return x els ...
- python之三元表达式、列表推导、生成器表达式、递归、匿名函数、内置函数
目录 一 三元表达式 二 列表推到 三 生成器表达式 四 递归 五 匿名函数 六 内置函数 一.三元表达式 def max(x,y): return x if x>y else y print( ...
- python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数
三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...
- day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- python之路day10-命名空间和作用域、函数嵌套,作用域链、闭包
楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print ...
- Python 对象(type/object/class) 作用域 一等函数 (慕课--Python高级,IO并发 第二章)
在python中一共有两种作用域:全局作用域和函数作用域全局作用域:在全局都有效,全局作用域在程序执行时创建,在程序执行结束时销毁:所有函数以外的区域都是全局作用域:在全局作用域中定义的变量,都属于全 ...
随机推荐
- Linux网卡驱动(4)—DM9000网卡驱动程序完全分析
1.硬件连接 mini2440开发板上DM9000的电气连接和mach-mini2440.c文件的关系 其中片选信号AEN使用了nGCS4,所以网卡的内存区域在BANK4,也就是从地址0x200000 ...
- ThinkPHP学习(二)理清ThinkPHP的目录结构及访问规则,创建第一个控制器
ThinkPHP的目录结构 回顾上一篇的安装目录: 目录对应关系 F:\\PHP├─index.php 入口文件├─README.md README文件├─Applicatio ...
- Java-Class-E:org.springframework.http.HttpStatus
ylbtech-Java-Class-E:org.springframework.http.HttpStatus 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 1. /* * C ...
- git分布式版本控制系统权威指南学习笔记(一):配置文件、简单流程和小问题
文章目录 git配置文件简介 git config各种命令 配置级别: 用户信息 文本编辑器 差异分析工具 配置命令别名 公钥 git协同流程 简单流程 初始化版本库 提交至缓存区 查看状态 提交分支 ...
- Linux的命名空间
1. 为什么提供命名空间 命名空间是一种轻量级的虚拟化手段. 传统的虚拟化软件,是虚拟化多个不同的操作系统,对共享资源的限制很大. 通过提供命名空间,可以让进程与进程之间,用户与用户之间彼此看不到对方 ...
- SQL Serve2008的一些操作
今天花了一下午的时间在熟悉SQL serve的一些操作,在此记录下学习到的东西: 首先创建数据库: use master --设置当前数据库为master,以便方便访问表sysdatabases if ...
- (数据科学学习手札57)用ggplotly()美化ggplot2图像
一.简介 经常利用Python进行数据可视化的朋友一定用过或听说过plotly这样的神器,我在(数据科学学习手札43)Plotly基础内容介绍中也曾做过非常详细的介绍,其渲染出的图像以浏览器为载体,非 ...
- wpf中datagrid绑定数据源发生改变
1.若datagrid绑定的数据源是同一个的话,即使里面的数据不同.页面也不会刷新,则需要重置数据源,再绑定.处理如下: datagrid1.ItemsSource=ListModule; 若List ...
- Vue双向数据绑定原理深度解析
首先,什么是双向数据绑定?Vue是三大MVVM框架之一,数据绑定简单来说,就是当数据发生变化时,相应的视图会进行更新,当视图更新时,数据也会跟着变化. 在分析其原理和代码的时候,大家首先了解如下几个j ...
- Linux下的Ngnix服务器部署静态页
一.安装FTP vsftpd 的名字代表”very secure FTP daemon”, 安全是它的开发者 Chris Evans 考虑的首要问题之一.在这个 FTP 服务器设计开发的最开始的时候, ...