函数
- 函数相关的链接:函数
定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
可以理解为对实现某一功能的封装。
函数的语法格式:
1 | def 函数名称(参数): |
函数定义以及函数调用(函数名(参数))
实例1:
1 | #函数的定义 |
结果:
1 | name:zhangsan |
函数参数
- 形参:定义函数时设置的参数
- 调用函数时传入的参数
实例2:
1 | #带参函数注意,1.调用函数时传入的参数个数与函数定义参数个数相同。2.参数顺序要相同 |
函数类型
- 无参无返回值函数
- 无参有返回值函数
- 有参无返回值函数
- 有参有返回值函数
实例3:
1 | #有返回值函数 |
结果:
1 | 5 |
变量
局部变量
- 函数内部定义函数
- 不同函数内的局部变量可以定义相同的名字,互不影响
- 作用范围:函数体内有效,其他函数不能直接使用
链接:局部和全局变量
此链接推荐阅读,讲的很详细,下面会摘取一些例子
实例4:
1 | #局部变量 |
结果:
1 | lisi |
全局变量
- 函数外部定义的变量
- 作用范围:可以再不同函数中使用
- 在函数内使用global关键字实现修改全局变量的值
- 全局变量命名建议以g_开头,如g_game
实例5:
1 | #全局变量 |
结果:
1 | zhangsan |
实例6:
1 | #修改全局变量的值 |
结果:
1 | 函数体内age=25 |
实例7:
1 | #全局变量定义的位置 |
结果:
1 | g_num1:100 |
实例8:
1 | #字典、列表作为全局变量,在函数内修改这种类型的全局变量中的元素 |
结果:
1 | [1, 2, 3, 4] |
实例9:
1 | num = 100 |
结果:
1 | 123 |
函数参数
链接:函数参数
可在此链接查看函数的参数,参数分四种(必须参数,关键字参数,默认参数,不定长参数等)
缺省参数
- 函数定义带有初始值的形参
- 函数调用时,缺省参数可传,也可不穿
- 缺省参数一定要位于参数列表的最后
- 缺省参数数量没有限制
实例10:
1 | #缺省参数 |
结果:
1 | x = 20 |
实例11:
1 | def x_y_sum2(y=10,x): |
结果:
1 | File "<ipython-input-31-cc4701538993>", line 1 |
命名参数
- 调用带有参数的函数时,通过指定参数名称传入参数的值
- 可以不按函数定义的参数顺序传入
实例12:
1 | def x_y_sum(x=10,y=20): |
结果:
1 | rs1=45 |
不定长参数
- 函数可以接受不定个数的参数传入
- def function([formal_args,]*args)函数调用时,传入的不定参数会被封装成元组
- def function([formal_args,]**args)函数调用时,如果传入key = value的形式的不定长参数,会被封装成字典
实例13:
1 | #不定长参数 |
结果:
1 | args=(30, 40, 50, 60) |
实例14:
1 | #改变不定长参数的位置 |
结果:
1 | args=(30, 40, 50, 60) |
实例15:
1 | #第二种def fuction([formal_args,]**kvargs) |
结果:
1 | {'e': 0.2, 'm': 0.1, 'a': 0.12} |
拆包
- 对于定义了不定长参数的函数,在函数调用时需要把已定义好的元组或者列表传入到函数中,需要使用拆包方法
实例16:
1 | #拆包 |
结果:
1 | 未使用拆包的: |
递归函数和匿名函数
递归函数
- 函数调用自身
- 注意:递归过程中要有用于结束递归的判断
实例17:
1 | #递归函数,自身调用自身 |
结果:
1 | 24 |
匿名函数
- 用lambda关键字创建匿名函数
- 定义:lambda[参数列表]:表达式
- 匿名函数可以作为参数被传入其他函数
实例18:
1 | #匿名函数 |
结果:
1 | 30 |
实例19:
1 | #1.匿名函数作为参数传入到自定义函数中 |
实例20:
链接:sort的用法
1 | #2.匿名函数作为python内置函数的参数使用 |
结果:
1 | [{'name': 'zhangsan', 'age': 20}, {'name': 'lisi', 'age': 30}, {'name': 'wangwu', 'age': 18}] |