第五章 模块与函数
这章主要是介绍python
模块和函数的特性。
5.1 程序的结构
python
的程序是由包,模块和函数组成。模块是处理某一类问题的集合,模块是由函数和类组成。包是由一系列模块组成的集合,至少包含__init__.py
文件的文件夹,类似于一个完成特定任务的工具箱,python
提供了许多有用的工具包,如字符串处理,图形用户接口,Web
应用,图形图像处理。
5.2 模块
from...import...
语句格式如下:
from module_name import function_name
python
的import
语句比较灵活,甚至可以放在条件语句中。模块内置一些属性,用于完成特定的任务。如__name__
,__doc__
。每个模块都有一个名称,例如__name__
用于判断当前模块是否是程序的主入口,如果当前程序正在被使用,__name__
的值为__main__
。
if __name__ == "__main__":
print ("作为主程序入口")
else:
print ("被另一个模块调用")
第一行代码用于判断是否作为主程序运行,如果是运行此程序,就打印“作为主程序入口”,如果是被别的程序调用,就打印“被另一个模块调用”。__doc__
这个就是文档字符串,之前介绍过,用于给程序某些内容输出给用户看,引导用户使用程序。
函数
函数就是一段可以重复多次调用的代码,通过输入参数值,返回需要的结果。函数名可以是字母,数字或下划线组成的字符串,但是不能以数字开头,函数的参数放在一对圆括号中,参数的个数可以有一个或者多个,参数之间用逗号隔开。
#函数的定义
from __function__ import division
def arithmetic (x, y, operator):
result = {
"+" : x + y,
"-" : x - y,
"*" : x * y,
"/" : x / y
}
函数的参数也可以使用默认值,比如这样:
#函数的定义
from __function__ import division
def arithmetic (x = 1, y = 1, operator = "+" ):
result = {
"+" : x + y,
"-" : x - y,
"*" : x * y,
"/" : x / y
}
这么写的话如果不输入参数的话就默认参数值了。参数可以是变量,元组,列表等内置数据结构。
python
还提供另一个标识符“**
”。在形式参数前面添加“**
”,可以引用一个字典,根据实际参数的赋值表达式生成字典。“
*
”必须写在“**
”的前面,这是语法规定。
函数的返回使用return
语句,return
后面可以是变量或表达式。
#多个return语句
def func(x):
if x > 0:
return print ("x > 0")
if x == 0:
return print ("x = 0")
if x < 0:
return print ("x < 0")
print (func(2))
这是return
语句的用法,不过不推荐多个return
语句的写法,往往会造成程序的复杂化,重构以后是这样的:
#多个return语句
def func(x):
if x > 0:
result = "x > 0"
elif x == 0:
result = "x = 0"
else x < 0:
result = "x < 0"
return result
print (func(2))
函数的嵌套是指在函数的内部调用其他函数,不过函数嵌套不易过多,应控制在3层以内。
#函数嵌套
def sum(a, b):
return a + b
def sub(a, b):
return a - b
def func():
x = 1
y = 2
m = 3
n = 4
return sum(x, y) * sub(m, n)
print (func())
递归函数可以在函数主体内直接或间接的调用自己,即函数的嵌套是函数本身。递归是一种程序设计方法,使用递归可以减少重复的代码,使程序变得简洁。递归的过程分为两个阶段——递推和回归。第一阶段,递归函数在内部调用自己,第二阶段,递归函数从后往前返回。递归函数需要编写递归结束的条件,否则程序无法结束。一般通过判断语句结束程序。
`lambda
函数的格式:
lambda 变量1, 变量2... : 表达式
通常把lambda
赋值给一个变量,变量就可作为函数使用。用法例如:
sum = lambda x, y : x + y
print (sum)
lambda
也成为表达式。lambda
中只能使用表达式,不能使用判断,循环等多重语句。
许多任务都是由若干个函数组成,这些函数把任务细化,实现明确的功能,最后把这些函数组合起来形成一个完整的模块。