四,程序流程控制之函数
Posted wuxiaofan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四,程序流程控制之函数相关的知识,希望对你有一定的参考价值。
函数
为什么需要函数?
思考以下代码:
if cpu使用率 >80%:
连接邮箱
发送邮件
关闭邮箱
if 内存使用率 >80%:
连接邮箱
发送邮件
关闭邮箱
if 硬盘使用率 >80%:
连接邮箱
发送邮件
关闭邮箱
可以看见,每个条件判断内的代码块都是一样的内容,如果现在需要修改其中一条,则每个相同的代码块都要修改,如果重复的代码块有更多,那会非常不方便,容易出问题,所以定义了函数,去代表这些重复的内容,每次我们需要用到这个代码块的时候只需要去调用就可以了
1,函数的概念
函数是一段具有特定功能的代码块,可以重复使用,以函数名来表示,通过函数名来完成调用。
函数也可以看作是一段子程序,需要的的时候调用,不用在每个需要执行的地方去重复编写代码。每次使用函数时可以传入不同的参数,以对不同的数据进行处理;函数执行后,可以反馈相应的处理结果。
函数是一种抽象功能。
2,Python中的函数定义
Python中函数用def关键字来定义,语法格式如下
def 函数名(参数列表):
函数体代码块
return(返回值列表)
调用的时候直接用 函数名(实际参数) 来实现
def func():
print(‘123‘)
func()
结果为123
3,函数的调用过程
程序调用函数一共要经过4个步骤:
1,程序在函数调用处暂停执行
2,在调用函数时将实参赋值给形参
3,执行函数体代码块
4,执行完毕后给出返回值,回到调用前暂停处继续执行
4,函数的参数
定义函数时()里的参数叫形参(形式参数),它只是一个变量名,供函数体调用。
调用函数时,()里的参数叫做实参(实际参数),它是实际的数据,会传递给形参,供函数体执行。
4.1形参
定义函数时,形参根据功能不同,可以定义几种类型。
4.1.1必须参数
在定义函数时,如果要求必须传入的参数,就叫做必须参数。
直接定义在函数名()中的参数就是必须参数。
def ad(x,y):
print(x+y)
ad(1)
结果会报错,指出少传了一个y的实参
4.1.2默认参数
在定义函数时,某些形参一开始会有默认值,可以不用接收实参,这个时候就可以定义默认参数。
在函数名()中,以 变量名=默认值 的形式定义的形参就是默认参数。
注意:默认参数必须放在必须参数后面。若传了实际参数给默认形参,则会覆盖默认值。
4.1.3不定参数
在定义函数时,有时会不确定会传多少个参数,这个时候就可以定义不定参数。
不定参数根据传递的实参不同分为两种:
位置不定参
在函数名的()中,在形参前加星号*,则可以定义位置不定参,通常会将它定义为*args
它用来接收调用函数时,以位置传递过来的超过形参数量的剩下的实参。
注意:不定参必须定义在默认参数后面
def func(a,*args):
print(args)
func(1,2,3,4)
结果为(2,3,4)
位置不定参会接收除了第一个之外剩下的所有实参,并以元组的形式返回
关键字不定参
在函数名的()中,在形参前加双星号**,则可以定义关键字不定参,通常会将它定义为**kwargs
它用来接收函数调用时,以关键字参数传递过来的超过形参数量的剩下的实参。
注意:不定参必须定义在默认参数后面
def func(a,**kwargs):
print(kwargs)
func(a=1,b=2,c=3,d=4)
结果为{‘b‘:2,‘c‘:3,‘d‘:4}
关键字不定参会接收除了第一个以外剩下的所有实参,并以字典的形式返回
4.2实参
调用函数时,传递实参有两种方式
4.2.1位置参数
传递参数时,默认会按照形参的位置一一对应,这种实参传递方式也叫位置参数。
def power(x,y):
print(x**y)
power(2,3) 结果为8
power(3,2) 结果为9
实参按照形参的位置一一对应传入,所以结果会有区别
4.2.2关键字参数
调用函数时,参数按照 形参名=实参 的形式传递的参数叫做关键字参数。
这是不用考虑参数的位置。
注意:关键字参数要放在位置参数后面
使用关键参数调用上面的函数
power(x=3,y=2) 9
power(y=2,x=3) 9
power(3,y=2) 9
power(y=2,3) 报错
4.2.3*,**在传递实参时的用法
*解包
在传递实参时,可以通过*对迭代对象进行解包。
def func(a,b,*args):
print(a,b,args)
l = [1,2,3,4,5,6]
func(*l)
结果为1 2 (3,4,5,6),这里func(*l)相当于func(1,2,3,4,5,6)
**解包
在传递实参时,可以通过**对字典进行解包
def func(a,b,**kwargs):
print(a,b,kwargs)
t = {‘a‘:1,‘b‘:2,‘c‘:3,‘d‘:4}
func(**t)
结果为1 2 {‘c‘:3,‘d‘:4},这里func(**t)相当于func(a=1,b=2,c=3,d=4)
4.3返回值
函数还有一个重要的功能,就是返回结果
Python中函数以关键字 return 来返回结果并退出函数,程序回到调用函数处继续往下执行
return可以将0个,1个,多个函数运算完的结果,返回给函数被调用处的变量
函数可以没有返回值,也就是可以没有return语句,这是函数返回None
return会将多个返回值以元组的形式返回
注意:函数被调用执行函数体时,只要遇到return,就马上停止退出函数,返回到函数被调用处往下执行
5,lambda函数
与三元运算类似,lambda函数用来定义简单的,能够在一行内表达的函数,语法格式如下
lambda arg1,arg2,...:表达式
f = lambda x,y: x + y
res = f(1,2)
print(res)
结果为3
6,变量作用域
Python中一个变量能被访问的范围就叫做作用域,根据作用域的大小,分为全局变量和局部变量
6.1全局变量
Python是解释型语言,解释器在执行一个Python程序时会在计算机内存中申请一块内存来运行这个程序,全局变量在这块内存空间中都可以被访问和修改
直接定义在函数外的变量就是全局变量,在程序运行的全过程有效
6.2局部变量
相对应的,在函数里面定义的变量就是局部变量,它只在函数里有效,一旦函数执行完毕,它就不存在了
6.3global关键字
有时我们需要在函数内部修改全局变量
使用global关键字可以在函数内部修改全局变量
a = 1
def func():
global a #声明a为全局变量
a += 1
func()
print(a)
结果为2
7,python的内置函数
Python解释器一共提供了70多个内置函数。
import builtins
print(dir(builtins))
结果小写的都是内置函数
常用内置函数
abs() 返回数字的绝对值。参数可以是整数或浮点数。如果参数为复数,则返回其大小。如果x定义__abs__()
,则 abs(x)
返回x.__abs__()
。
all(可迭代) 没理解
bin() 将整数转换为以“0b”为前缀的二进制字符串。结果是有效的Python表达式
chr() 接收一个字符的unicode整数,返回这个字符
dir(对象) 尝试返回该对象的有效属性列表。
divmod(a,b) 使用两个(非复数)数字作为参数,并在使用整数除法时返回一对包含其商和余数的数字。
enumerate(可迭代对象,start = 0) 返回一个枚举对象。iterable必须是序列, 迭代器或其他支持迭代的对象。__next__()
由enumerate()
返回的迭代器的方法 返回一个元组,该元组包含一个计数(从start开始,默认为0),以及通过对iterable进行迭代而获得的值。
简单说就是循环这个可迭代对象,给每一个元素前加序号
help(对象) 调用内置的帮助系统。
hex() 将整数转换为以“ 0x”为前缀的小写十六进制字符串。
id(对象) 返回该对象内存中的地址
input() 用户输入,以字符串形式返回
isinstance(object,classinfo) 接收一个对象和一个类,如果对象是这个类的对象或者这个类的子类(直接,间接)的对象则返回True,否则返回False。
issubclass(class,classinfo) 如果class
是classinfo
的子类(直接,间接)则返回True,否则返回False。
iter() 返回一个迭代器对象,如果对象不支持迭代则抛出异常。
len() 返回对象的长度(项目数)。参数可以是序列(例如字符串,字节,元组,列表或range)或集合(例如字典,集合)。
map() 返回一个迭代器,该迭代器将函数应用于iterable的每个项目,并产生结果。
max() 返回可迭代的最大项目或两个或多个参数中的最大一个。
如果提供了一个位置参数,则它应该是可迭代的。返回迭代器中最大的项。如果提供了两个或多个位置参数,则返回最大的位置参数。
min() 返回可迭代的最小项或两个或多个参数中的最小项。
如果提供了一个位置参数,则它应该是可迭代的。返回iterable中的最小项。如果提供了两个或多个位置参数,则返回最小的位置参数。
oct() 将整数转换为以“ 0o”为前缀的八进制字符串。结果是有效的Python表达式。
ord() 返回一个字符的unicode码的十进制整数。
pow(x,y) 返回x的y次幂。
reversed() 返回一个反向迭代器。
round() 返回数字舍入到小数点后的n位精度。如果ndigits省略或为None
,则返回与其输入最接近的整数。
sorted(iterable,**,key = None,reverse = False* )
从iterable中的项目返回一个新的排序列表。
有两个可选参数,必须将其指定为关键字参数。
key指定一个自变量的函数,该函数用于从iterable中的每个元素中提取一个比较键(例如key=str.lower
)。默认值为None
(直接比较元素)。
reverse是一个布尔值。如果设置为True
,则对列表元素进行从大到小的排序。
sum(迭代) 求和
zip() 制作一个迭代器,聚合每个可迭代对象中的元素。
以上是关于四,程序流程控制之函数的主要内容,如果未能解决你的问题,请参考以下文章