17、Python模块
模块允许逻辑地组织Python代码。 将相关代码分组到一个模块中,使代码更容易理解和使用。 模块是一个具有任意命名属性的Python对象,可以绑定和引用。
简单来说,模块是一个由Python代码组成的文件。模块可以定义函数,类和变量。 模块还可以包括可运行的代码。
示例
下面是一个名称为
aname
的模块的Python代码通常位于一个名称为
aname.py
的文件中。
1.import语句
可以通过在其他Python源文件中执行
import
语句来将任何Python源文件用作模块。
当解释器遇到导入语句时,如果模块存在于搜索路径中,则导入该模块。搜索路径是导入模块之前解释器搜索的目录的列表。
不管模块被导入多少次,模块只能加载一次。这样可以防止模块执行重复发生,如果有多个导入。
2.from…import语句
Python
from
语句允许将模块中的特定属性导入到当前的命名空间中。
3.from…import *语句
也可以使用以下
import
语句将模块中的所有名称导入到当前命名空间中 。
这提供了将所有项目从模块导入到当前命名空间中的简单方法; 但是,这个说法应该谨慎使用。
4.执行模块作为脚本
在模块中,模块的名称(作为字符串)可用作全局变量
__name__
的值。模块中的代码将被执行,就像您导入它一样,但是
__name__
设置为“
__main__
”。
5.定位模块
当导入模块时,Python解释器将按以下顺序搜索模块 -
- 当前目录。
- 如果没有找到该模块,Python会在shell变量PYTHONPATH中搜索每个目录。
- 如果其他所有失败,Python将检查默认路径。 在UNIX上,此默认路径通常是/usr/local/lib/python3/ 或者 /usr/sbin/
模块搜索路径作为
sys.path
变量存储在系统模块
sys
中。
sys.path
变量包含当前目录
PYTHONPATH
和依赖于安装的默认值。
6.PYTHONPATH变量
PYTHONPATH
是一个环境变量,由目录列表组成。
PYTHONPATH
的语法与shell变量`PATH```的语法相同。
这是一个典型的Windows系统上的
PYTHONPATH
-
set PYTHONPATH = c:\python34\lib;
Shell
这里是UNIX系统的典型
PYTHONPATH
-
set PYTHONPATH = /usr/local/lib/python
Shell
7.命名空间和范围
变量是映射到对象的名称(标识符)。 命名空间是变量名(键)及其对应对象(值)的字典。
引用全局变量,不需要golbal声明,修改全局变量,需要使用global声明,特别地,列表、字典等如果只是修改其中元素的值,可以直接使用全局变量,不需要global声明。
#!/usr/bin/python3
Money
=
2000
def
AddMoney
():
# Uncomment the following line to fix the code:
global Money Money
=
Money
+
1
print
(
Money
)
AddMoney
()
print
(
Money
)
8.dir( )函数
dir()
内置函数返回一个包含由模块定义的名称的字符串的排序列表。这个列表包含模块中定义的所有模块,变量和函数的名称。 以下是一个简单的例子 -
import
timecontent
=
dir
(
time
)
9.globals()和locals()函数
globals()
和
locals()
函数可用于返回全局和本地命名空间中的名称,具体取决于它们被调用的位置。
- 如果locals()从一个函数中调用,它将返回从该函数本地访问的所有名称。
- 如果从函数中调用globals(),它将返回从该函数全局访问的所有名称。
这两个函数的返回类型是字典。 因此,可以使用
keys()
函数提取名称。
10.reload()函数
当将模块导入到脚本中时,模块的顶级部分的代码只能执行一次。
因此,如果要重新执行模块中的顶级代码,可以使用
reload()
函数。
reload()
函数再次导入以前导入的模块。
reload()
函数的语法是这样的 -
reload(module_name)
11.Python中的包
Python中的包是一个分层文件目录结构,它定义了一个由模块和子包和子子包组成的Python应用程序环境,等等。
在
package
目录中创建目录:
pkg
, 然后分别在这目录中创建文件:
a.py
。
在
package
目录中创建一个主程序文件:
main.py
,用于演示如何调用包中的各个文件 -
import
pkg
.
a
as
aa
.
fun
()
或者
import
pkg
.
apkg
.
a
.
fun
()
18、类
基本和Java语言类似 继承、构造函数等、重载、多态等
19、处理异常
如果有一些可能引发异常的可疑代码,可以通过将可疑代码放在
try:
块中来保护您的程序。 在
try:
块之后,包括一个
except:
语句,然后是一个尽可能优雅地处理问题的代码块。
以下是上述语法的几个重点 -
- 一个try语句可以有多个except语句。 当try块包含可能引发不同类型的异常的语句时,这就很有用。
- 还可以提供一个通用的except子句,它处理任何异常。
- 在except子句之后,可以包含一个else子句。 如果try:block中的代码不引发异常,则else块中的代码将执行。
- else-block是一个不需要try:block保护的代码的地方。
try-finally子句
可以使用
finally:
块和
try:
块。
finally:
块是放置必须执行代码的地方,无论
try
块是否引发异常。
注意 - 可以提供
except
子句或
finally
子句,但不能同时提供。不能使用
else
子句以及
finally
子句。
抛出异常
可以通过使用
raise
语句以多种方式引发异常。
如:
raise
Exception
(
xxx
)
20、Socket编程
服务端
import
socket
serversocket = socket.socket()
host = socket.gethostname()
port =
9999
serversocket.bind((host, port))
print
(
"server start at port:"
+
str
(port))
serversocket.listen(
5
)
while True
:
clientsocket,addr = serversocket.accept()
print
(
"Got a connetion from:"
+
str
(addr))
clientsocket.send(
'thx for connection!'
.encode(
'ascii'
))
clientsocket.close()
|
客户端
import
socket
client = socket.socket()
host = socket.gethostname()
port =
9999
client.connect((host,port))
msg = client.recv(
10240
);
print
(msg.decode(
'ascii'
))
client.close()
|