授课内容:
(1)出现函数的原因;
(2)函数三要素:参数、函数体、返回值;(通俗的说是输入,处理,输出);
(3)关于形式参数的一些用法;
(4)关于函数体的一些用法;
(5)关于返回值的一些用法;
(6)模块编程的思想;
具体内容:
(1)出现函数的原因:代码中经常会有一些重复的内容,比如3! 5! 100!计算上面3个数的阶乘大量代码是重复的,为了提高代码复用率,出现了函数;
(2)函数三要素:参数、函数体、返回值。①参数是指形式参数定义函数里面的参数是形式参数,实参是指调用函数时填入函数体的真实数据;②函数体:函数体包括函数标号del ,函数名字,冒号:以及执行的语句;③返回值:return语句的后面是函数返回的内容。如果没有return语句,那么函数返回值是None
(3)函数中参数的用法:形式参数主要有位置参数、关键字参数、默认参数、特殊参数(*arg,**arg)①位置参数 def XXX(x,y,z): print(x,y,z),调用函数时XXX(3,4,9),则函数会返回3,4,9 ②关键字参数 def XXX(x,y,z ):print(x,y,z) 调用函数的时候def XXX(x = 9,z = 100 ,y = 33),那么输出函数的时候会输出9,33,100;③默认参数:def XXX(x ,y,z = 'Male'): print(x,y,z)调用函数的时候XXX(‘202001‘,‘Mike‘),会输出202001 Mike Male。注意位置参数也可以与关键字参数联合使用,位置参数在前,关键字参数在后面。最后要介绍的是*arg参数,**arg参数,用途好像是接受多个参数2个3个或者更多。后面一个参数可以得到字典型的数据,也可以把字典型的数据打散,得到独立的数据。
(4)函数体中数据的用法:函数体中的变量没有特别强调,应该被视作局部变量,只有在函数体内部可以起作用。在函数外就不起作用了。所以如果想要使用函数体里面的变量,那么可以把函数体里面的变量设置成全局变量globe z,这样变量出了函数体也能
(5)执行完return 语句,函数就结束了。一个函数里可以有多个return语句,执行完一个return语句整个函数体就结束了。
(6)模块化编程的思想:举例:如何把大象装进冰箱里?第一步:把冰箱门打开;第二步:把大象塞进冰箱里;第三步:把冰箱门关上。模块化编程强调的是自顶向下的思想,即首先搭一个大的框架,把一个大的问题分成几个较小的问题,然后这些较小的问题继续分成更小的问题。最终这个大的问题被解决了。
容易忘记的内容:
(1)接受可变长参数(一般参数):
def daring(a,b,c,*args):
print(a,b,c)
print(args)
daring(1,2,3,4,5,6)
daring(1,2,3,[4,5,6])
daring(1,2,3,*[4,5,6])
运行结果:
1 2 3
(4, 5, 6)
1 2 3
([4, 5, 6],)
1 2 3
(4, 5, 6)
解释:4,5,6这三个实参将打包成元组传给args;arg = (4,5,6)
[4,5,6]这个实参也会打包成元组传给args;args= [(4,5,6),]
*[4,5,6]这个实参被打散成独立数据等价于4,5,6打包成元组传给args
(2)接受可变长参数(赋值型参数)
def apple(a,b,c,**args):
print(a,b,c)
print(args)
apple(1,2,3,d = 6,e = 8,f = 10)
apple(1,2,3,**{'d':6,'e':8,'f':10})
运行结果:
1 2 3
{'d': 6, 'e': 8, 'f': 10}
1 2 3
{'d': 6, 'e': 8, 'f': 10}
解释:赋值型实参会被打包成字典传给args
实参**{‘d’:6,'e':8:'f':10}等价于d = 6,e = 8 ,f = 10 ,然后被打包成字典传给args
(3)小结(1)(2),形式参数中*args用来接受可变长一般参数,并且数据会报打包成元组传给args;而**args用来接受可变长赋值型参数,并且数据会打包成字典传给args
(4)可变长一般实参数传给*args中的args,可变长赋值型参数传给**args中的args。
容易出错的内容:
(1)定义函数的形式参数默认值一般是不可变的数据比如:数字,字符串,元组。如果默认参数是可变数据如列表,集合,字典等则容易出错。
正在整理中