关注公众号“码农帮派”,查看更多系列技术文章:
Python程序结构
Python的程序结构包含包(package),模块(module)和函数。Python系统自带的工具包和模块在Python安装目录下的Lib目录,每个包必须包含一个__init__.py的文件,用于标示当前文件夹是一个Python包,即使__init__.py中不包含任何内容,如果没有__init__.py这个文件,Python将无法识别包。
(1)Python的包
【说明】__init__.py就是xml包的标识,__init__.pyc是__init__.py编译之后的文件。
(2)模块
一个Python文件就可以人为是一个模块,由代码,函数和类组成。
【说明】下面新建一个模块文件myModule.py:
在test.py文件中,通过import导入myModule模块:
(2-1)模块的导入
要导入模块中的函数,类可以使用下面的方法:
# 导入一个模块
import module_name
# 调用模块中的函数,实例化模块中的类
module_name.func_name()
myClass = module_name.class_name()
# 导入模块中的一个函数,类
from module_name import func_name
from module_name import class_name
# 调用模块中的函数
func_name()
# 实例化模块中的类对象
myClass = class_name()
# 导入模块中所有的类和函数
from module_name imort *
func_name()
myClass = class_name()
(2-2)模块的属性
模块有一些内置属性,比如__name__,__doc__。__name__用于判断当前模块是否是入口程序,当__name__ == "__main__",标示当前的模块为入口程序,__doc__用于输出模块的文档字符串的内容,文档字符串是用三引号创建的字符串,函数,类以及模块都可以有文档字符串,可以说明函数,类以及模块的作用,但是__doc__只指模块的文档字符串:
myModule.py文件:
在test.py文件中导入myModule模块:
(2-3)模块的内置函数
Python提供了一个内联模块buildin,其中的函数可以在Python文件中直接调用而无需导入。
(2-3-1)apply()函数
apply()可以完成函数调用的任务。
【说明】apply(func, [args])会调用func函数,同时将args作为参数传入func中。
(2-3-2)filter()可以用于对序列的过滤。
【说明】与apply()不同的是,filter(func, sequence)会循环的将sequence序列中的每个元素传入到func中,将所有的结果组成一个列表,在循环完之后,将列表返回。
(2-3-3)reduce()用于对序列中的元素进行连续操作。
上图的程序中,从log信息可以看到,reduce(func, sequence)会连续多次调用func函数,将每次传入的元素处理得到的结果进行下次操作。
当然reduce(func, sequence, initial)函数中可以传入三个参数:
从上面的图可以看到,initial会作为第一个参数进行后续的操作。
内置模块的函数
函数 | 说明 |
abs(x) | 返回x的绝对值 |
apply(func, [seq]) | 调用函数func,同时将序列seq作为参数传给func |
bool([x]) | 将x转换成bool,若x为值,则返回True,反之返回False,bool(10)=True; bool(-2)=True; bool("a")=True; bool(None)=False |
cmp(x, y) | 比较x,y的大小 |
delattr(obj, name) | 等价于del obj.name |
eval(s) | 计算表达式的值 |
float(x) | 把数字和字符串转换成float类型 |
hash(obj) | 返回一个对象obj的hash值 |
help(func) | 返回内建函数的函数说明 |
id(obj) | 返回对象obj的标识 |
input([prompt]) | 接受并返回控制台输入的数字,prompt是控制台的提示信息 |
int(x) | 把数字或字符串转换成整数 |
len(obj) | 对象(序列)包含的元素的个数 |
range([start], end, [step]) | 返回从start到end直接的元素组成的列表,元素之间的步长为step |
raw_input([prompt]) | 接受并返回由控制台输入的内容,prompt为控制台的提示信息 |
reduce(func, seq) | 对序列seq进行连续操作 |
round(x, n=0) | 四舍五入,n表示对小数标点后第n位之后的位数进行四舍五入 |
set([iter]) | 返回set集合 |
sorted(iter) | 对iter进行排序,并返回排序后的结果 |
sum(iter, [start=0]) | 返回一个序列的和 |
type(obj) | 返回一个对象的类型 |
xrange(start) | 功能于range()相似,但是一次返回一个值 |
zip(seq1, [seq2, ....]) | 将每个序列seq作为一个元素,组成一个列表返回 |
(3)函数
在Python中,定义一个函数可以如下:
def 函数名(参数1=[默认值1], 参数2=[默认值2], ....):
....
return 返回值
下面事一些函数的声明和调用:
#coding=utf-8
def sayHello():
print("Hello Python");
def sayHi(name):
print("Hello {0}".format(name))
sayHello();
sayHi("Hust");
def max(a, b):
if a>b:
print("MAX IS {0}".format(a));
elif a<b:
print("MAX IS {0}".format(b));
else:
print("{0} 相等于 {1}".format(a, b))
max(1, 2)
max(2, 1)
max(2, 2)
def sum(a, b):
return a+b;
lambda函数:
lambda函数用于创建一个匿名函数,可以计算一些简单的运算结果。
#coding=utf-8
func = lambda m, n: m-n
print func(3,4)
当然,lambda也可以直接调用: