python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式

1.类属性,实例方法和类方法

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第1张图片

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第2张图片
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第3张图片
上方都是实例方法,能访问能运行。
那么类方法究竟是什么样子呢?

只要有个类方法装饰器即可。
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第4张图片
总结:实例方法 参数是 self;类方法,参数是cls
类方法可以通过类调用,也可以通过实例调用,实质上没有区别
只是类对象要传递参数来指定哦。
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第5张图片
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第6张图片

.静态方法

静态方法不需要传递参数,所以self参数自动变暗了。

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第7张图片

2.面向对象的模块

将大模块哦,不是random这种自带小模块。

模块化:就是将完整功能分解为一个个小模块,通过模块组合来搭建出完整程序
优点:
1.方便开发和维护
2.模块可以复用

模块创建:
在python中,一个py文件就代表一个模块。

#在一个模块中引入其他模块
#1.import模块名(python的文件名)
import test_m
#虽然没有test_m中的指令语句,但是调用过来了,就可以执行运行。可以引入同一个模块多次,但是只执行重复的一次,即调用一次。

#2.import 模块名 as 模块别名
import test_m as test
#  print(test_m)   这个是报错的哦,因为改名了。
print(test)   


#在每一个模块内部都有一个双下划name  (__name__),通过它可以获得当前引入模块的名字,但是运行__name__却出现结果为 __main__,说明当前是主文件。
print(__name__)  #运行结果是 __main__

模块的使用

1.在模块中引入变量
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第8张图片
2.在模块中定义函数
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第9张图片
对应上requests 就可以举一反三了吧
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第10张图片
3.在模块中定义类:
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第11张图片
##我们也可以引入模块中的部分内容
语法: from 模块名 import 变量

下图解决引入很多很多,可以直接把所有要引入的变量都写出来。
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第12张图片
4. 语法 :from 模块名 import 变量 as 别名

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第13张图片
总结:不同情况,根据以上不同方法去解。一般不需要这么多种。

如果是主文件,才会执行,
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第14张图片
总共这么多方法:
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第15张图片

3.列表推导式列表

旧的列表–>新的列表
语法:

  1. [for 变量 in 旧列表]
  2. [表达式 for 变量 in 旧列表 if 条件]

原来的方式:用定义函数,传递列表,优点,条理清晰,且动能强。
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第16张图片

而用列表推导式 则如下:(特点:条件简单可以用)
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第17张图片
在这里插入图片描述
and 条件照样用上
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第18张图片

4.生成器 Generator

在python中有一边循环一边计算的机制,称之为 “生成器”
当我们创建了很多元素,但是只需要几个,这时候就用生成器取我们要的几个,节省性能。

如何创建生成器
#1. 通过列表推导式
@需求:得到一个0-10之内 分别和3相乘的结果的列表

new_lst=[x*3 for x in range(10)]
print(new_lst)

我们用列表推导式方式,将外层[]去掉换成了(),就变成了生成器

方式一、用__next__()获得元素,每次获得一个,可以多次调用,出多个元素

g=(x*3 for x in range(10))
print(type(g)) # 是一个generator对象

print(g.__next__())
print(g.__next__())

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第19张图片
方式二、next()
如果超出了范围会报错!
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第20张图片

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第21张图片

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第22张图片

定义生成器方式二、通过函数完成
1.定义一个函数,函数中使用yield关键字
2. 调用函数,接受调用结果。
3. 得到的结果就是个生成器
4. 通过next()函数__next__()

下图死循环程序
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第23张图片
只要在函数中添加了yield关键字,说明这个函数变成了生成器函数了。
运行下图无反应!
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第24张图片
更改一下,运行结果如下:
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第25张图片

在这里插入图片描述
下图运行为 1 和 2
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第26张图片

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第27张图片
提醒:
python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第28张图片

本次回顾:

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第29张图片

python基础_类属性、类方法、实例方法、面向对象的模块、模块的使用、列表推导式_第30张图片

你可能感兴趣的:(python)