函数

一. 函数就是为了完成某一个特定的功能

形式参数不占运行空间,只有传入实参后才占,用完立刻释放空间。

函数一遇到 return 就结束掉了

函数名() :运行函数,有返回值的话用变量承接

def test(x):   # x称为形式参数
#注释函数功能
x += 1 #代码块
return x #返回值

例:

def test(x):
y = 2 * x + 1
return y
a = test(3)
print(a)

二、使用函数的好处

1. 代码的重用

2. 保持一致性,易维护

3. 可扩展性

def logger():
'日志功能'
pass
def index():
logger() #调用函数使用日志功能
print('index')
def home():
logger() #调用函数使用日志功能
print('home')

三、 函数和过程

过程就是没有返回值的函数

没有返回值(没有写return),返回None

返回一个值,返回object

返回多个值(return 0,1,2,3),返回tuple(0,1,2,3)

四、函数参数:

函数定义时也可以不传入形参,但要在函数体中给定值

def test():
x = 2
y = x ** 2
return y
a = test()
print(a)

4.1 位置参数

要和形参一一对应,缺一不可,多一也不可

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

4.2 关键字参数

位置无需固定,缺一不行,多一也不行

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

若混合使用,位置参数必须在关键字参数的左边

test(1, y = 2, 3)  #报错
test(1, 3, z = 2, y = 4) #报错,y只能传一个值
test(1, 3, z = 2) #正确

4.3 默认参数

def test(x, type = 'dabai'):
print(x)
print(type)
test(1)
test(1, '唉') # 传入的实参会覆盖默认参数

五、参数组(非固定长度的参数)  *列表  **字典

*args 把位置参数处理成列表的形式

def test(x, *args):
print(x)
print(args)
print(args[0])
test(1, 2, 3, 4, 5)

开发的时候,预留一个 *args 用来以后扩展时用,可以先不传入参数,不会报错

传入列表和字典时,把列表和字典当成一个整体作为了元组的第一个元素

def test(x, *args):
print(x)
print(args)
test(1, {'name': 'dabai'})
test(1, [2,3,5,6,7])

如果想把列表中的每一个元素都作为参数传给args  则用 *args

def test(x, *args):
print(x)
print(args)
test(1, *[2,3,5,6,7])

若是处理多个关键字参数,用 **kwargs

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

混合使用

def test(x, *args, **kwargs):
print(x)
print(args, args[1])
print(kwargs, kwargs.get('z'))
test(1, 1, 2, 3, 4, 5, y=2, z=3)

def test(x, *args, **kwargs):
print(x)
print(args, args[1])
print(kwargs, kwargs.get('z'))
test(1, *[1,2,3,4], **{'z': 1, 'y': 3})

最新文章

  1. android studio 不能创建或者安装模拟器
  2. asp.net应用程序生命周期和asp.net网页的生命周期
  3. ELK_elk+redis 搭建日志分析平台
  4. July 13th, Week 29th Wednesday, 2016
  5. Eclipse 添加SVN
  6. Control.Refresh Control.Invalidate 和 Control.OnPaint之间的联系和区别
  7. eclipse svn切换账号登陆问题
  8. c++、c实现推箱子小游戏
  9. POJ 2109 :Power of Cryptography
  10. VS2012不能加载想要打开的项目/解决方案
  11. Java之Collections.emptyList()、emptySet()、emptyMap()的作用和好处以及要注意的地方
  12. (七) UVC框架分析
  13. Jeecg-Boot 1.0版本发布,企业级快速开发平台
  14. Eclipse启动时出现错误 An internal error occurred during: "Updating indexes"
  15. fileInputStream.available()获取 文件的总大小
  16. android -------- Lint优化工具
  17. delphi treeview checkbox
  18. javascript _ajax 原理 初级
  19. 移动web前端开发时注意事项
  20. 总结:C# 委托的全面理解

热门文章

  1. vuejs 使用less
  2. Spring Boot2(二):使用Spring Boot2集成Mybatis缓存机制
  3. 使用wireshark抓包分析-抓包实用技巧
  4. SQL Server 2012设置某用户对某些表的记录限制其删除操作
  5. 推荐一个Redis管理工具
  6. 《JavaScript 高级程序设计》读书笔记
  7. php防注入xss攻击
  8. 跟我学SpringCloud | 第七篇:Spring Cloud Config 配置中心高可用和refresh
  9. 5分钟快速部署PESCMS TEAM 团队任务管理系统开发版
  10. SPOJ MINSUB - Largest Submatrix(二分+单调栈)