Contents
  1. 1. 处理非常长的字符串
  2. 2. 引入其他的包或者其他的py文件
    1. 2.1. 导入模块
    2. 2.2. 模块搜索路径
    3. 2.3. 模块的name
    4. 2.4.

这一系列blog用来记录python学习过程中积累的知识点吧。个人感觉在IT行业,最快地掌握知识点的方法就是用到实际中去,比如依托于一个项目,比如自己真正地去搞一个东西,在这个过程中的学习是非常高效而且记忆深刻的。后面准备把自己用python写的爬北邮人论坛的过程总结一下,今天就先介绍两个零碎的知识点:字符串的换行和引入其他py文件。

注意:我使用的python版本是3.5

处理非常长的字符串

如果你的字符串很长,那么改如何处理呢?直接回车是不行的,就像这样子:

python提供了3种方式可以用来对很长的字符串进行换行显示:

  • 三个’号

  • 三个”号

  • 在第一行的末尾加上 \

引入其他的包或者其他的py文件

其实问题就归根结底到import的用法了,以下内容转自这里
在程序中定义函数可以实现代码重用。但当你的代码逐渐变得庞大时,你可能想要把它分割成几个文件,以便能够更简单地维护。同时,你希望在一个文件中写的代码能够被其他文件所重用,这时我们应该使用模块(module)。

导入模块

在Python中,一个.py文件就构成一个模块。一个模块中的定义可以导入(import)到另一个模块或主模块。
比如你可以通过内置模块platform来查看你当前的操作平台信息:

1
2
3
import platform  
s = platform.platform()
print(s)

我的输出是

Linux-3.15.8-200.fc20.x86_64-x86_64-with-fedora-20-Heisenbug

又比如你可以通过内置模块time获取当前的时间:

1
2
3
import time  
s = time.ctime()
print(s)

输出:Mon Aug 18 16:04:57 2014

每个模块有其私有的符号表,在该模块内部当成全局符号表来使用。 当我们将一个模块导入到当前模块时,只有被导入模块的名称被放入当前模块的全局符号表里,所以我们不用担心变量名发生冲突。
其他几种导入方式:

1、 import a as b:导入模块a,并将模块a重命名为b。

1
2
3
import time as x     
s = x.ctime()
print(s)

2、 from a import func:直接把模块内的函数或变量的名称导入当前模块符号表里。

1
2
3
from time import ctime  
s = ctime() # 这时可以直接调用函数,而不用再使用time.ctime()
print(s)

3、 from a import *:导入模块中所有的名字(以下划线开头的名字除外)到当前模块符号表里。

1
2
3
from time import *  
s = ctime()
print(s)
注意:导入 * 是不好的,因为它常常产生难以阅读的代码,并且会容易产生名字冲突。

模块搜索路径

当导入名为 a 的模块时, 解释器会先从内建模块尝试匹配,如果没找到,则将在 sys.path 记录的所有目录中搜索 a.py 文件,而sys.path则包括:

  • 当前程序所在目录
  • 标准库的安装目录
  • 操作系统环境变量PYTHONPATH所包含的目录

变量 sys.path 是一个字符串列表,它为解释器指定了模块的搜索路径。它通过环境变量 PATHONPATH 初始化为一个默认路径,当没有设置 PYTHONPATH 时, 就使用内建默认值来初始化。你可以通过标准 list 操作来修改它:

1
2
import sys  
sys.path.append('/ufs/guido/lib/python')

模块的name

对于任何一个模块,模块的名字都可以通过全局变量 __name__得到:

1
2
3
import time  
s = time.__name__
print(s) # 输出time

一个模块既可以在其它模块中导入使用,也可以当作脚本直接运行。不同的是,当导入到其他模块时,__name__的值是被导入模块的名字;而当作为脚本运行时,__name__的值被设为__main__

1
2
3
4
5
#test.py  
if __name__ == '__main__':
print('This program is being run by itself')
else:
print('I am being imported into another module')

当作脚本执行:

$ python test.py

输出:This program is being run by itself

当作导入模块使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
import test`
```

输出: `I am being imported into another module`


## dir() 函数

在Python3中可以通过内置dir()函数查询一个类或者对象的所有属性。除此之外,我们还可以用它列出一个模块里定义的所有名字,它返回一个有序字串列表:

```python
import builtins
dir(builtins)

可以把多个模块,即多个.py文件,放在同一个文件夹中,构成一个包(Package)。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sound/							顶级包  
__init__.py 初始化这个声音包
formats/ 格式转换子包
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
...
effects/ 音效子包
__init__.py
echo.py
surround.py
reverse.py
...
filters/ 过滤器子包
__init__.py
equalizer.py
vocoder.py
...

注意:
在每个包文件夹里都必须包含一个 __init__.py 的文件,告诉Python,该文件夹是一个包。__init__.py 可以是一个空文件。
我们可以通过import 包名.模块名导入包中的子模块,例如:

1
import sound.effects.echo

当然,也可以使用from… import…句式导入包中的模块:

1
2
3
from sound.effects import echo               # 导入echo子模块  
from sound.effects.echo import echofilter # 导入echo子模块中的函数或变量
from sound.effects import * # 导入__all__变量中所有的子模块
Contents
  1. 1. 处理非常长的字符串
  2. 2. 引入其他的包或者其他的py文件
    1. 2.1. 导入模块
    2. 2.2. 模块搜索路径
    3. 2.3. 模块的name
    4. 2.4.