求知讲堂Python2020-3.函数
Python-函数
- 函数基础
- 函数参数
- 传参
- 必选参数
- 默认参数[缺省参数]
- 可选参数
- 关键字参数
- 函数返回值
- 函数嵌套调用
- 局部变量与全局变量
- 局部变量
- 全局变量
- 函数参数引用传值
- 匿名函数
- 递归函数
- 内置函数
- 数字运算函数
- 类型转换函数
- 序列操作
- set集合
函数基础
函数定义:
def 函数名(参数列表):代码块
函数调用: 函数()
函数说明文档: 函数内容的第一行可以用字符串进行函数说明
函数参数
传参
必选参数
在调用函数的时候必选参数是必须要赋值的
def sum(a,b): #形式参数:只是意义上的一种参数,在定义的时候是不占内存地址的sum=a+bprint(sum)pass
#函数调用
sum(20,15) #20,15 实际参数:实参,实实在在的参数,是实际占用内存地址的
默认参数[缺省参数]
始终存在于参数列表中的尾部
def sum(a=20,b=15): sum=a+bprint(sum)pass
#函数调用
sum() #在调用的时候如果未赋值,就会用定义函数时给定的默认值
可选参数
当参数的个数不确定时使用
def getComputer(*args):'''计算累加和:param args: 可变长的参数类型:return:'''# print(args)result = 0for item in args:result += itempassprint('result=%d'%result)passgetComputer(1) #(1,)
getComputer(1,2) #(1, 2)
关键字参数
在函数体内,参数关键字是一个字典类型,key是一个字符串
def keyFunc(**kwargs):print(kwargs)passdictA = {"name":'Leo',"age":35}
keyFunc(**dictA) #{'name': 'Leo', 'age': 35}
keyFunc(name='Leo',age=35,) #{'name': 'Leo', 'age': 35}
可选参数必须放到关键字参数之前
可选参数:接受的数据是一个元组类型
关键字参数:接受的数据是一个字典类型
def complexFunc(*args,**kwargs):print(args)print(kwargs)passcomplexFunc(1,2,3,4,name='Xena')
#(1, 2, 3, 4)
#{'name': 'Xena'}
函数返回值
概念: 函数执行完以后会返回一个对象,如果在函数的内部有return,就可以返回实际的值,否则返回None
类型: 可以返回任意类型,返回值类型应该取决于return后面的类型
用途: 给调用方返回数据
一个函数体内可以出现多个return值,但是肯定只能返回一个return
如果在一个函数体内执行了return,意味着函数就执行完成退出了,return
如果函数需要返回多个结果,将要返回的值用逗号隔开,最终会返回一个包含所有返回值的元组
函数嵌套调用
函数可以嵌套调用,即在一个函数内部调用另外一个函数。
内层函数可以访问外层函数中定义的变量,但不能重新赋值。
局部变量与全局变量
局部变量
在函数内部定义的变量,函数内部的变量名如果第一次数显,且出现在=之前,即被视为该函数定义了一个局部变量,不管是全局域中有没有用到该变量名,函数中使用的将是局部变量。
不同的函数可以定义相同名字的局部变量,但是每个函数内部不会产生影响。
局部变量的作用,是为了临时保存数据,需要在函数中定义变量来进行存储。
全局变量
如果一个变量可以在函数内部调用,也可以在函数外部调用,那么这个变量就称为全局变量。
全局变量能在函数内部访问,也可以在外部访问,但函数内部不能修改全局变量。
全局变量与局部变量重复,局部变量不会影响全局变量,函数使用局部变量。
注: 如果在函数的内部想对全局变量进行修改,必须使用global关键字进行声明
函数参数引用传值
- 在python当中,万物皆对象,在函数调用的时候,实参传递的就是对象的引用
- 在函数内部的处理是否会影响到函数外部的数据:不可变类型(int、tuple、string)不会改变函数外部的数据,可变类型(list、dict)会改变。
参数传递是通过对象引用来完成
匿名函数
python中使用lambda关键字创建匿名函数,所谓匿名即这个函数没有名字不用def关键字创建标准的函数
lambda 参数1,参数2,参数3:执行代码语句
特点:
- 使用
lambda关键字去创建函数 - 没有名字的函数
- 匿名函数冒号后面的表达式有且只有一个,注意:是表达式,而不是语句
- 匿名函数自带
return,而这个return的结果就是表达式计算后的结果
缺点:lambda只能是单个表达式,不是一个代码块,lambda的设计就是为了满足简单函数的场景,仅仅能封装有限的逻辑,复杂逻辑实现不了,必须使用def来处理。
lambda与三元运算
if a:b
else:c
等价于:
b if a else c
递归函数
如果一个函数在内部不调用其他的函数,而是自己本身的话,这个函数就是递归函数。
递归函数必须有一个结束条件,否则递归无法结束会一直递归下去,直到到达最大递归深度报错。
优点:
- 递归使代码看起来更加整洁、优雅
- 可以用递归将复杂人物分解成更简单的子问题
- 使用递归比使用一些嵌套迭代更容易
缺点:
- 递归逻辑很难调试,递归条件处理不好容易造成程序无法结束,直到达到最大递归错误
- 递归占用大量内存,耗费计算机资源
内置函数
任何一门编程语言的核心操作都是操作内存中的数据,但内存中的数据又是通过编程语言的API来实现,所谓的API,就是系统提供给我们的函数,有一种函数是系统预先定义的函数,也就是安装python就自带的函数,我们把它成为内置函数,也叫内嵌函数
定义: 内置函数就是python安装后就自带有的函数
官方文档
数字运算函数
abs():求绝对值round():四舍五入取整pow():求指数divmod():求商余数max():求最大值min():求最小值sum():求和eval():执行字符串表达式
a = 1
b = 2
eval('a+b')eval('a+b+c',{'c':2,'a':1,'b':3})
类型转换函数
int()float()str()ord():字符转数字chr():数字转字符bool():转换为布尔型,[],(),{},0,None,0.0,' '都相当于Falsebin():转为二进制hex():转为十六进制oct():转为八进制list():元组转换为列表tuple():列表转换为元组dict():创建字典bytes():转为字节数组
序列操作
可迭代对象:可作用于for循环的对象
包括:
- 集合数据类型:序列、字典、集合
- 迭代器对象
all():用于判断给定的可迭代参数iterable中的所有元素是否都为True,如果是返回True,否则返回False元素,除了是0,空,False外都算True。**注意:**空元组,空列表返回值为True,这里要特别注意。any():哦那个有判断给定的可迭代参数iterable是否全部为False,如果是返回True,如果有一个为True,则返回False。sorted():对所有可迭代的对象进行排序操作
sort和sorted的区别:
sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作
list的sort方法返回的是对已经存中的列表的操作,而内置函数sorted方法返回的是一个新的list,而不是在原来的基础上进行的操作。reverse():用于反向列表中的元素range():创建一个整数列表,一般用在for循环中zip():用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表,如果哥哥迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
与zip相反,利用*操作符,可以将元组解压为列表,返回二维矩阵式。
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
enumerate():枚举,用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
set集合
定义: set(集合)也是python中的一种数据类型,是一个无序且不重复的元素集合
创建集合:
# 第一种方式
set1 = {"1","2"}# 第二种方式
list1 = ['1','2','3','4']
set2 = set(list1)
集合操作函数:
add():添加一个元素clear():清空集合的元素difference():a.difference(b),两个集合的差集,a中存在,b中不存在的intersection():a.intersection(b),两个集合的交集,a中存在,b中也存在的union():a.union(b),两个集合的并集pop():随机移除集合中的某个元素并且获取那个参数,a.pop()discard():移除指定元素a.discard(x)update():更新集合
>>> a = {1,2,3}
>>> b = {4,5,6}
>>> a.update(b)
>>> a
{1,2,3,4,5,6}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
