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中一共有两种作用域:全局作用域和函数作用域全局作用域:在全局都有效,全局作用域在程序执行时创建,在程序执行结束时销毁:所有函数以外的区域都是全局作用域:在全局作用域中定义的变量,都属于全 ...
随机推荐
- 微信支付完成 vue 页面不跳转问题
遇到的问题是 vue 调用微信支付 回调成功以后,页面路由不跳转. 解决的办法是用window.location.href /** * @method 支付费用方法 * @param data:后台返 ...
- mybatis的核心对象图解
- java IO 流小结
java IO 流小结 java流类图结构 流的分类 按方向 输入流 输出流 按类型 字节流 字符流 结论:只要是处理纯文本数据,就优先考虑使用字符流. 除此之外都使用字节流.
- diji模板
void diji(int x){ fill(dis,dis+n,INT_MAX); dis[x] = ; ;i < n;i++) pre[i] = i; ){ int minn = INT_M ...
- 机器学习基石笔记:Homework #3 LinReg&LogReg相关习题
原文地址:http://www.jianshu.com/p/311141f2047d 问题描述 程序实现 13-15 # coding: utf-8 import numpy as np import ...
- 寻找cookie之旅
公司接口自动化,需要用到cookie.这个cookie可以从login的响应header中取到. 直接用python调这个接口,返回的响应header是这个: {'Date': 'Thu, 15 Au ...
- Java Jar Manifest
JAR文件可以可选地在META-INF目录中包含名为MANIFEST.MF的Manifest文件.Manifest文件包含有关JAR文件及其条目的信息.Manifest文件可以包含有关JAR文件的CL ...
- HBase1.0.0 实现数据增删查
HBase1.0.0 即Hadoop 2.6 采用maven 的方式实现HBase数据简单操作 import java.io.IOException; import java.util.ArrayLi ...
- ajax中的onload和readychange区别
先补个知识点: readyState 状态码: 0:请求未初始化 1:服务器连接已建立 2:请求已接受 3:请求处理中 4:请求已完成,且响应已就绪 HTTP 状态码: 200 - 服务器成功返回网页 ...
- 用python+tushare获取股票前复权后复权行情数据
接口名称 :pro_bar 接口说明 :复权行情通过通用行情接口实现,利用Tushare Pro提供的复权因子进行计算,目前暂时只在SDK中提供支持,http方式无法调取. Python SDK版本要 ...