在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。
在Python中,是通过_前缀来实现的。
正常的函数和变量名是公开的(public),可以被直接引用,但是有特殊用途,比如__author__,__name__就是特殊变量,文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名。
类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等。
之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。
private函数或变量不应该被引用,那他们有什么用呢?请看例子:
def _private_1(name):
return 'Hello,%s' % name
def _private_2(name):
return 'Hi,%s' % name
def greeting(name):
if len(name)>3:
return _private_1(name)
else:
return _private_2(name)
print(greeting('康永清'))
print(greeting('马垒'))
print(greeting('上官冲力'))
输出结果:
Hi,康永清
Hi,马垒
Hello,上官冲力
我们在模块里公开greeting()函数,而把内部逻辑用private函数隐藏起来了,这样调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,即:
外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。
在Python种,安装第三方模块,是通过包管理工具pip完成的。
如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了。
注意:Mac或Linux上有可能并存Python3.x和Python2.x,因此对应的pip命令是pip3.
第三方库PIL(Python Imageing LIbrary),这是Python夏非常强大的处理图像的工具库,不过PIL目前只支持到Python2.7,因此,基于PIL的Pillow项目开发非常活跃,并且支持最新的Python3.
有了Pillow,处理图片易如反掌。随便找个图片生成缩略图:
from PIL import Image
im=Image.open('first.png')
print(im.format,im.size,im.mode)
输出结果:
PNG (7200, 3000) RGBA
im.thumbnail((200,100))
im.save('thumb.jpg','png')
其他常用的第三方库还有MYSQL的驱动:mysql-connector-python,用于科学计算的NumPy库:numpy,用于生成文本的模板工具jinja2,等等。