网站建设 栏目管理,制作网页编码,企业如何注册网站,网站开发加盟1、函数的定义
函数通过def定义#xff0c;包括函数名、参数、返回值
# 定义函数
def test(a,b): # a,b表示形式参数print(a b)#函数体(具体的功能)return a*b #返回值# 函数调用
test(12,43) # 12和43表示实际参数,在调用函数时,会替换形式参数a,b下面这个展示了稍微复…1、函数的定义
函数通过def定义包括函数名、参数、返回值
# 定义函数
def test(a,b): # a,b表示形式参数print(a b)#函数体(具体的功能)return a*b #返回值# 函数调用
test(12,43) # 12和43表示实际参数,在调用函数时,会替换形式参数a,b下面这个展示了稍微复杂的函数嵌套执行test()的时候test函数中顺序先执行test1输出‘9999’然后接着执行print(12345)输出‘12345’ def test():test1()print(12345)
# test() 在此处调用,会报错,因为代码顺序执行test1()在这里还没有定义
def test1():print(9999)test()
2、函数中的参数
1先看下面例子引入形参和实参的概念
# 封装一个函数,传入两个数字,输出较大的一个数字
def get_max(num1,num2): # num1和num2是形式参数if num1 num2:print(较大的数字是:,num1)else:print(较大的数字是:,num2)get_max(32,47) # 32和47是实际参数上述代码中定义了一个名为get_max的函数传递两个形参num1num2函数体是比较num1和num2执行代码get_max(32,47),这里的32和47就是实参我们可以在任何地方调用get_max函数传递想要的实参函数体根据传递的参数计算出结果。
调用函数的时候,必须以正确的顺序传参一一对应比如上面的传惨num1等于32num2等于47,实参的数量和形参的数量保持一致在函数中,形参的名字和实参的名字可以一样.(本质上是在程序中开辟了不同的内存空间)
2关键字参数
上面我们说了实参和形参是数量相等一一对应的比如上面的函数def get_max(num1,num2)接收的是num1和num2两个参数然后调用的时候get_max(12,2)这样参数一一对应12传递给num12传递给num2但是能不能不按照顺序呢答案是可以的就是利用我们的关键字参数看代码
get_max(num2 2,num1 12)按照代码所示的关键字参数传递方式直接指明了num2 2num1 12
3默认参数在定义函数的时候,给形式参数直接赋值
def he(num1,num2 23): # num2 23表示默认参数print(num1和num2两个数字的和是:,num1 num2)# 未使用默认参数
# he(10,50) #输出 60
# 使用了默认参数
# he(82) #输出 105从上面的代码我们可以总结一下默认参数的意义在于给形参设置一个默认值你可以调用的时候重新传递覆盖也可以就用默认值比如上面的调用he(10,50)10传递给num150覆盖默认值23计算和输出60假如我们调用 he(82)这个时候82传递给num1num2就用默认值32计算和输出105使用默认值有几个地方要注意 前面我们说形参和实参数量要一致那为什么这里可以这样调用 he(82)只是传递一个参数82其实这个很好理解因为形参num2设置了默认值相当于82传递给num1num2有默认值所以实参可以不用传 把默认参数放在参数列表的前面会报错比如下面代码会报错
def cha(num1 23,num2): #这里报错了默认值参数设置要放在后面print(num1和num2两个数字的差是:,num1 - num2)根据第一点的讲解我们也能较好的理解为什么默人参数前置会报错因为你想假如按照cha(num1 23,num2)这样定义函数合法那么当我们调用he(82)时这个82就会顺序传递到num1上那num2参数就没有值了所以这样不合理反过来就不会存在这个问题
4不定长参数(可变参数):可以处理比声明时更多的参数. *args **kwargs
*args: 用来接收多个位置参数,得到的是元组. 是arguments的简写**kwargs: 用来接收多个关键字参数,得到的是一个字典. 是 keyword arguments的简写
def fn(*args):print(args)# fn(12,34) # (12, 34)
# fn(87,45,67) # (87, 45, 67)
# fn(82,48,246,52) # (82, 48, 246, 52)注意: 当 args 和普通参数放在一起的时候,需要将args放在参数列表的后面,道理类似默认参数需后置
def say(name,*args):print(name,args)
say(嘉琪,170,100) # 嘉琪 (170, 100)# **kwargs 表示关键字参数,传输的数据格式:keyvalue
# 注意: **kwargs若和普通参数放在一起,必须将**kwargs放在参数列表的后面,否则会报错.
def say1(**kwargs):print(kwargs)
say1(name张强,age 22,height175) # {name: 张强, age: 22, height: 175}def say2(name,**kwargs):print(name,kwargs)
say2(宏海,age 24,weight 140) # 宏海 {age: 24, weight: 140}总结
*args 和 **kwargs 都能表示不定长参数在使用*args和**kwargs时如果有普通参数那普通参数必须放在前面*args和 **kwargs放后面*args接收得到的是元组**kwargs的到的是字典
3、匿名函数
特点
lambda只是一个表达式,比普通函数简单lambda一般只会书写一行,包含了参数 函数体和返回值 先看普通函数
def fn(n):return n**2
res fn(3)
print(res) # 9为了书写简单引入了lambda表达式
使用匿名函数的方式实现上述的功能:
result lambda n:n**2
print(result(3)) # 9使用匿名函数计算两个数字的乘积:
fn lambda n,m:n*m
print(fn2(12,4)) # 48
实现元组相乘
test lambda *agr:agr*4
print(test(3,4))#(3, 4, 3, 4, 3, 4, 3, 4)
#这里函数是一个不定长的参数的到的是一个元组
#实参传递34的到的是元组34
#函数返回值是参数*4
#那的到的就是元组34*4 (3, 4, 3, 4, 3, 4, 3, 4)4、回调函数
概念 若把函数名赋值给了一个新的变量,那这个变量就具备了和函数一样的功能.
下面我们直接通过代码来分析代码也很简单通过封装一个函数来实现加减乘除的操作
1先实现加、减、乘、除的函数
# 和
def add(a,b):print(a b)
# 差
def cha(a,b):print(a - b)
# 乘积
def ji(a,b):print(a * b)
# 商
def shang(a,b):print(a / b)(2)封装一个函数.实现加减乘除的操作
我们要的这个函数要求是传递ab两个要计算的实参以及计算方式加、减、乘、除的函数然后的到结果
def common(a,b ,fn):fn(a,b)
# 加法
common(12,3,add) # 15
# 减法
common(12,3,cha) # 9
# 乘积
common(12,3,ji) # 36
# 商
common(12,3,shang) # 4.0代码分析
我们定义一个common的函数传递ab以及计算方式加、减、乘、除的函数在common函数中 fn是一个方法当作一个参数传递进来当执行 common(12,3,add) 时候common函数里就执行add123从而达到根据传递不同的函数实现不同计算的功能