python基础回顾——函数篇
前言
模块化思想是开发编程中很重要的一种思想,对于代码管理和开发带来不少便利,且可以重复使用,函数的使用会使得代码的美观度和可读性增强。
函数基本构造
函数由声明定义、函数名、参数以及函数体组成,可参照下面的模式:
def function(parameter1,...):
function content
调用的时候直接调用函数名以及所需要的参数即可。
def greet_user():
"""显示简单的问候语"""
print("Hello!")
greet_user()#调用函数
- 实参
实际存在对应值以及存储于内存环境的参数; - 形参
定义函数时设置的参数名,没有实际内容或者未存在内存中。(我粗浅地暂时这样理解)
函数实参传递
当函数功能较为复杂时,需要一定地参数,而在函数调用参数中主要分为两种参数调用方式,一是位置实参,二是关键字实参。
- 位置实参
定义函数时设置地形参具有一定地顺序,当调用函数时每个实参都对应形参地顺序进行关联,这种方式即位置实参。 关键字实参
在调用函数时使用名称和值
的成对方式,将形参名称和实参值关联起来,通过这种方式传递参数不会混淆,即使打乱传递参数顺序也不影响。
注意 使用关键字实参时,务必准确地指定函数定义中的形参名。参数默认值
在定义函数时,可给形参指定默认值,在调用函数时如果提供实参则使用实参内容,如果没有实参则使用默认值,这在一些特定情况下使得函数使用更为方便。
在存在默认值的情况下,可以使用关键字参数的形式进行函数调用,因为存在默认值的情况下,python仍然按照位置参数调用的方式进行判断,因此,往往将存在默认值的参数放在不存在默认值参数的后面,但是仍然最好避免这种情况。参数可选
通过设置形参默认值的方式使得函数调用时根据自身需要进行填写实参,而不用所有参数都进行选择填写。传递参数
函数传递的参数没有限制,除了简单的数据,也可以是列表等,这种方式使得在函数中调用外部数据十分方便。
返回值
函数处理结果可以通过返回值形式返回,在函数外调用函数时进行获取,使得函数中可处理更多数据并使得代码整体结构更为直观。
函数的返回值并没有对返回内容进行限制,可以是普通类型数据,也可以是字典,列表等。
函数操作
在函数中传递列表等,并进行列表操作,与函数内的临时参数不同的是,列表等数据结构将会因为函数内地列表操作而产生永久影响,当然列表是在函数外定义的,而在函数内定义的列表是否可以在函数外使用(不作为返回值的情况下),大家可以试验一下。
>>> list
['1', 2, 3]
>>> def test(L):
... L.pop()
...
>>> list
['1', 2, 3]
>>> test(list)
>>> list
['1', 2]
禁止函数修改列表
当需要保留调用的原列表时,为了不使其被修改,可以通过另一个变量作为副本的形式传递给函数进行操作,进而保证原始数据。传递任意数量参数
当不知道需要传递的参数数量时,定义函数参数可以使用*parameter
,即定义函数变成如下:def function(*parameter): ...
而在调用函数时,可以写入任意参数,当函数接收到参数时以元组形式存储,并将元组命名为parameter的名字。
位置实参、关键字实参和任意数量实参结合
和设置参数默认值情况一样,此时需要将任意数量实参放置在参数最末尾的位置,python在调用函数时会先匹配前面的位置参数和关键字参数。使用任意数量的关键字实参
因为关键字实参的使用方式是键值对形式,因而在定义函数参数时使用**parameter
,接收到的键值对会以字典的形式存储,字典名字是parameter的名字。
模块
模块可以认为是独立的一份python文件,而一个函数也可以作为一个模块,通过import
的方式导入到主程序中进行使用。
通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。这还能让你在众多不同的程序中重用函数。将函数存储在独立文件中后,可与其他程序员共享这些文件而不是整个程序。知道如何导入函数还能让你使用其他程序员编写的函数库。
导入模块
导入模块不止一种方法,根据不同需求使用不同方法进行导入需要的内容。导入整个模块
假设模块存储为module.py文件, 其中包含函数function(),则导入和调用方式如下:import module module.function()
在python的许多库中调用库的函数都可以采用这种方式。
导入特定的函数
这种方式可以在调用时直接使用函数名,不需要使用模块名进行调用,调用方式如下:from module import function #from module import function_1,function_2... function()
模块中有多个函数也可以进行导入。
使用
as
给函数指定别名
如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的别名 ——函数的另一个名称,类似于外号。在导入模块函数时使用关键字as
将函数重命名,如下:from module import function as new_function new_function()
在调用程序中直接使用重新命名的函数名进行函数调用即可。
用
as
给模块指定别名
调用模块时也可以给模块重命名,通过给模块指定简短的别名(如给模块pizza 指定别名p ),使得能更轻松地调用模块中的函数。使用方式如下:import module as m
导入模块中所有函数
使用星号(* )运算符可让Python导入模块中的所有函数:from module import *
import 语句中的星号让Python将模块中的每个函数都复制到这个程序文件中。由于导入了每个函数,可通过名称来调用每个函数,而无需使用句点表示法。然而,使用并非自己编写的大型模块时,最好不要采用这种导入方法:如果模块中有函数的名称与你的项目中使用的名称相同,可能导致意想不到的结果:Python可能遇到多个名称相同的函数或变量,进而覆盖函数,而不是分别导入所有的函数。
最佳的做法是,要么只导入你需要使用的函数,要么导入整个模块并使用句点表示法。这能让代码更清晰,更容易阅读和理解。
函数编写指南
编写函数时为了使得代码可读性较好,需要注意几点:
函数命名需是描述性名称,使用小写字母和下划线,使得调用时清楚函数或模块的作用;
函数应包含简要的阐述其功能的注释,注释紧跟在函数定义之后,使用文档字符串格式即
""" """
的注释方式;形参指定默认值时,等号两边不留空格;
函数调用时使用关键字实参方法也不在等号两边留空格;
代码行的长度不超过79个字符(PEP 8建议),使得编辑器在窗口适中的情况下能看到完整一行代码。如果形参很多,导致函数定义的长度超过了79字符,可在函数定义中输入左括号后按回车键,并在下一行按两次Tab键,从而将形参列表和只缩进一层的函数体区分开来。
def function_name(
parameter_0, parameter_1, parameter_2,
parameter_3, parameter_4, parameter_5):
function body...
所有的import 语句都应放在文件开头,唯一例外的情形是,在文件开头使用了注释来描述整个程序。
当程序文件中包含多个函数时,相邻两个函数之间使用两个空行进行间隔,使得函数结束和起始更容易识别。
def function_1():
""" note """
function_body
def function_2():
""" note """
function_body
———
小结
本篇讲述函数从定义到使用的基本内容,包括与前述篇章的语法结构进行结合使用,对模块和函数的细节规范地方进行回顾,函数对于程序具有重要的作用,相信在之后的使用中会体会到,共勉。
附录资料
python编程入门