函数与模块

函数与模块

函数是能够某种特定功能的语句体集合,Python中存在大量的内置函数,调用以实现特定的功能,但是当这些内置函数不能实现我们想要的功能时,就需要自己定义函数实现,这种函数称为自定义函数。

自定义函数

自定义函数以def为标识,后跟函数名和参数列表,最后以return语句返回结果值,如果return语句缺省,则函数返回None值,格式如下:

def 函数名(参数列表)

函数体

[return  返回值]

 

 

最后一行调用myfun函数并输出结果,如果位于其他文件的语句需要调用这个自定义函数,则需要在文件开头使用语句 from function01 import myfun 或者 from function01 import * 导入该函数,即可调用此函数myfun。(function01为文件名)

默认参数

自定义函数可以使用默认参数,在自定义此方法时可以给出参数的默认值,在调用函数没给出参数的值时,会自动选择参数的默认值。

 

 

当调用myfun函数时给全参数则完整传入,否则ab取默认值,只给一个参数,则相当于第一个参数。

原则:

1) 普通参数在前,默认参数在后,例如,def myfunxxa=3b=4);否则会抛出异常

2) 调用函数时,未给出实参的默认参数取默认值,例如,myfun30),a=30b=4

3) 调用函数时,仅给出部分与默认参数对应的实参时,默认参数依次取得实参值

4) 调用函数时,给出指定默认参数的实参时,默认参数取指定的值,未给出或未指定实参的默认参数取默认值,例如myfun(b=10),a=3,b=10

可变参数

自定义函数可以使用可变参数,也就是说,可以从形参传入数量可变的实参。

 

 

上述实例中,args为可变参数,可以接收若干个实参值,并将接收的值组装为一个元组。

关键字参数

可以给形参传入指定关键字和值的多组参数。

 

 

kwargs为关键字参数,可以接收多组键值对,并将他们组装成一个字典。

命名关键字参数

函数只接收指定关键字参数的值,其余值不接收

 

 

 

 

agecity为命名关键字参数,* 将必选参数与命名关键字参数分开。在调用此函数时传入命名关键字之外的参数会如上抛出异常。

参数组合规则

不同类型的参数进行组合时,参数出现的顺序必须按照必选参数,默认参数,可变参数,命名关键字参数和关键字参数的顺序出现;否则会出现错误。

 

 

命名关键字参数d前面为可变参数c因此d前面不能出现分割符* ,关键字参数e的实参由kv提供,不能直接给出。

实参与形参

调用函数时,如果实参使用常量,则对应形参将的到相应的常量的值,如果实参使用变量,则对应形参将引用实参变量,使得形参变量与实参变量共享相同的内存单元值,直到形参重新赋值或者改变简单类型形参值时,才能触发给形参创建独立的内存空间,保存新值的机制。

 

 

 

形参变量与实参变量的值与内存单元的地址完全一致,id()可以取得变量所在内存单元地址。

形参重新赋值或者改变形参值时,形参变量和实参变量所共享的相同内存单元变化实例。

 

 

 

 

myfun函数给形参xz重新赋值,使得形参xz不再与实参ac共享内存单元,但对y追加元素改变了y的值,未能改变yb共享内存单元的现状。

递归

递归就是函数可以直接或者间接调用自己

 

 

 

模块

使用python编程时不可避免会使用各种函数,为了对函数进行有效的管理。产生了模块的额概念。一个模块就是一个.py文件,其中包括一个或者多个函数,模块名就是.py不包含后缀的文件名。

 

这就是一个模块,其中包含三个函数

引入模块的方法通常有两种分别是import 模块”和“from 模块 import 函数”使用“import 模块”时,会引入模块中的所有函数,调用函数时也需要加上模块名

 

 

 

使用“from 模块 import 函数” ,如果函数用* 表示,如“from module01 import * ,会引入模块中所有的函数;如果指明函数“from module01 import myfun,myfun2,会引入,module01中的函数myfun,myfun2,而myfun3不会被引入。用该方式引入的函数可直接调用     

 

 

 

 

如果位于不同函数块的函数具有相同的函数名使用from 模块 import 函数”形式引入时,后引入模块中的函数才有效,因此如果不同的模块具有相同的函数名时,建议使用import 模块的形式引入。

由于模块就是.py文件,模块名也有可能相同,并且对模块通常需要分门别类的管理,因此产生了包的概念(Package)。一个包就是包含一个或者多个模块的一个文件夹,其中包含文件__init__.py,文件__init__.py 在包被引入时做初始化操作,文件__init__.py可以为空,包也呈倒树状的结构。

引入方法:

例如,module01位于example文件夹中,引入module01的方法为“import example.module01” 或者 “from example.module01 import *” 或者“from example import module01

使用import example.module01”引入,调用函数时需加上包名与模块名,如“example.module01.myfun(10,20)

使用from example import module01”引入,调用函数需要加模块名与函数名,不需要加包名,如“module01.myfun(10,20)

                           

posted @ 2019-10-27 14:57  YICHUZ  阅读(905)  评论(0编辑  收藏  举报
返回顶部