一、自定义函数
1、 格式:
def <函数名>(形参):
'''注释(可有可无)'''
函数体
2、函数的参数及传参:
① 位置传参
实际参数与形式参数的对应关系是按位置依次对应的,调用函数时实参和形参的顺序必须严格一致,并且数量相同。
② 关键字传参
关键参数主要指调用函数时的参数传递方式,与函数定义无关,指定参数名传参,实参顺序和形参顺序可以不一致。
③ 序列传参
指在函数调用过程中,用 * 将序列拆解(传入的参数组合成为一个元组)后按位置进行传递的传参方式。
例如:
def demo(*a):
print(a)
demo(1,2,3)
b = (4,5,6)
demo(b)
输出如下:
(1, 2, 3)
((4, 5, 6),)
④ 字典关键字传参
指实参为字典,将字典用 ** 拆解后再进行关键字传参的传参方式。
说明:
字典的键名和形参名必须一致
字典的键名必须为字符串(标识符)
字典的键名要在形参中存在
例如:
def fun(**p):
print(p)
fun(a=1,b=2,c=3)
l = {'a':'1','b':'2','c':'3'}
fun(**l)
输出如下:
{'c': 3, 'b': 2, 'a': 1}
{'c': '3', 'b': '2', 'a': '1'}
⑤ 函数缺省参数
函数的参数在定义时如果指定了默认值,当函数被调用时,则该参数可以缺省。
例如:
def fun(a,b = 100):
print(a+b)
fun(1)
fun(1,2)
输出如下:
101
3
⑥ 传递参数时的序列解包
调用多个位置参数时,使用迭代对象作为实参,在实参名称前加 ‘*’ 或 ‘**’ ,python自动解包。
例如:
Ⅰ、对列表、元组的解包
def demo(a,b,c):
print(a*b*c)
list = [1,2,3]
demo(*list)
tup = (4,5,6)
demo(*tup)
输出为:
6
120
Ⅱ、 对字典的解包
def fun(a,b,c):
print(a,b,c)
p = {'a':'1','b':'2','c':'3'}
fun(**p)
输出为:
1 2 3
3、函数的返回值
① return 语句用来结束函数并将程序返回到函数被调用的位置继续执行。
② return 语句可以出现在函数中的任何部分。
③ 可以同时返回 0个 或 多个函数运算的结果给函数被调用处的变量。
④ 当 return 返回多个值时,返回的值形成元组数据类型。
例如:
def function(a,b):
return a*b
num = function(2,3)
print(num)
输出为:
6
4、变量的作用域
①局部变量
定义在函数内部的变量成为局部变量(形参也是局部变量)。
局部变量只能在函数内部使用。
局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁。
②全局变量
定义在函数外部,模块内部的变量称为全局变量。
全局变量所有函数都可以直接访问(但函数内不能将其赋值)。
全局变量在函数内部使用时,需要用 global 关键字声明,且该变量与外部变量全局变量同名。
5、代码复用
理念
① 通过函数的封装功能将程序分为主程序、子程序和子程序间关系的表达。
② 紧耦合
尽可能合理划分功能模块,功能内部耦合紧密。
松耦合
模块间关系尽可能简单,功能块之间耦合度低。
③ 程序的一种基本抽象方式,它将一系列代码组织起来通过命名供其他程序使用。
耦合性
指程序结构间各模块、各语句之间关联的程度,取决于各模块间接口的复杂程度和调用方式。
6、lambda 函数
① 又称匿名函数,适合处理临时需要一个类似函数的功能但又不想定义函数的场合。
② <函数对象名> = lambda<形式参数列表> : <表达式>
Ⅰ、lambda 只是一个表达式,它用来创建一个函数对象。
Ⅱ、当 lambda 表达式被调用时,先执行冒号后的表达式,并返回表达式的结果的引用关系。
Ⅲ、lambda 表达式创建的函数又能包含一条表达式。
Ⅳ、lambda 比函数简单且可以随时创建和销毁,有利于减少程序的耦合度。
例如:
test1 = lambda a,b:a+b
print(test1(1,2))
test2 = lambda a:a[0][0]
a = [[1,2,3],[4,5,6]]
print(test2(a))
输出为:
3
1
二、Python的内置函数
python解释器提供了68个内置函数,可以直接使用而不需要引入库。