目录
1.定义函数
2.调用函数
3.函数参数
4.参数的传递方式
5.函数的返回值
6.函数说明文档
7.函数嵌套(函数中调用函数)
8.变量的作用域
9.lambda表达式(匿名函数)
前言:
函数和方法的区别:方法需要对象去点,如:obj.test();函数是直接调用,如:test()
1.定义函数
注意:①不像Java,Python中没有修饰符,但需要关键字def
②不需要指定返回类型,可以具备返回值
③没有重载
# 函数定义
def 函数名():
代码块
2.调用函数
注意:①在Python中,函数必须先定义,后调用
②每个函数都具备一个返回值,当没有给定返回值时,返回值默认为None,相当于Null
# 函数调用
函数名()
例如:test()
--test 和 test() 的区别:test 是函数,test() 是函数的返回值。
3.函数参数
# 有参函数的定义
def 函数名(参数名1,参数名2):
代码块
有参函数的调用:参数名(参数值1,参数值2)
注意:①形参:参数名1,参数名2;实参:参数值1,参数值2
②有默认值的参数必须在最后,代码如下所示:
def fn1(b:int,a:int=2):
pass
4.参数的传递方式
① 位置参数: ?? ?调用函数时根据函数定义的参数位置来传递参数 ?? ?注意:传递和定义参数的顺序及个数必须一致 ② 关键字参数: ?? ?函数调用,通过“健=值”形式加以指定 ③ 缺省参数: ?? ?默认参数,用于定义函数时,为参数提供默认值,调用函数时可不传该默认参数的值 ④?不定长参数【可变参数】? ??用于:调用时不确定参数的个数 ? ? --包裹位置传递:函数返回值为元组
# 语法
def ?函数名(*args):
代码块
? ? --包裹关键字传递:函数返回值为字典 ??
# 语法
def 函数名(**kwargs):
代码块
5.函数的返回值
①返回单个值
# 语法
def 函数名(参数名1,参数名2):
return 结果
# 调用
变量名 = 函数名(参数值1,参数值2)
②返回多个值
# 语法
def 函数名(参数名1,参数名2):
return 结果1,结果2
6.函数说明文档
注意:函数的说明文档,建议对参数和返回值做说明
# 语法
def 函数名(参数):
"""函数的说明文档内容"""
函数体
return 返回值
# 使用
help(函数名)
例如:
def test(a:int,b:int):
"""
对两个数字进行增加操作
:param a: 第一个
:param b: 第二个
:return: 什么都不返回
"""
pass
help(test)
控制台结果如下:这样既方便调用的人知道参数的类型,也可以提醒自己
7.函数嵌套(函数中调用函数)
例如:斐波拉契数列:1 1 2 3 5 8 13 21 ......
def fb(n:int):
if n==1 or n==2:
return 1
return fb(n-1)+fb(n-2)
# 调用,显而易见,结果为3
print(fb(4))
8.变量的作用域
①局部变量 ?? ?在函数体内部 ②全局变量 ?? ?在函数体外 ③在函数体中修改全部变量的值 ? ? --错误做法: ?? ??? ?在函数体中,直接使用 全局变量名 = 新值 ?? ??? ?注意:这种做法,只是重新声明了一个局部变量,变量的名字和全局变量一样,但是修改不了全局变量的值 ? ? --正确做法: ? ? ? ? (1)声明全局变量 ?? ??? ??? ?global 变量名 ? ? ? ? (2)修改全局变量的值 ?? ??? ??? ?变量名 = 变量值
9.lambda表达式(匿名函数)
如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化
①语法:参数可以省略 ?? ?变量名 = lambda 参数列表:表达式/返回值 ②参数形式: ?? ?无参数 ?? ?一个参数 ?? ?默认参数 ?? ?可变参数:*args、**kwargs ③带判断的lambda: ?? ?返回值中使用 三元运算符 ④列表内字段数据进行排序:
# 语法
# 升序
列表.sort( key = lambda x:x['排序的列'])
# 降序?? ??? ?
列表.sort( key = lambda x:x['排序的列'],reverse=True)
?? ??? ??? ?
今天的学习记录就到这了,拜拜!
说明:学习记录,若有错误,欢迎指正,若有疑问,欢迎评论
|