文章目录
- 4.1 函数的定义及调用
- 4.1.1 为什么要调用函数
- 4.1.2 函数的的定义及调用
- 4.1.3 参数传递
- 4.1.4 函数体与变量作用域
- 4.1.5 返回值
- 4.1.6 几点建议
- 4.2 函数式编程实例
- 4.3 匿名函数
- 4.4面向过程和面向对象
- 小结
4.1 函数的定义及调用
4.1.1 为什么要调用函数
1、提高代码复用性一抽象出来, 封装为函数
2、将复杂的大问题分解成一-系列小问题,分而治之一模块化设计的思想
3、利于代码的维护和管理
顺序式
抽象成函数
4.1.2 函数的的定义及调用
白箱子:输入–处理-- 输出
三要素:参数.函数体、返回值
1、定义
2、调用
函数名(参数)
4.1.3 参数传递
- 形参(形式参数) :函数定义时的参数,实际上就是变量名
- 实参(实际参数) :函数调用时的参数,实际上就是变量的值
1、位置参数
- 严格按照位置顺序,用实参对形参进行赋值(关联)
- 一般用在参数比较少的时候
- 实参与形参个数必须–对应, -个不能多,-一个不能少
2、关键字参数
- 打破位置限制,直呼其名的进行值的传递(形参=实参)
- 必须遵守实参与形参数量上一对应
- 多用在参数比较多的场合
- 位置参数可以与关键字参数混合使用
- 但是,位置参数必须放在关键字参数前面
- 不能为同一一个形参重复传值
3、默认参数
- 在定义阶段就给形参赋值一该形参的常用值
- 机器学习库中类的方法里非常常见
- 调用函数时,可以不对该形参传值
- 也可以按正常的形参进行传值
- 默认参数应该设置为不可变类型(数字、字符串.元组)
- 让参数变成可选的
- *4、可变长参数 args
- 不知道会传过来多少参数*args
- 该形参必须放在参数列表的最后
- 实参打散
- **5、可变常参数 kwargs
- 字典实参打散
- 可变长参数的组合使用
4.1.4 函数体与变量作用域
- 函数体就是一段只在函数被调用时,才会执行的代码,代码构成与其他代码并无不同
- 局部变量一仅在函数体内定义和发挥作用
- 全局变量一外部定义的都是全局变量
- 全局变量可以在函数体内直接被使用
- 通过global在函数体内定义全局变量
4.1.5 返回值
1、单个返回值
2、多个返回值——以元组形式
3、可以有多个return语句,一旦其中一个执行,代表了函数运行的结束
4、没有returm语句,返回值为None
4.1.6 几点建议
1.函数及其参数的命名参照变量的命名
- 字母小写及下划线组合
- 有实际意义.
2.应包含简要阐述函数功能的注释,注释紧跟函数定义后面
3、函数定义前后各空两行
4.2 函数式编程实例问题抽象
1、在小丹Vs小伟的二元比赛系统中,小丹每球获胜概率55%,小伟每球获胜概率45%;
2、每局比赛,先赢21球(21分) 者获胜;
3.假设进行n = 1000场独立的比赛,小丹会获胜多少场? (n 较大的时候,实验结果=真实期望)
问题分解
1、输入原始数据
2、多场比赛模拟
3、结果输出
综上就行
1、基本形式
2、常用用法
- 排序sort() sorted()
max() min()
面向过程——以过程为中心的编程思想, 以“什么正在发生"为主要目标进行编程。冰冷的, 程序化的
面向对象——将现实世 界的事物抽象成对象,更关注谁在受影响”,更加贴近现实。有 血有肉,拟人(物)化的
- 以公共汽车为例
**“面向过程”😗*汽车启动是一个事件, 汽车到站是另一个事件。。。。
在编程序的时候我们关心的是某一个事件, 而不是汽车本身。
我们分别对启动和到站编写程序。
**“面向对象"😗*构造^汽车’这个对象。
对象包含动力、服役时间、生产厂家等等一系列的“属性”;
也包含加油、启动、加速、刹车、拐弯、鸣喇叭、到站、维修等一系列的“方法”。
通过对象的行为表达相应的事件
😁💖😜🤷♂️😁‘