python-函数
函数基础
1.函数的语法:
def 函数名(参数1,参数2,参数3,...)
'''注释'''
函数体
return 返回的值
说明:
return也可以返回多个值,以逗号分割,返回的值为元祖
例子:
def test(x): x = x + 1 return x print(test(4))
def test(x,y): x = x + 1 y=y*2 return x,y print(test(4,5)) #输出结果:(5, 10)
2.函数的位置参数:必须一一对应,缺一行少一行都不行
def test(x,y): x = x + 1 y=y*2 return x,y print(test(4,5))
3.函数的关键字参数:无须一一对应,缺一行少一行也不行
def test(x,y): x = x + 1 y=y*2 return x,y print(test(y=5,x=4))
4.位置参数必须在关键字参数的左边
def test(x,y,z): x = x + 1 y=y*2 z=z return x,y,z print(test(4,5,z=9))
5.函数的参数可以是列表、字典
def test(x,*arg,**kwargs): print(x) print(arg) #打印结果为元祖 print(kwargs) #打印结果为字典 test(1,2,3,4,(5,6),[7,8],t=3,f=9) #输出结果: # 1 # (2, 3, 4, (5, 6), [7, 8]) # {'f': 9, 't': 3} test(1,*[7,8],**{'t':3,'f':9}) #输出结果: # 1 # (7, 8) # {'f': 9, 't': 3} test(1,2,3,4,(5,6),[7,8],{'t':3,'f':9},**{'t':3,'f':9}) #输出结果: # 1 # (2, 3, 4, (5, 6), [7, 8], {'t': 3, 'f': 9}) # {'t': 3, 'f': 9}
6.函数无return,返回结果为None
def food():
haha=('i like milk')
v=food()
print(v)
#输出结果:None
7.函数返回值为函数,实际返回的是函数的内存地址
def food(): haha=('i like milk') return food v=food() print(v) #输出结果:<function food at 0x000002C9380F8E18>
8.全局变量和局部变量
编码规范:
全局变量大写
局部变量小写
优先读取局部变量,能读取全局变量,无法对全局变量重新赋值,但是对于可变类型,可以对内部元素进行操作。
name=['lili','hanmeimei','lucy'] def foo(): name.append('mike') print('新增成员:mike') foo() print('name=',name) #输出结果: #新增成员:mike #name= ['lili', 'hanmeimei', 'lucy', 'mike']
如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值
globla:定义全局变量
haha='1234' def food(): global haha haha=('i like milk') return haha v=food() print(v) #输出结果:i like milk
nonlocal:指定上一级变量
haha='1234' def food(): haha='i like milk' def tar(): nonlocal haha print(haha) return tar v=food()() #food()返回结果为tar的内存地址,food()()调用tar函数 print(v) #输出结果: # i like milk #print(haha)的结果 # None
9.风湿理论:函数既变量
定义变量或者函数,都是先在内存中加载,加载完成后,后续调用时,无关定义的先后顺序
递归函数
1.python中的递归效率低,需要在进入下一次递归时保留当前的状态
2.必须有一个明确的结束条件
3.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
4.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
5.递归调用应该包含两个明确的阶段:回溯,递推
回溯就是从外向里一层一层递归调用下去,回溯阶段必须要有一个明确地结束条件,每进入下一次递归时,问题的规模都应该有所减少(否则,单纯地重复调用自身是毫无意义的)
递推就是从里向外一层一层结束递归
例如:
def calc(n): if int(n / 2) == 0: return n res=calc(int(n / 2)) print('res=',res) return res print(calc(10))
输出结果:
res= 1 -->第3层的res返回值
res= 1 -->第2层的res返回值
res= 1 -->第1层的res返回值
1 -->return n
原文地址:https://www.cnblogs.com/lijinping716/p/11404252.html
- 数据挖掘算法-python实现:Logical回归
- 提取数字——字符串、正则面试题
- 【盟友分享】如何快速获取Chromium源码和编译
- .NET中的密钥加密
- 数据挖掘工程师笔试及答案
- 各大公司移动端页面 - 导航的实现
- JavaScript 运行机制之执行顺序详解
- Math对象面试题目
- Highcharts AJAX JSON JQuery 实现动态数据交互显示图表 柱形图
- 企业支付宝账号开发接口教程--JAVA-UTF-8(实际操作------SpringMVC+JSP)
- 用pandas 进行投资分析
- 【专业技术】android 应用程序如何获取root权限
- Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)
- SpringMVC+MongoDB+Maven整合(微信回调Oauth授权)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PySpark SQL——SQL和pd.DataFrame的结合体
- 初识Kubernetes及快速安装
- 使用k8s部署springboot+redis简单应用
- React Ref 使用总结
- Python人脸识别—我的眼里只有你
- 函数式编程是如何提升代码的扩展性
- 浏览器中的跨域问题与 CORS
- 微信小程序怎么做链接可以链到小程序的其它页面。
- 如何实现一个 3D 效果的魔方
- FlutterDojo设计之道—状态管理之路(三)
- 微信头像加国旗
- FlutterDojo设计之道—状态管理之路(四)
- FlutterDojo设计之道—状态管理之路(五)
- Python高级进阶(一)Python框架之Django入门
- python 自动化测试(2):针对密码输入框为密码控件时的解决方案