Python学习手册之函数和模块
在上一篇文章中,我们介绍了 python 的控制结构,现在我们介绍 python 函数和模块。
查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9976234.html
函数和模块
代码重用
代码重用是编程语言里一个非常重要的概念,增加代码的大小会使维护变得更加困难。
在软件工程里,必须遵守不要编写同一代码的原则,英文 "don't repeat yourself",简称:dry 原则。
我们已经学习过一种方法通过使用循环来保证代码重用。在本节中我们将进一步探索两个模块:函数和
模块。
重复的代码被认为是遵循 wet 原则,即表示英语 write everything twice 的缩写,或者 we enjoy typing 的简写。
函数
到目前我们已经使用了不少的系统内置函数,函数调用就是左边是需要调用的函数名称,后面跟着圆括
号。
print("i like python!") range(0,10) range(10,20,4) str(12)
括号前面的单词是函数名,括号内以逗号分隔的值是函数参数。
函数可以通过关键字 def 来定义。关键字后跟一个函数的标识符,接下来是一对圆括号,圆括号里可以
包括一些变量的名称,再以冒号结尾结束这一行后面缩进的语句块就是函数的一部分。
下面代码声明了一个 叫 func 的函数。当调用这个函数时打印 “hello” 三次。
def func(): print("hello") print("hello") print("hello") func()
运行结果:
>>> hello hello hello >>>
所有函数的代码块都是通过缩进来定义的,函数名后面要跟随冒号。
函数调用必须在函数声明之后。如果调用在声明前,程序会发生异常。
func() def func(): print("hello")
运行结果:
>>> nameerror: name 'func' is not defined >>>
函数参数
参数
函数名后面的括号是空的,意思是这个函数不需要参数。实际上,大多数函数都是有参数的。
def func(name): print(name + "!") func("xmg") func("dustman") func("python")
运行结果:
>>> xmg! dustman! python! >>>
参数定义在圆括号里面。
同样,我们可以定义一个包含多个参数的函数,参数用逗号分隔开。
def func(x,y): print(x + y) print(x * y) func(2,7)
运行结果:
>>> 9 14 >>>
函数参数可以用作函数块定义中的变量,仅在函数体内部存在,不能在函数定义之外引用它们,同样这
也适用于在函数中创建的其他变量。
def func(x): x += 1 print(x) func(5) print(x)
运行结果;
>>> 6 nameerror: name 'x' is not defined >>>
从技术上讲,参数是函数定义中的变量,参数的值在调用时被函数复制了。
函数返回值
我们见到一些内置函数比如 float 都返回一个值。要返回一个值,在函数体内部可以用 return 随时返
回函数结果。
def min(x,y): if x <= y: return x else: return y print(min(5,1)) z = min(5,8) print(z)
运行结果:
>>> 1 5 >>>
return 语句不能在函数外面使用,函数执行完毕没有 return 语句时,函数自动产生 return none。
定义一个函数,比较它的两个字符串参数的长度,返回长度长的那个参数。
def longer_string(x,y): if len(x) >= len(y): return x else: return y ret = longer_string('abcde','123456789') print(ret)
运行结果:
>>> 123456789 >>>
当从函数返回一个值,程序立即停止执行并返回,return 下面的代码不会执行。
def add(x,y): sum = x + y return sum print("i won't be printed!") print(add(1,4))
运行结果:
>>> 5 >>>
备注和文档注释
备注
注释是代码的注解,用于是代码更容易理解,它们不影响代码的运行方式。
在 python 中,注释是通过插入哈希符号 # 来实现的。该行在 # 之后的所有文本都被程序忽略。
x = 123 y = 456 # this is an annotation print(x + y) # addition # print(x * y) # another comment
运行结果:
>>> 579 >>>
python 没有多行注释,其他编程语言有多行注释功能,使用 /* */ 语法。
文档注释
文档注释有点和注释相同,因为它们是用来解释代码的。
但是文档注释说明更具体些,并且有不同于注释的语法。它们是通过在函数或类的第一行下面放置一个
包含多行字符串方式来创建的。
def main(word): """ this function is print a string """ print(word + "!") main("hello world")
运行结果:
>>> hello world! >>>
文档注释是字符串的另一种表现,运行时会被保留在程序或类里并能被用 __doc__ 变量读到。 文档注释一般给类和函数做注释,而单行注释一般用来说明某一行的功能。
函数即对象
函数
虽然它们创建与普通变量不同,但函数就像任何其他类型的值一样。可以将它们重新分配给变量,然后对引用调用。
def add(a,b): return a + b x = 9 y = 9 obj = add print(obj(x,y))
运行结果:
>>> 18 >>>
上面的例子将加法函数重新指派了一个变量名,现在我们可以用变量名来调用函数。
函数还可以被当做参数来调用
def multiply(a,b): return a * b def more_again(func,a,b): return func(func(a,b),func(x,y)) x = 9 y = 9 print(more_again(multiply,x,y))
运行结果:
>>> 6561 >>>
如上面例子所示,函数 multiply 函数被 more_again 当做参数并在函数体里面调用。
让函数 "square" 被函数 "my_func" 当作参数调用。
def square(a): return a * a def my_func(func,x): print(func(x)) my_func(square,67)
运行结果:
>>> 4489 >>>
模块
模块(modules)是为完成常见任务而编写的代码,例如生成随机数、执行数字操作等。
模块最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕, 就可以被其他地方引用。使用模块还可以避免函数名和变量名冲突。
使用模块的基本方式是在代码的顶部添加 import module_name 代码,然后使用模块 module_name.var 访问模块中的变量名称的函数和值。
下面代码示例如何使用 random 模块生成乱数。
import random for i in range(6): num = random.randint(1,7) print(num)
运行结果;
>>> 5 3 5 2 7 4 >>>
上面代码使用 random 模块中定义的 randint 函数在 1 到 7 的范围内打印 6 个随机数。
如果您只需要模块中的某些函数,可以使用另一种导入模块的方法。
采用 from module_name import var 的方式导入函数 var 后你就可以使用 var,就好像它是在代码中定义的一样。
下面代码示例程序仅需要 math 模块的 pi 常量。
from math import pi print(pi)
运行结果:
>>> 3.141592653589793 >>>
使用逗号分隔列表可以导入多个函数。
from math import pi,cos
* 表示从模块里导入所有的函数,比如:from math import * 通常不鼓励这么做,因为它混淆了代码中的变量和外部模块中的变量。
导入不存在的模块名会导致 importerror 错误。
import my_module
执行结果:
>>> modulenotfounderror: no module named 'my_module' >>>
可以使用 as 关键字以不同的命名来导入模块或对象,这可以用在模块或对象有一个长的或令人困惑的名称时。
from math import cos as my_cos from math import pi print(my_cos(pi))
运行结果:
>>> -1.0 >>>
标准库和 pip
模块
python 中有三种主要类型的模块:你自己编写的模块、从外部源安装的模块以及与 python 一起预装的
模块。
预装的模块叫做标准库,包含一些常用的模块。标准库里包含的模块包括:
random,json,os,pdb,sys,re,string,math,subprocess,socket,email 和 doctest 等。
标准库可以完成的任务包括字符串解析、数据序列化、测试、调试和操作日期、电子邮件、命令行参数等等。
python 的标准库拥有大量模块,这是它的主要优势之一。
标准库
一些标准库用 python 写的,另外一些是使用 c 语言写的。
大多数的库在任何平台通用,但是一些库只能在 windows 或 unix 环境里才能使用。
我们的文章中不会覆盖到所有的标准库,因为标准库太庞大了。完整的标准库文档可以访问 www.python.org,上面有英语,法语和日语等各种版本。
在 python 中安装第三方模块是通过 pip 这个工具完成的,此工具随着 python 安装程序安装到你的机器。要安装的一个库,转到命令行(对于 windows,它将是命令提示符),输入 pip install library_name。安装完成后就可以导入 library_name 这个模块并使用了。
使用 pip 这个工具是在大多数操作系统上安装第三方库的标准方法,有些库已经为 windows 预先构建了二进制文件。这些是普通的可执行文件,也可以使用 gui 安装库,就像安装其他程序一样。
注:请在命令行下输入 pip,不要在 python 的解析器里。
“程序员有三种美德:懒惰,急躁和傲慢...”
下一篇: 谷歌云计算服务价格下调 欲增36种服务
推荐阅读
-
Python学习笔记整理3之输入输出、python eval函数
-
Python中Random和Math模块学习笔记
-
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
-
Python学习笔记之os模块使用总结
-
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
-
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
-
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
-
python学习笔记之调用eval函数出现invalid syntax错误问题
-
跟老齐学Python之私有函数和专有方法
-
Python学习之asyncore模块用法实例教程