python基础之三

来源:互联网 发布:mmatlab调用caffe 编辑:程序博客网 时间:2024/06/12 01:03

模块与函数

  • python的程序由包(package)、模块(module)和函数组成。模块是处理某一类问题的集合,模块由函数和类组成,而包是由一系列模块组成的集合。
  • python自带的工具包和模块均安装在python的安装目录下的Lib子目录中。所有的包必须包含一个__init__.py文件,可以为空,用于识别当前文件夹是个包。每个python文件就是一个模块。当python导入一个模块时(使用import语句导入),首先查找当前路径,然后查找lib目录、site-package目录和环境变量pythonpath设置的目录。可以通过sys.path语句搜索模块的查找路径。
  • 导入模块后,调用模块的函数或类时,需要以模块名作为前缀,以下三种方式导入模块:
import module_name #直接导入module_name.func() # 调用函数时,需要模块名作为前缀from module_name import function_name # 不用使用模块名作为前缀from module_name import * # 导入模块下的所有函数和类

:python的import语句可以置于程序中的任意位置,甚至可以置于条件语句中。

  • 模块有一些内置属性,用于完成特定的任务,如__name__,用于判断当前模块是否是程序的入口,如果当前程序正被使用,__name__ 值为“__main__”。
  • python提供了一个内联模块,buildin。内联模块定义了一些开发中经常用到的函数,利用这些函数可以实现数据类型的转换、数据的计算、序列的处理等。常用的内置模块的函数如下:
内置模块函数 函数的作用描述 abs(x) 返回x的绝对值 bool([x]) 把一个值或表达式转换为bool类型,若表达式x为值,返回True,否则返回false float() 把数字或是字符串转换为float类型 hash() 返回一个对象的hash值 help() 返回内置函数的帮助说明 id() 返回一个对象的标识 input() 接受控制台的输入 int() 把数字或是字符串转化为整型 len() 返回对象包含的元素个数 range() 生成一个列表并返回 reduce() 对序列的值进行累计计算 round() 四舍五入函数 sorted() 返回一个排序后的列表 sum() 返回一个序列的和 type() 返回一个对象的类型 zip() 把n个序列作为列表的元素返回
  • python中的包和java包的作用是相同的,都是为了实现程序的重复使用,把实现一个常用功能的代码组合到一个包中,调用包提供的服务从而实现代码重用。而函数就是一段可以重复多次调用的代码,通过输入的参数,返回需要的结果。
  • 函数的定义非常简单,使用关键字def定义,函数在使用前必须定义,函数的类型即是返回值的类型,在调用函数时,实际参数必须与形式参数一一对应,否则会出现错误计算,具有默认值的参数除外。如下:
def 函数名(参数1,参数2,...): #注意冒号不可缺少    ...    ...                  # 注意缩进    return  表达式
  • python中的参数传递只支持引用传递,python通过名称绑定的机制将实际参数与形式参数的名称绑定在一起,即把形式参数传递到函数所在的局部命名空间中,形式参数和实际参数指向内存中的同一个存储空间。
  • 在实际应用中,经常需要传递可变长度的参数,在函数参数前使用标识符‘*’可以实现。python还提供了另一个标识符‘**’,在形式参数前添加‘**’,可以引用一个字典,根据实际参数的赋值表达式生成字典。在定义函数时,‘*’必须写在‘**’的前面,这是语法规定。
  • 对于C,java等高级语言,如果函数主体没有使用return语句返回,而在赋值语句中调用函数,程序编译时会出错,python没有这个限制,即使函数没有返回值,仍然可以获得返回值。没有return语句的函数返回None,None是python中的对象,不属于数字也不属于字符串,当return语句不带任何表达式时,返回的结果也是None。
  • 函数的嵌套是指在函数的内部调用其他函数,C,C++只允许在函数内部嵌套,而python不仅支持在函数体内嵌套,也支持在函数定义的嵌套。一般函数的嵌套控制在3层以内最好。
  • 递归函数可以再函数主体内直接或是间接的调用自己,即函数的嵌套是函数本身,递归的过程分为两个阶段:递推和回归,第一阶段,递归函数在内部调用自己,每一次调用又重新开始执行此函数的代码,直至递归结束。第二阶段,递归函数从后往前返回,递归函数从最后一级开始返回,一直到第一次调用的函数体内。递归函数需要注意递归结束的条件。每次调用递归函数都会复制函数中的所有变量,在执行递归函数,程序需要较多的存储空间,会影响程序的性能。
  • lambda函数的格式如下,变量用于表达式的计算,lambda属于函数,所以变量后面需要使用冒号,此外,lambda中只能使用表达式,不能使用判断,循环等多重语句。
lambda 变量1,变量2,... : 表达式 # 定义lambda函数的格式# 使用示例def func():    x,y,m,n = (1,2,3,4)    sum = lambda x,y : x+y    sub = lambda m,n : m-n    return sum(x,y)*sub(m,n)
  • Generator函数的定义和普通函数定义没什么区别,只要在函数体内使用yield生成数据项即可,Generator函数可以被for循环遍历,而且可以通过next()方法获得yield生成的数据项。注意yield关键字和return关键字的返回值和执行原理都不相同,yield生成值并不会中断程序的执行,返回值后程序继续往后执行,return返回值后,程序将终止执行。
def func():  # 普通函数,return    for i in range(n):        return idef func2():  # Generator函数,yield    for i in range(n):        yield i print(func(3)) # 此时只会打印0f = func2(3)print(f)  # 返回函数func2()的地址print(f.next()) # 返回0
  • Generator函数可以返回元素的值,序列也可以,但是二者之间的差别很大,Generator函数一次只能返回一个数据项,占用更少的内存,数据的访问是通过next()实现的,而序列一次返回所有的数据项,元素的访问是通过索引实现的.
原创粉丝点击