10.函数应用
01.函数的定义与调用
函数: 函数就是执行特定任务以完成特定功能的一段代码
为什么需要函数?
- 复用代码
- 隐藏实现细节
函数的创建:
def 函数名 ([输入参数]): 函数体 [return xxx]
例如:
def calc(a,b): c=a+b return c print(calc(3,4))
02.函数调用的参数传递
函数定义时的参数:形式参数
函数调用时的参数:实际参数
- 位置实参
根据形参对应的位置进行实参传递
def calc(a,b) calc(10,20)
- 关键字实参
根据形参名称进行实参传递
def calc(a,b) calc(b=10,a=20)
03.函数的参数传递内存分析
在函数调用过程中,进行参数的传递:如果是不可变对象,在函数体的修改不会影响实参的值,如果是可变对象,在函数体的修改会影响到实参的值
04.函数的返回值
函数返回多个值时,结果为元组。
函数的返回值,如果是1个,直接返回类型
05.函数的参数定义
函数定义默认值参数:函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
def fun(a,b=10): print(a,b)
- 个数可变的位置参数:
def fun(*args): print(args) fun(10) fun(10,20,30)
- 个数可变的关键字形参
def fun(**args): print(args) fun(a=10) fun(a=10,b=20,c=30)
函数定义时的形参的顺序问题:
从*之后都是参数可变的
06.变量的作用域
变量的作用域:程序代码能访问该变量的区域
根据变量的有效范围可分为:
局部变量 :在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会成为全局变量
全局变量:函数体外定义的变量,可作用域函数内外
07.递归函数
什么是递归函数:如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数。
递归的组成部分:递归调用与递归终止条件
递归的调用过程:每递归调用一次函数,都会在栈内存分配一个栈帧,每执行完一次函数,都会释放相应的空间。
递归的优缺点:
缺点:占用内存多,效率低下
优点:思路和代码简单
11.异常
01.bug类型
语法错误 SyntaxError
知识点不熟练导致的错误
思路不清晰导致的错误
ZeroDivisionError:除零
IndexError:序列中没有此索引
KeyError:映射中没有这个键
NameError:未声明/初始化对象
SyntaxError:Python语法错误
ValueError:传入无效的参数
02.Python的异常处理机制
try…except…else结构
如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
try…except…else…finally结构:
finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源。
03.traceback模块
使用traceback模块打印异常信息
import traceback try: print('1.------') num=10/0 except: traceback.print_exc()
04.PyCharm开发环境的调试
- 断点:程序运行到此处,暂时挂起,停止执行。此时可以详细观察程序的运行情况,方便做出进一步判断。
- 进入调试试图:
- 单机工具栏上的按钮
右键单击编辑区:点击:debug模块名
快捷键:shift+F9
12.类和对象
01.面向过程和面向对象
面向过程:事务比较简单,可以用线性的思维去解决。
面向对象:事务比较复杂,使用简单的线性思维无法解决。
两者是相辅相成的,不能单一的使用一种方法。
02.类与对象
类是多个类似事物组成的群体的统称。能够帮助我们快速处理和判断事物的性质。
数据类型:
不同的数据类型属于不同的类
使用内置函数type()查看数据类型
对象
100、99、520都是int类之下包含的相似的不同个例
03.类的创建
- 创建类的语法
class Student : pass
类的组成:
类属性
实例方法
静态方法
类方法
class Student: native_pace='吉林' #类属性 #实例方法 def eat(self): print('学生在吃饭') @classmethod #类方法 def cm(cls): print('类方法') #静态方法 @staticmethod def method(): print('我使用了statticmethod进行修饰,所以我是静态方法')
04.对象的创建
对象的创建又称为类的实例化
语法: 实例名=类名()
05.类属性、类方法、静态方法
类属性:类中方法外的变量称为类属性,被该类的所有对象所共享
类方法:使用@classmethod修饰的方法,使用类名直接访问的方法
静态方法:使用@staticmethod修饰的方法,使用类名直接访问的方法
06.动态绑定属性和方法
class Student: def __init__(self,name,age): self.name=name self.age=age def eat(self): print(self.name+'在吃饭') print('动态绑定属性-----') stu2=Student('张三',20) stu2.gender='女' print(stu2.name,stu2.age) print(stu2.gender) print('动态绑定方法----') def show(): print('定义在类之外,称为函数') stu2.show=show() stu2.show
代码中可以自己指定对象的属性