----------------函数定义和调用----------------
(1)什么是函数?
函数是完成特定功能的一个语句组,这组语句可以作为一个单位来使用,并且给它取一个名字。
(2)什么是函数调用?
函数调用是指通过函数名在程序的不同地方多次执行函数的过程。这样,程序猿就不需要在所有的地方重复编写这些语句。
(3)函数的分类
1.自定义函数:用户自己编写的函数;
2.预定义的Python函数:系统自带的一些函数,以及一些第三方编写的函数,如其它程序猿编写的一些函数,对于这些现成的函数用户可以直接拿来使用。
(4)为什么要使用函数?
* 降低代码的难度
通常将一个复杂的大问题分解成一系列更简单的小问题,然后继续将小问题划分为更小的问题。当问题细化到足够简单时,我们就可以分而治之!而函数的功能就是处理特 定的小问题,逐一击破各个小问题,大问题也就迎刃而解了。
* 避免代码重用
我们定义的函数可以在一个程序的多个位置使用,也可以用于多个程序。此外,函数还可以被放到一个模块中供其他程序猿使用。当然,我们也可以使用其它程序猿定义的 函数。这样的话,既可以提高程序猿的工作效率,而且减少代码量,提高了程序的可读性。
(5)创建函数及调用
def 函数名(参数列表)
函数体
注:函数也可以没有参数。
*并非所有的Python函数都有返回值;
*函数可以返回整个序列(如:列表);
----------------函数参数----------------
(1)形参:在定义函数时,函数名后面圆括号中的变量名称叫做“形式参数”,简称“形参”;
(2)实参:在调用函数时,函数名后面圆括号中的变量名称叫做“实际参数”,简称“实参”;
(3)默认参数:又称缺省参数。当有实参传递给形参时,默认参数不起作用;当没有实参传递给形参时,自动使用默认参数;(注意!!!)
Python规定默认参数的设置必须从右向左设置!
注:显示中文 linux #coding:utf8
windows #coding:gbk
----------------变量作用域----------------
—在Python中的任何变量都有其特定的作用域
(1)局部变量
在函数内定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量,我们称之为局部变量;
(2)全局变量
在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量,我们称之为全局变量。
(3)全局变量在文件的任何位置都可以使用,而局部变量只供其所在函数使用!
当全局变量与局部变量重名时,如果在函数内部使用该重名变量,局部变量会自动屏蔽掉全局变量!(局部变量 自白:我的地盘我做主!)
通过globals函数可以解除局部变量对全局变量的屏蔽!
(4)global语句
global语句可以将一个局部变量强制声明为全局变量!
语法:global 变量名
注:当一个局部变量通过global语句在函数内声明为全局变量时,只有在已经调用该函数的前提下,才可以在函数外部随意使用该全局变量!
----------------冗余参数的处理----------------
(1)收集参数
例1:
*y收集多余的参数!并将这些值放置在同一个元组y中。
如果提供的值刚刚好,一个也不多余,那么*所跟的变量将会是一个空元组。
例2:
例3:
(2)传递参数
例1:
例2:
在使用 ** 分配字典的时候,键名要与形参名一样!键值对的数目与形参的数目相等!
(3)总结
当 * 及 ** 用在函数的定义时,起收集参数的作用;
当 * 及 ** 用在函数的调用时,起分配参数的作用;
与 * 相对应的是元组,处理非关键字参数问题;
与 ** 相对应的是字典,处理关键字参数问题!
----------------lambda函数----------------
(1)匿名函数
lambda表达式是一种快速定义短小函数的方法!可以用在任何需要函数的地方。
(2)为什么使用lambda表达式?
1.使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
2.对于一些抽象的、不会在别的地方复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3.使用lambda在某些时候让代码更容易理解,提高代码的可读性。
(3)语法:
例:
可以用lambda语句代替上面的函数;
在lambda语句中,冒号前面的是参数,可以有多个,用逗号隔开,冒号右边的是返回值。
lambda语句构建的实际是一个函数对象:
(4)reduce函数
1.reduce函数可以将序列的前两个元素与给定的函数联合使用,并且将他们的返回值和第3个元素继续联合使用,直到整个序列都处理完毕,并且得到一个最终结果。
2.语法:
reduce(func,seq[,initial])
3.案例:
例:
使用lambda函数:
注意:在Python 3里,reduce()函数已经从全局名字空间内移除了,被放置在functools模块中。因此,使用reduce()函数之前,必须先引入:
(1)什么是函数?
函数是完成特定功能的一个语句组,这组语句可以作为一个单位来使用,并且给它取一个名字。
(2)什么是函数调用?
函数调用是指通过函数名在程序的不同地方多次执行函数的过程。这样,程序猿就不需要在所有的地方重复编写这些语句。
(3)函数的分类
1.自定义函数:用户自己编写的函数;
2.预定义的Python函数:系统自带的一些函数,以及一些第三方编写的函数,如其它程序猿编写的一些函数,对于这些现成的函数用户可以直接拿来使用。
(4)为什么要使用函数?
* 降低代码的难度
通常将一个复杂的大问题分解成一系列更简单的小问题,然后继续将小问题划分为更小的问题。当问题细化到足够简单时,我们就可以分而治之!而函数的功能就是处理特 定的小问题,逐一击破各个小问题,大问题也就迎刃而解了。
* 避免代码重用
我们定义的函数可以在一个程序的多个位置使用,也可以用于多个程序。此外,函数还可以被放到一个模块中供其他程序猿使用。当然,我们也可以使用其它程序猿定义的 函数。这样的话,既可以提高程序猿的工作效率,而且减少代码量,提高了程序的可读性。
(5)创建函数及调用
def 函数名(参数列表)
函数体
注:函数也可以没有参数。
*并非所有的Python函数都有返回值;
*函数可以返回整个序列(如:列表);
----------------函数参数----------------
(1)形参:在定义函数时,函数名后面圆括号中的变量名称叫做“形式参数”,简称“形参”;
(2)实参:在调用函数时,函数名后面圆括号中的变量名称叫做“实际参数”,简称“实参”;
(3)默认参数:又称缺省参数。当有实参传递给形参时,默认参数不起作用;当没有实参传递给形参时,自动使用默认参数;(注意!!!)
Python规定默认参数的设置必须从右向左设置!
注:显示中文 linux #coding:utf8
windows #coding:gbk
----------------变量作用域----------------
—在Python中的任何变量都有其特定的作用域
(1)局部变量
在函数内定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量,我们称之为局部变量;
(2)全局变量
在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量,我们称之为全局变量。
(3)全局变量在文件的任何位置都可以使用,而局部变量只供其所在函数使用!
当全局变量与局部变量重名时,如果在函数内部使用该重名变量,局部变量会自动屏蔽掉全局变量!(局部变量 自白:我的地盘我做主!)
通过globals函数可以解除局部变量对全局变量的屏蔽!
(4)global语句
global语句可以将一个局部变量强制声明为全局变量!
语法:global 变量名
注:当一个局部变量通过global语句在函数内声明为全局变量时,只有在已经调用该函数的前提下,才可以在函数外部随意使用该全局变量!
----------------冗余参数的处理----------------
(1)收集参数
例1:
>>> def fun(x,*y):
print(x)
print(y)
>>> fun(1,2)
1
(2,)
>>> fun(1,2,3)
1
(2, 3)
>>> fun(1,2,3,4,5,6,7,8,9,10)
1
(2, 3, 4, 5, 6, 7, 8, 9, 10)
*y收集多余的参数!并将这些值放置在同一个元组y中。
如果提供的值刚刚好,一个也不多余,那么*所跟的变量将会是一个空元组。
例2:
>>> def fun(x=1,y=2,**z):
print(x)
print(y)
print(z)
>>> fun(x=3,y=4,z=5,a=6,b=7)
3
4
{'a': 6, 'b': 7, 'z': 5}
**的作用依然是收集参数。与*不同的是,**收集的是关键字参数,以字典的形式存储!
例3:
>>> def fun(x,*y,**z):
print(x)
print(y)
print(z)
>>> fun(1,2,3,4,5,6,a=1,b=2,c=3)
1
(2, 3, 4, 5, 6)
{'c': 3, 'a': 1, 'b': 2}
>>> fun(x=1,y=2,a=1,b=2)
1
()
{'a': 1, 'b': 2, 'y': 2}
>>> fun(a=1,b=2,3,4,5,6,7)
SyntaxError: positional argument follows keyword argument
我们还是要遵循一定的规则:传值的时候按顺序传!
(2)传递参数
例1:
>>> def fun(x,y):
print(x,"+",y,"=",x+y)
>>> fun(5,2)
5 + 2 = 7
>>> t = (5,2)
>>> fun(t)
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
fun(t)
TypeError: fun() missing 1 required positional argument: 'y'
>>> fun(*t)
5 + 2 = 7
*分配参数!将元组中的数分配给两个形参。
例2:
>>> def fun(x,y):
print(x,"+",y,"=",x+y)
>>> d = {"x":5,"y":2}
>>> fun(**d)
5 + 2 = 7
在使用 ** 分配字典的时候,键名要与形参名一样!键值对的数目与形参的数目相等!
(3)总结
当 * 及 ** 用在函数的定义时,起收集参数的作用;
当 * 及 ** 用在函数的调用时,起分配参数的作用;
与 * 相对应的是元组,处理非关键字参数问题;
与 ** 相对应的是字典,处理关键字参数问题!
----------------lambda函数----------------
(1)匿名函数
lambda表达式是一种快速定义短小函数的方法!可以用在任何需要函数的地方。
(2)为什么使用lambda表达式?
1.使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
2.对于一些抽象的、不会在别的地方复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3.使用lambda在某些时候让代码更容易理解,提高代码的可读性。
(3)语法:
例:
>>> def f(x,y):
return x*y
>>> lambda x,y:x*y
可以用lambda语句代替上面的函数;
在lambda语句中,冒号前面的是参数,可以有多个,用逗号隔开,冒号右边的是返回值。
lambda语句构建的实际是一个函数对象:
>>> lambda x,y:x*y
<function <lambda> at 0x02ECF660>
(4)reduce函数
1.reduce函数可以将序列的前两个元素与给定的函数联合使用,并且将他们的返回值和第3个元素继续联合使用,直到整个序列都处理完毕,并且得到一个最终结果。
2.语法:
reduce(func,seq[,initial])
3.案例:
例:
>>> from functools import reduce
>>> def add(x,y):
return x+y
>>> reduce(add,range(1,101))
5050
使用lambda函数:
>>> from functools import reduce
>>> reduce(lambda x,y:x+y,range(1,101))
5050
注意:在Python 3里,reduce()函数已经从全局名字空间内移除了,被放置在functools模块中。因此,使用reduce()函数之前,必须先引入:
>>> from functools import reduce