计算机应用基础(III)——问题求解与计算思维第10讲变量作用域与参数类型商务信息学院信息管理系关于期末复习•课件、教材、平时作业是最好的复习资料目录•上节回顾•引例•变量作用域•参数类型•函数应用实例上周回顾•函数的概念及定义–函数是一个具有特定功能的、被封装的、可重用的程序。–给这个程序段取一个名字,就可以在其他程序的任何地方通过这个名称任意多次的运行这个语句块。•函数定义格式:def函数名([参数]):(函数体)上周回顾——辗转相除法•编写求两个自然数的最大公约数的函数,采用辗转相除法。算法如下:–1.两个自然数X、Y(保证X=Y)–2.计算X除以Y的余数R–3.若R等于0,则Y为最大公约数;否则,用Y替换X,用R替换Y,重复步骤2函数调用的步骤•假设程序P现在执行到了一个函数调用f(a),则经过四个步骤来处理这个调用:–调用者P在调用点暂停执行(术语称为P挂起)–函数f的形式参数被赋予实际参数a的值–执行f的函数体–f执行完毕后,控制返回到P中调用点的下一条语句为什么用函数?•生成一个新的函数给你一个命名一组语句的机会,这使得你的程序更容易读和调试。•函数避免重复代码,使得程序更小;如果你要做个变动,你只需在一处变动即可。•将一个长程序分解为函数,允许你一次调试一部分,然后将它们集成为一个可行的整体。•良好设计的函数经常对多个程序都有用。一旦你写出并调试了一个函数,你可以重用它。引例1——上周示例——计算圆的面积和周长•运行结果思考:在circle函数中不写print语句,如何实现计算圆的面积和周长并打印输出实验结果的显示是什么?说明什么问题?•运行结果思考:如果要得到如下的运行结果,程序如何改进?改进后,程序保存为eg1_circle.py注意返回的形式:元组函数小结1•定义函数时,需要确定函数名和参数个数•如果有必要,可以先对参数的数据类型做检查•函数体内部可以用return随时返回函数结果•函数执行完毕后没有return语句时,自动returnNone•函数可以同时返回多个值,但其实就是一个tuple引例2:求阶乘的函数,保存为yl2.py•运行结果:思考:如何利用该函数写出求1!+2!+3!+…+n!的函数?示例2编写求1!+2!+3!+…+n!的函数•程序保存为eg2_add.py•运行结果:变量的作用域•当引入函数的概念之后,就出现了变量作用域的问题。•变量起作用的范围称为变量的作用域。•一个变量在函数外部定义和在函数内部定义,其作用域是不同的。•如果我们用特殊的关键字定义一个变量,也会改变其作用域。变量的作用域——局部变量•在函数内定义的变量只在该函数内起作用,称为局部变量。•例4使用局部变量•运行结果变量的作用域——全局变量•如果想要在函数内部给一个定义在函数外的变量赋值,那么这个变量就不能是局部的,其作用域必须为全局的,能够同时作用于函数内外,称为全局变量,可以通过global来定义。–一个变量已在函数外定义,如果在函数内需要为这个变量赋值,并要将这个赋值结果反映到函数外,可以在函数内用global声明这个变量,将其定义为全局变量。–在函数内部直接将一个变量声明为全局变量,在函数外没有声明,在调用这个函数之后,将增加为新的全局变量。例5在函数内使用外部定义的全局变量•运行结果例6把函数内定义的变量声明为全局变量•运行结果参数的类型——默认参数•默认参数def函数名(形参名=默认值,……)例7使用默认参数值•运行结果参数的类型——默认参数•具有默认值的参数(形参)称为默认参数•如果要设置形参的默认值,必须将这个参数放到形参列表的末尾•不能先声明有默认值的形参,而后声明没有默认值的形参–deffunc(a,b=5)有效–deffunc(a=5,b)无效参数类型——关键参数•如果某个函数有多个参数,在调用函数时,如果不想按顺序为形参传递值,那么可以通过命名来为参数赋值,这称为关键参数。(指实参)•例8使用关键参数•运行结果参数类型——可变长度参数•前面的介绍内容中,一个形参只能接收一个实参。•有的时候让用户提供任意数量的参数是很有用的。•在Python中用户可以给函数提供可变长度的参数。•实现方法:在定义函数的时候,在参数前面使用标识符*就可以实现。例9可变长度参数•实参是多个值,形参获得一个元组•可变长度参数指形参,实参长度可变•运行结果例10可变长度参数与其他普通参数联合使用•可变长度参数与其他普通参数组合,通常将可变长度参数放在形参列表的最后•运行结果例11在形参前加上**,可以引用一个字典•实参通过关键参数指定键值对,形参获得一个字典•运行结果序列作实参•1.序列实参t传递给序列形参a•例12•运行结果序列作实参•2.序列实参t传递给多个单变量形参a,b,c•例13•运行结果课堂练习与课外作业•课堂练习–本讲课件所有示例–教材第六章剩余实例•课外作业P94习题–5–6–7下一讲内容•文件的使用•做好预习