这一篇介绍一下函数,首先介绍一哈形参和实参:
形参即形式参数,在函数创建和定义过程中使用的参数。只是代表一个位置,一个变量名,没有具体的值。
实参即实际参数,在函数被调用的过程中传递进来的参数。一个具体的值,是赋值到变量名中的值。
Tip:实参默认按位置顺序依次传递给形参,若参数个数不对,则报错
顺便再介绍一哈关键字参数and可选参数:
普通参数叫位置参数,调用时需要按照位置传递参数值;关键字参数就是在调用函数,传入实参时指定形参的变量名。
可选参数即默认值参数,如果有些参数存在默认值,即部分参数不一定需要调用程序输入,可以在定义函数时直接为这些参数指定默认值。当函数被调用时,如果没有传入对应的参数值,则使用函数定义时的默认值代替。
函数的定义
使用def保留字,语法形式如下:
函数调用的过程
(1)调用程序在调用处暂停执行
(2)在调用时将实参复制给函数的形参
(3)执行函数体语句
(4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行
函数的参数传递
传递基本顺序:
位置参数->关键字参数->可变数量参数
按位置,顺序不能变;按名称,顺序可变。
若给定默认参数,没有传入改参数也可(默认值参数即可选参数)可选参数必须定义在非可选参数的后面,一个星号表示可变数量参数(在非可选参数和默认参数的后面,放在两个星号参数之前),两个星号将传入参数当字典来用。
补充介绍可变数量参数:通过参数前增加单星号实现。调用时,这些参数被当做元组类型传递到函数中。如果是双星号的参数,只能出现在参数列表的最后,被当做字典
如果一开始就有星号,表示强制命名参数,表示后面所有的都必须按名字来传,一开始是星号表示实名制。
函数与过程
- 函数:有返回值
- 过程:无返回值
python只有函数,没有过程。如果没有return语句,默认返回None。
return语句用来退出函数并将程序返回到函数被调用的位置继续执行,return语句同时可以将0个、1个或多个函数运算完的结果返回给函数被调用处的变量。返回多个值以元组类型保存。
杂七杂八
- 列表.sort()与全局sorted()比较:
.sort():
python list的内置方法,sort(key=None,reverse=False) 就地改变列表; 但其返回值为None,reverse:True反序;False 正序
sorted(): python内置的全局方法,sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象 均有效 - reverse()和reversed()的用法介绍:
reverse():列表的一个内置方法(即在字典、字符串和元组中没有这个内置方法)用于列表中数据的反转,返回值是None,其作用结果需要打印才可查看。
l = [1,2,3,4]
l.reverse()
print(l)
#[4,3,2,1]
reversed():python自带的方法,准确点应该是一个类,在经过其作用后,返回的是一个把序列值经过反转之后的迭代器,所以需要通过遍历或者list、next()等方法获取作用后的值
函数变量的作用域
局部变量:是在函数里面定义的局部变量和参数,作用域为函数内部,出
了这个函数就是无效的,函数外面无法访问到局部变量。
全局变量:是在函数外面定义的变量,作用域为整个代码段,可以在函数
中读取全局变量的值,但不能在函数内部直接对全局变量进行赋值运算。
global: 若确需在函数中直接修改全局变量的值,可以使用global关键字。
• global关键字用来在函数或其他局部作用域中使用全局变 量。但是如果不修改全局变量也可以不使用global关键字
内嵌函数 :Python的函数定义可以嵌套,也就是允许在函数内部创建另一个函 数,叫做内嵌函数或者内部函数。
• 内嵌函数的作用域仅限其所在的函数体内。
• 外部函数的局部变量相对于内部函数的局部变量,就相当于全局变 量和局部变量的关系。
• 如果要在内部函数中修改外部函数中的局部变量的值,可以使用关 键字nonlocal,使用方式和global一样。
lambda匿名函数
lambda表达式可以用来声明匿名函数,也就是没有函数名 字的临时使用的小函数,尤其适合需要一个函数作为另一
个函数参数的场合。也可以定义具名函数。
lambda表达式只可以包含一个表达式,该表达式的计算结 果可以看作是函数的返回值,不允许包含复合语句,但在
表达式中可以调用其他函数。
- lambda函数是一种匿名函数,即没有名字的函数,使用lambda保留字,函数名是返回结果,lambda函数用于定义简单的、能够在一行内表示的函数
lambda函数的应用
g = lambda x:3是一个常数函数,是一个合法的赋值表达式
可以使用lambda表达式定义有名字的函数。
map函数(映射)
map()会根据提供的函数对指定序列做映射,第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的新列表。
map(函数,列表或其他可迭代对象)返回新列表 python3生成一个迭代器,如果list(map(,[]))才可以得到列表,转化成想要的数据类型才可以输出,for循环里也可以通过编写输出具有阶段功能,传入参数不等时按最短的参数来
filter函数
用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数接受两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回的True的元素放到新列表,butpython3.x返回迭代器对象。
filter(函数,只能是一个参数)过滤器,过滤掉不符合条件的元素,返回的是true或false。直接生成过滤器,要转化才能有想要的输出。
内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中 使得该函数返回值为True的那些元素组成的filter对象,如果指定函 数为None,则返回序列中等价于True的元素。
zip函数
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。在python3.x中减少内存,zip()返回的是一个对象,如果需要展示列表,需手动list()转化。
zip()函数可把两个或多个序列中的相应项合并在一起,并以元组的格式返回他们,在处理完最短序列中的所有项后就停止。【*与zip相反,zipped可以理解为解压,返回二维矩阵式】
把可迭代对象一一匹配,长度不一样按最短的为准,同上需要转化为想要输出的。
字典的键是不可变类型 dict(zip(a,b)) a必须是不可变的,可以生成{键值对}
enumerate函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。
enumerate(sequence,[start=0])参数sequence一个序列、迭代器或其他支持迭代对象。start下标起始位置。返回枚举对象
reduce函数
在python3中,reduce函数放置在functools模块中,该函数会对参数序列中元素进行累积,将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数function(有两个参数)先对集合中的第1、2个元素进行操作,得到的结果再与第三个数据用function函数运算,最后得到一个结果。reduce(function,iterable[,initializer])参数function函数,有两个参数。iterable可迭代对象。initializer可选,初始参数。返回函数计算结果。在python3中,reduce()函数已经被从全局名字空间里移除了,它现在被放置在funcools模块里,如果想要使用它,则需要通过引入functools模块来调用reduce()函数:
from functools import reduce
【map映射 filter过滤 zip拉链 reduce减少 enumerate列举】