原来函数可以跨模块和跨包使用
不知道你在学习python的过程中是否遇到这样的问题,用pycham写在一个.py文件中的函数,在另一个.py文件中想要使用却不知道怎样才能用,最后,要么去把之前的函数copy了过来,要么上了csdn。你想的没错,不同的.py文件(也叫模块(module),后面我们称它为一个模块)中的函数是可以相互调用的,而且操作特别简单,不仅可以调用其他模块的函数,当想要用的函数没有和当前模块在一个包里面时,也是可以的,只是导入
的一点儿区别。
1.跨模块(module)使用函数
当想要在当前模块(就是之前说的当前.py文件)中使用另一个模块中的函数时,这时候,我们需要在当前模块中导入所需函数的所在模块或者从该函数所在模块中导入该函数,这句话可能有点绕,但是没关系,看完下面的例子,你就懂了。
例如,当前有两个模块,一个叫做example01,里面有一个函数叫作foo,另一个模块叫作example02,里面同样也有一个函数叫作foo,现在我们想在example02模块中调用模块example01中的foo函数
模块example01
"""
example01 - 跨模块使用函数
Author: 码农邓翔宇
Date: 2021/8/7
"""
def foo():
print("hello,world")
模块example02
"""
example02 - 跨模块使用函数
Author: 码农邓翔宇
Date: 2021/8/7
"""
def foo():
print("goodbye,world")
要想在example02模块中调用模块example01中的foo函数,需要用import关键字导入example01模块,然后用模块名.函数名的方式就可以使用模块example01中的foo函数了,如下
"""
example02 - 跨模块使用函数
Author: 码农邓翔宇
Date: 2021/8/7
"""
import example01
def foo():
print("goodbye,world")
example01.foo() # goodbye,world
而且如果我们觉得每次使用模块example01中的foo函数都要先写长长的模块名儿麻烦,第一种方式,我们可以使用as关键字将example01指定一个暂用命(在此模块中的给它改一个名字,它本身的名字并不变),这样就可以不用敲长长的模块名儿了,代码如下。
"""
example02 - 跨模块使用函数
Author: 码农邓翔宇
Date: 2021/8/7
"""
import example01 as e
def foo():
print("goodbye,world")
e.foo() # 和之前得到同样的结果
程序员都是懒惰的,每次调用我们都要写个e.我们还是觉得麻烦,这时候,还有另一种解决的方法,使用从模块只导入该函数的方式,也就是如下这样,
"""
example02 - 跨模块使用函数
Author: 码农邓翔宇
Date: 2021/8/7
"""
from example01 import foo # 用中文来讲,就是,从example01这个模块中导入foo这个函数,而之前是导入example01模块
def foo():
print("goodbye,world")
foo() # goodbye,world
但是现在,我们却发现,结果并不是我们想要的,因为,我们想要的是hello,world,也就是说,它调用的是当前模块中的foo函数而非example01中的foo函数,这里就涉及了一个覆盖概念,比如,我们定义一个变量
a = 1 # 接下来在定义
a = 2 # 这时候print(a)得到的结果是2,就是说之前的a = 1的值被a = 2的值覆盖了
那么,函数也是一样,他们使用同样的函数名,先定义的函数会被后定义的函数覆盖,所以它输出为‘goodbye,world’,那么问题就不能解决了吗?可能你已经想到了,既然模块可以给它重新命名一个名字,那么,如果我们给导入的函数在当前模块中取一个不同的名字,是不是就可以解决这种重名函数的问题呢?我们来试一试。
"""
example02 - 跨模块使用函数
Author: 码农邓翔宇
Date: 2021/8/7
"""
from example01 import foo as f # 给foo函数改名字为f
def foo():
print("goodbye,world")
f() # hello,world
foo() # goodbye,world
现在,由于两个函数不再重名,于是,两个函数都可以正常调用了。
是不很简单呢?
接下来我们来看一种稍微复杂一点的东西。如果现在这连个模块不再一个包里面(跨包(package)),那么我们这时候又该怎样解决呢?
2.跨包(package)使用函数
实际上,当我们遇到这样的问题时,实际上是换汤不换药的做法,现在,我们使用pycham创建两个包来作示范。
点击工程project(你所创建的工程,我这里叫day16)右击 ----->点击New—>点击Python Package—>在弹出的框中写上包名回车就创建好一个包了。我这里叫pack01,现在,我将之前的example01模块剪切到这个包里面,同样,创建一个包pack02,将之前的example02模块剪切到这个包里面.如下
现在,我们需要做前面的事情,从example02中调用example01中的foo函数,实际上,当我们完成上面的模块的移动后,再看代码,我们发现系统已经自动和我们改成了下面这儿样子
"""
example02 - 跨模块使用函数
Author: 码农邓翔宇
Date: 2021/8/7
"""
from pack01.example01 import foo as f # 用中文来讲,就是,从example01这个模块中导入foo这个函数,而之前是导入example01模块
def foo():
print("goodbye,world")
f() # hello,world
foo() # goodbye,world
不同之处就在于在导入时,模块eaxmple01那里加上了pack01.这就说明,跨包导入时,我们只需要在前面再加上包名.模块名的形式就可以正常实现我们的需了。当然,要导入在当前模块导入另一个模块整个模块时,同样使用from 包名 import 模块名的形式就可以导入了,as关键字正常使用
如果对你有帮助,不要忘记点赞、关注、评论加收藏哦!
ck01.这就说明,跨包导入时,我们只需要在前面再加上包名.模块名的形式就可以正常实现我们的需了。当然,要导入在当前模块导入另一个模块整个模块时,同样使用from 包名 import 模块名的形式就可以导入了,as关键字正常使用
如果对你有帮助,不要忘记点赞、关注、评论加收藏哦!