Python:关于类class、函数def、import和from...import的实际操作

当你自己要写一个完整的工程文档时,你需要能对文档中的各个.py文件正确引用

同文件中的函数def和类class

这里有一个print_test.py,里面包含了:
Python:关于类class、函数def、import和from...import的实际操作_第1张图片

先让我们分析一下:

  • 第一行是一个直接运行的print函数
  • print123()print789()是自定义函数
  • print456是一个自定义类,里面包含了一个printfunction()函数,而且此函数里面还调用了print123()函数
  • 最下方是本文件的运行函数,而且里面也有一个print函数

当我们直接运行本文件时,输出是什么呢:
在这里插入图片描述
即:

  • 第一个行的print函数、运行函数里面的print函数以及自定义的print123()都被运行了,
  • print789()print456这个类,没有被运行

请注意输出的顺序,虽然都被运行了,但是是有顺序区分的。

从结果来看,可以得到这样的结论

  • 函数从上到下开始运行,所以第一行的print函数第一个运行并输出
  • 自定义函数需要在运行函数中进行执行,才能运行,否则就不会运行
  • 自定义的类同上,不能自行运行

在其他文件中使用import和from…import

import即从一个**.py**(或者称之为)里面,导入一些东西,这些东西可能是函数def、类class或者实例变量。

现有另外一个文件,testtest.py

Python:关于类class、函数def、import和from...import的实际操作_第2张图片

使用from…import :

前两行的意思是,从module这个文件夹中的print_test文件中import 函数print789()和类print456

运行得到结果:
在这里插入图片描述

  • 第一个输出 out of function是print_test.py中最外层中执行的函数的输出结果
  • 789是运行函数中执行print789()输出的结果
  • 注意这里的123和printfunction456从哪里来呢?
    • 123是执行了print456类中的printfunction函数中对print123()函数调用所输出的结果
    • 而printfunction456是这个print456类中的printfunction函数的输出结果
    • 即此时的print345这个类被正确调用并且执行了
    • 请注意,正确的类的使用必须提前对类进行实例化,否则会报错,文件中的a=print456()就是实例化,然后再使用printfunction()函数,而不能直接print456.printfunction(),这样会报错

import :
当我们将from import换成import会发生什么呢:
Python:关于类class、函数def、import和from...import的实际操作_第3张图片
运行报错如下:
在这里插入图片描述
竟然找不到这些函数和类了!为啥啊?

原因是,我们现有代码是按着from…import具体函数来写的,但是当我们直接import .py 文件的时候,我们并不能直接使用函数

而是应该要在使用函数前加上.py文件的名字,作为限定,在这里就是module.print_test,而完整地应用应该是:
Python:关于类class、函数def、import和from...import的实际操作_第4张图片
这时候就能正常运行了!

直接import和from…import的区别就是

  • 直接import想要使用函数,需要在前面加限定,而这个限定的帮助就是在新的文件中不容易产生互相冲突的变量名
  • from import就是直接将一个.py 库中的具体函数拿来用,可能会产生变量重名的情况,而且在多层的嵌套结构下,可能会出现import错误

还有一种情况,是 from…import * ,这代表从库中导入所有东西,注意是所有。但是这就会导致可能存在变量重名的问题,一般来说,尽量只对已经确定好不会产生冲突的情况下进行此类操作。

这时候可以直接使用库中的函数,也不会报错
Python:关于类class、函数def、import和from...import的实际操作_第5张图片

你可能感兴趣的:(知识分享,python,python,人工智能,机器学习)