函数
概述:
在一个完整项目中,某些功能会反复的使用。那么会将功能封装成函数,当我们要使用功能时,直接调用函数即可
本质:函数就是对功能的封装
格式:def 函数名(参数列表):
语句
return 表达式
#def: 函数代码块以def关键字开始
#函数名:遵循标识符规则
#参数列表:(参数1,参数2...参数n)任何传入函数的参数和变量必须放在圆括号之间,用逗号隔开。函数的调用者那里获取的信息
#():是参数列表的开始和结束
#::函数的内容(封装的功能)是以冒号开始的,并且缩进
#语句:函数封装的功能
#return:一般用于结束函数,并返回信息给函数的调用者
#表达式:即为要返回给函数的调用者的信息
注意:最后的return 表达式可以不写,相当于return None
注意:执行完return语句,该函数就结束了,return后面的代码不再执行
函数的调用:
格式:函数名(参数列表)
#函数名:是要使用的功能的韩束韩束名字
#参数列表:函数的调用者给函数传递的信息,若没有参数,括号也不能省略
本质:实参给形参赋值的过程
函数的参数
实参(实际参数):调用函数时给函数传递的数据,本质是值
形参(形式参数):定义函数时小括号中的变量,本质是变量
eg: def mySum(a,b):
return a+b
print(“sunck”)#执行完return语句,该函数就结束了,return后面的代码不再执行
res = mySum(1,2)
print(res) 返回3
参数的传递:
值传递:传递的是不可变类型(string、tuple、number)
eg: def func1(num):
num = 10
temp = 20
func1(temp)
print(temp) 返回20(temp的值不变)
引用传递:传递的是可变类型(list、dict、set)
eg: def func2(lis):
lis[0] = 100
li = [1,2,3,4,5]
func2(li)
print(li) 返回[100,2,3,4,5]
关键字参数:
概念:允许函数调用时参数的顺序与定义时不一致
eg: def myPrint(str,age,weight):
print(str,age,weight)
myPrint(age = 18,str = “sunck”,weight = 70) 返回sunck 18 70
默认参数:
(要用默认参数,最好将默认参数放到最后)
概念:调用函数时,如果没有传递参数,则使用默认参数
eg: def myPrint(age = 18,str = “sunck”,weight = 70):
print(str,age,weight)
myPrint() 返回sunck 18 70
eg: def myPrint(age ,str = “sunck”,weight = 70):
print(str,age,weight)
myPrint(18) 返回sunck 18 70
不定长参数:
概念:能处理比定义时更多的参数
(加星号(*)的变量存放所有未命名的变量参数,如果在函数调用时没有指定参数,它就是一个空元祖)
(双星号(**)代表简键值对的参数字典,和*所有代表意义类似)
eg: def func (name,*arr):
print(name)
for x in arr:
print(x)
func(“sunck”,”is”,”a”,”good”,”man”) 返回sunck is a good man
eg: def func1 (**kwargs):
print(kwargs)
func(x = 1,y = 2,z = 3”) 返回{‘x’,:1,’y’:2,’z’:3}
eg: func3(*args,**kwargs):
pass #pass代表一个空语句
#上eg代表接受任意参数
匿名函数:
概念:不适用def关键字这样的语句定义的函数,使用lambda来创建匿名函数
特点:1、 lambda只是一个表达式,函数体比def简单
2、lambda的主题是一个表达式,而不是代码块,仅仅能在lambda表达式中封装简单的逻辑
3、lambda函数有自己的命名空间,且不能访问自由参数列表之外的或者全局命名空间的参数
4、虽然lambda是一个表达式且看起来只能写一行,与c、c++内联函数不同
格式:lambda 参数1,参数2...参数n:expression
eg: sum = lambda num1, num2: num1 + num2
print(sum(1,2)) 返回3