当你自己要写一个完整的工程文档时,你需要能对文档中的各个.py文件正确引用
同文件中的函数def和类class
这里有一个print_test.py
,里面包含了:
先让我们分析一下:
- 第一行是一个直接运行的print函数
print123()
和print789()
是自定义函数- print456是一个自定义类,里面包含了一个
printfunction()
函数,而且此函数里面还调用了print123()
函数 - 最下方是本文件的运行函数,而且里面也有一个print函数
当我们直接运行本文件时,输出是什么呢:
即:
- 第一个行的print函数、运行函数里面的print函数以及自定义的
print123()
都被运行了, - 而
print789()
和print456
这个类,没有被运行
请注意输出的顺序,虽然都被运行了,但是是有顺序区分的。
从结果来看,可以得到这样的结论:
- 函数从上到下开始运行,所以第一行的print函数第一个运行并输出
- 自定义函数需要在运行函数中进行执行,才能运行,否则就不会运行
- 自定义的类同上,不能自行运行
在其他文件中使用import和from…import
import即从一个**.py**(或者称之为库)里面,导入一些东西,这些东西可能是函数def、类class或者实例变量。
现有另外一个文件,testtest.py
:
使用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()
,这样会报错
- 123是执行了
import :
当我们将from import换成import会发生什么呢:
运行报错如下:
竟然找不到这些函数和类了!为啥啊?
原因是,我们现有代码是按着from…import具体函数来写的,但是当我们直接import .py 文件的时候,我们并不能直接使用函数
而是应该要在使用函数前加上.py文件的名字,作为限定,在这里就是module.print_test
,而完整地应用应该是:
这时候就能正常运行了!
直接import和from…import的区别就是
- 直接import想要使用函数,需要在前面加限定,而这个限定的帮助就是在新的文件中不容易产生互相冲突的变量名
- from import就是直接将一个.py 库中的具体函数拿来用,可能会产生变量重名的情况,而且在多层的嵌套结构下,可能会出现import错误
还有一种情况,是 from…import * ,这代表从库中导入所有东西,注意是所有。但是这就会导致可能存在变量重名的问题,一般来说,尽量只对已经确定好不会产生冲突的情况下进行此类操作。
这时候可以直接使用库中的函数,也不会报错