十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
(1)主程序main.py与模块程序mod1.py在同一目录下。
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的鄂托克前网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
--src
|--mod1.py
|--main.py
直接在main.py中导入模块mod1.py,即 import mod1 或 from mod1 import *
(2)主程序main.py所在目录是模块程序mod.py所在目录的父目录。
--src
|--mod1.py
|--main.py
---mod2
|--mod2.py
先需要在mod2文件夹中建立空文件__init__.py
然后在main.py中导入模块mod2.py,即 import mod2.mod2 或 from mod2.mod2 import *
(3)主程序main.py导入上层目录中的模块或其他目录(平级)下的模块。
--src
|--mod1.py
---mod2
|--mod2.py
---sub
|--main.py
先需要在mod2文件夹中建立空文件__init__.py,而src文件夹下不需要建立
然后进入主程序main.py所在的路径,执行python main.py
在main.py中导入模块mod2.py,即 import mod2.mod2 或 from mod2.mod2 import *
执行前在main.py中加入:
import sys
sys.path.append("..")
import mod1
import mod2.mod2
这个问题涉及到包和模块管理。包名和模块名一般是小写。你的文件是下面的结构,需要创建空文件 b/__init__.py,将b目录变成package。a/a.py
12
from b.c import indexindex()
b/c.py
12
def index(): print("hello")
b/__init__.pya/a.py 里面有两种引用方式,相对引用和绝对引用:# 如果a.py是 library,两种引用方式都可以
1
from ..b.c import index
# 如果a.py是 executable,必须使用绝对引用
1
from b.c import index
如果使用绝对引用,需要确保b所在目录在PYTHONPATH (sys.path)里面,比如可以这样执行:
1
env PYTHONPATH=. python a/a.py
python的内建函数即是python自带的函数,这种函数不需要定义,并且不同的内建函数具有不同的功能,可以直接使用。
以下是部分内建函数用法及说明
1、abs(),返回数字的绝对值。
2、all(),如果集合中所有元素是true或集合为空集合,返回True。
3、any(),如果集合中有一项元素是true,返回True;空集合为False
4、ascii(), 返回一个表示对象的字符串。
5、bin(),将整数转换为前缀为“0b”的二进制字符串。
6、bool(),返回一个布尔值,即True或者之一False。
7、bytearray(),返回一个新的字节数组。
8、callable(对象)判断对象参数是否可被调用(可被调用指的是对象能否使用()括号的方法调用)
9、chr(),返回表示Unicode代码点为整数i的字符的字符串。与ord()函数相反。
推荐学习《python教程》
10、classmethod,将方法转换为类方法。
11、compile,将源代码编译为代码或AST对象。代码对象可以由exec()或执行eval()。 source可以是普通字符串,字节字符串或AST对象。
12、dic(),创建一个字典
13、divmod(a,b),将两个数作为参数,并在使用整数除法时返回由商和余数组成的一对数
14、enumerate(iterable,start = 0)
enumerate是枚举、列举的意思
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
enumerate多用于在for循环中得到计数
15、eval,将一个字符串变为字典
16、exec(object [, globals[, locals]])exec语句用来执行储存在字符串或文件中的Python语句
17、filter(功能,可迭代)
filter函数用于过滤序列
filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
1、导入整个模块:
一般格式为:
import
模块1[模块2[,...]]
模块名就是程序文件的前缀,不含.py,可一次导入多个模块,导入模块后,调用模块中的函数或类时,需要以模块名为前缀,这样代码读起来更容易理解。
例:
import
math
math.sin(0.5)
0.4794255
2、与form联用导入整个模块:
一般格式为:
form
模块名
import*
这种方式导入模块后,调用模块中的函数或类,仅使用函数名或类名,代码简洁,但可读性差,不容易理解。
例:
form
math
import*
cos(0.5)
0.8775825
3、与form联用导入一个或多个对象:
一般格式为:
form
模块名
import
对象1[,对象2[,对象...]]
这种方式只导入模块中的一个或多个对象,调用模块中的对象时,仅使用对象名
例:
form
math
import
sin,cos,exp
sin(0.5)
0.4794255
cos(0.5)
0.8775825
exp(1)
2.7182818
有如下目录:
即python文件夹下有file1, file2, pfile.py, data.py,文件夹file1下又有file1_1, pfile1.py, 文件夹file2下有pfile2.py,文件夹file1_1下又有pfile1_1.py。
在文件pfile.py中导入pfile1.py, pfile2.py或 pfile1_1.py,并使用其中的函数(假设函数名分别文fun1(), fun2(), fun1_1()):
需要注意的是,这种导入方式下,如果要用导入的文件中的函数或者类,需要在其前面加上文件名,即 "文件名.函数名" 的形式 。
有些教程里面说,需要在下一级目录下新建一个空的python文件命名为 __init__.py,但我在运行时发现不建一个文件也会导入成功。
如果要在pfile1.py中调用pfile.py 和 pfile2.py,因为当前路径是 '/home/puxitong/python/file1/' ,而 pfile.py和pfile1.py在路径'/home/puxitong/python/' 及其子路径下,这里的思路是将上一级目录 '/home/puxitong/python/' 添加在系统路径中,可以直接访问pfile.py,然后将pfile2.py 按照下一级路径导入方式进行导入:
如果要在pfile1_1.py中导入pfile.py, pfile1.py, pfile2.py呢? 原理是一样的,即将文件pfile.py所在路径添加到系统路径中,可直接导入pfile.py, 再按照下级文件导入方式导入pfile1.py和pfile2.py:
导入 import module_name
调用 module_name.function_name()
在这种情况中,不会出现下面两种方式的缺点,即具有相同函数名的问题,因为一个文件中不存在两个相同的文件名。但缺点是能不清晰显示出使用到的函数,调用的时候也需要重复写模块名。
导入 from module_name import function_name1 , (function_name2...)
调用 function_name()
在这种情况中,虽然能清楚的表示出使用到的函数,如果是多个不同的模块,但其中的函数名有重叠时,后导入的模块函数为能使用的函数,即产生覆盖函数。
导入 from module_name import *
调用 function_name()
这种方法不推荐使用,因为它集合了前两种方式的缺点,即导入不清晰,调用全部函数会更容易造成覆盖函数。