python基础之三

模块与函数

  • 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 i

def func2():  # Generator函数,yield
    for i in range(n):
        yield i 

print(func(3)) # 此时只会打印0
f = func2(3)
print(f)  # 返回函数func2()的地址
print(f.next()) # 返回0
  • Generator函数可以返回元素的值,序列也可以,但是二者之间的差别很大,Generator函数一次只能返回一个数据项,占用更少的内存,数据的访问是通过next()实现的,而序列一次返回所有的数据项,元素的访问是通过索引实现的.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值