Python学习笔记04

函数

在这里插入图片描述
round函数是用来设置保留几位小数的函数,会进行四舍五入的计算

函数的定义

在这里插入图片描述
如上图所示
在这里插入图片描述
sys.setrecursionlimit()可以修改同一个函数可以被递归调用最大多少次数

返回多个返回值

在这里插入图片描述
如上图所示
在这里插入图片描述
函数返回多个返回值,如果只用一个变量来接收返回值,返回值会自动转换成元组
在这里插入图片描述
函数返回多个返回值,如果用对应多个变量来接收返回值,返回值会一一对应,这个在Python里面也叫序列解包
在这里插入图片描述
这里打印出来d的类型是一个元组,说明1,2,3这样的写法,会被自动赋值给元组上,叫做链式赋值,而序列解包你可以认为是链式赋值的逆反过程

必须参数与关键字参数

在这里插入图片描述
上图的想x,y参数就是必须参数,是必须要传入的参数
X,y也叫做形式参数,简称形参,而在调用add方法时候,传入的实际(1,2)的参数叫做实际参数,简称实参。
在这里插入图片描述
上图中调用add方面里面的(y=3,x=2)就是关键字参数,就不用按照顺序输入xy的值了,因为关键字参数已经告诉系统,这个值是要赋值给那个形式参数了

默认参数

在这里插入图片描述
默认参数就是在函数定义的时候给他一个默认值,这样即使不给这些默认参数传值,也不会报错,会按默认值来执行函数
在这里插入图片描述
上图可以看到,如果必须参数定义在默认参数后面,编译是不通过的
在这里插入图片描述
如果只想传名字和年龄要怎么传?直接调用关键字参数就可以了
在这里插入图片描述
上图调用函数的顺序虽然是按顺序的,但也会报错,原因是因为不能这样混杂着不同的调用参数的方式一起用,上面是位置参数混杂着关键字参数,要不就把位置参数全部放在前面

可变参数

在这里插入图片描述
可变参数的定义是在变量名前面加一个*号
可变参数的类型是一个元组
在这里插入图片描述如果已经定义了可变参数,调用函数传递参数的时候还定义一个元组,那么这个参数打印出来会变成一个二维元组
在这里插入图片描述
如果硬要传递一个元组,得到一个不是二维元组的参数怎么办?在传递元组之前在前面加上一个*号就可以了

关键字可变参数

在这里插入图片描述
解析可变参数是可以用for循环来解析的,如上图所示
在这里插入图片描述
假如现在我们设计一个函数根据参数打印出任意一个城市的温度,那么这些参数肯定要包括一个kye 一个value值,那么就要用到我们关键字可变参数的定义,**两个星号后面加参数名就可以定义完成了
而且这个参数的类型是一个字典,不在是上面的可变参数的元组了
在这里插入图片描述
如果在for循环里面只用一个参数来接收一个字典,打印出来的值就只有字典中的key
在这里插入图片描述
要调用字典内置的items()方法,而且在for循环中用两个变量来接收key 和value的值才会遍历key和value的值
在这里插入图片描述
如果想通过字典来传入一个关键字可变参数,要在字典前面加上两个**

变量的作用域

在这里插入图片描述
上图的代码可以看到两次打印C应该都是3的,但实际运行的时候却是 3 50这是为什么呢?
这是因为函数外面的c 和函数里面的c不是同一个变量 在函数外面的变量是全局变量,在函数外面起作用 函数里面的变量c是局部变量,只能在函数里面起作用,而且如果函数里面没有定义和全局变量C一样名字的变量,那么全局变量也能在函数里面起作用
在这里插入图片描述
在Python里面,在for循环外面引用for循环内部的局部变量是可以的!!!!!!这是和C# java大不同的一个特点,而且这是因为在Python里面没有一个块作用域的,在C# java里面有这个快作用域所以不能这样写,而函数作用域Python是有的,而像for循环这种语句块就没有快作用域。

global关键字

在这里插入图片描述
在这里插入图片描述
在函数里面定义了一个global变量只后,并且函数已经调用后,可以在函数外面访问到这个变量,而且在模块外面的c14里面调用c13里面的变量C 也是可以的

类的定义

在这里插入图片描述
定义如上图所示

实例化类

在这里插入图片描述
实例化类 不用new关键字, 只需要类名后面加一对括号就可以

在类中需要注意的点

在这里插入图片描述
类里面的方法,定义的时候一定要传递self参数这个是必须的,还有如果想调用类里面定义的变量,需要在变量前面加上self.变量名
在这里插入图片描述
建议在Python中在类内部不调用类定义的方法,因为类只负责刻画这个类的内容和功能,而且在类内部调用自身定义的方法需要加上self字段
在这里插入图片描述
在Python中构造函数的名字是固定的,都是__init__,和其他函数的定义一样,参数都要传递self,而且构造函数的返回值只能是返回none
在这里插入图片描述
给构造函数传递对象不同的参数特征,这点Python和C# 还是很类似的

类变量与实例变量

在这里插入图片描述
类变量是与类相关的,实例变量是与对象相关的
其他语言的类变量和实例变量都是上图第一个标识的地方定义的,而Python不同,在Python中类变量实在上图第一个标识的地方定义的,而实例变量需要在变量之前加一个self关键字,标识这个变量是实例变量
self不是一个关键字,因为这个self除了可以定义成一个self,也可以定义成一个this,所以他这个self是可以任意定义的,但Python是推荐我们把它定义成self的

类与对象的变量查找顺序

在这里插入图片描述
上图这个类里面,由于没有定义实例变量,所以即使后面实例化了一个对象出来,在打印这个对象的name的时候,这个实例变量会找不到,那按理来说应该打印的是一个None类型,但实际上打印出的是这个类的变量,所以可以得出结论,当对象的实例变量不存在的时候,会从类的对应变量中查找
在这里插入图片描述
这个写一个扩展知识,对象的__dict__可以打印出这个对象有哪些实例变量的值,类也是有这个字段的

self与实例方法

在这里插入图片描述
self就是对象本身,比如student1调用的do_homework的self参数就是student1本身
实例方法就是和实例变量一样,只和对象有关的

在实例方法中访问实例变量与类变量

在这里插入图片描述
在实例方法中访问实例变量通过self来访问
在这里插入图片描述
在这里插入图片描述
在实例方法中访问类的变量有两种方法,第一种就是通过类名来访问
第二种就是通过self. __ class__来访问,这个__class__就是指这个对象的类

类方法

在这里插入图片描述
类方法的定义是在方法上面加一个@classmethod,参数一般约定俗成的要有cls
类方法的作用主要是操作和类相关的一些操作
这个@classmethod是Python里面的装饰器
cls代表类本身
在这里插入图片描述
调用类方法直接用类名来调用就可以了,但Python也可以用对象来调用类的方法,推荐的话还是用类名来调用

静态方法

在这里插入图片描述
静态方法的定义是给方法加上一个@staticmethod装饰器
这个静态方法其实和类方法一样,但类方法调用类变量更方便
静态方法和类方法都不能访问到实例变量
在这里插入图片描述

成员的可见性

在Python中,如果不写出成员的修饰符,默认是公开的变量
在这里插入图片描述
在Python中,定义一个成员的是私有的是通过给他前面加一个__双下划线
在这里插入图片描述
这里指出一个常见的误区
上面这段代码,看上去好像可以在外面修改这个私有变量的值,而且打印还成功了,但实际上是在外面出现添加了一个实例变量,打印的这个__score是一个新的变量来的
所以可以看出,在·Python中是可以在外面给对象添加一个实例变量的,这是由于Python的动态的一种特性
在这里插入图片描述
从student1. __ dict__的打印可以看出,有一个__score的变量,这个就是刚刚动态添加的一个变量,而_Student__score是我们在类里面定义的私有变量self.__score这个是Python会自动生成的
实际上我们还是可以通过_Student__score来访问我们的私有变量,所以实际上Python是不会有什么手段去阻止你去访问一个私有变量的

继承

在这里插入图片描述
在类的定义括号里面,把父类加进去就可以了
Pythhon是可以多继承的
在这里插入图片描述
在子类的构造函数用父类调用父类的构造函数需要传递self参数

Superg关键字

在这里插入图片描述
在这里插入图片描述
用super关键字调用父类的构造函数如上图所示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值