函数: 1.内置函数(系统自带,比如input,id,type等)。 2.用户自定义函数。
1.自定义函数
1.语法:
def 函数名():
函数体;
2.函数的调用: 函数名()
代码示例:
def func():
for i in range(1,5):
print() # 这里打的是一个换行符
for j in range(1,i+1):
print("*",end="")
func()
2.参数的定义
参数:函数名后面的括号中定义。
3.形参和实参
定义的参数称为:形参
调用实际的传递为:实参
形参的三种类型:
1 必需参数(必备参数)
代码示例:
def func(a,b,c): # 必备参数定义了,调用函数时就必须要传
d = a + b +c
print(d)
2 默认参数(缺省参数):
def student_info(name,age,course = "python"): # 调用函数时,默认参数的值如果没有传入,则被认为是默认值
print("名字:",name)
print("年龄:",age)
print("学科:",course)
注意:与必需参数混合使用时必须在末尾。
3 不定长参数(动态参数):
*args: 接收0个或多个位置参数(这个参数名不一定起args,你也可以起其他名,只是args是我们不定长参数的规范写法(强烈建议就用args)。
def func(a,b=2,*args):
print(args) #元组方式传参
func(5,4,3,2,1)
**kwarge: 接收0个或多个关键字参数。
def func(a,b=2,**kwargs):
print(kwargs) #字典方式传参
func(5,4,c=3,d=2,f=1)
注意:与必须参数,默认参数一起使用时,不定长参数必须在末尾,且关键字参数不能有冲突。
4.函数的返回值 return
疑问: 为什么用return? 什么时候用return?
根据需求,当需要返回时就返回,不需要返回就不要返回。
注意点:
1 return 是用来给函数返回结果的
2 当一个函数中只会执行一次return,函数执行到return之后就不会再执行,会直接跳出函数
3 函数没有定义return,默认的就是返回None
4 返回值个数=0: 返回None
5 返回值个数=1: 返回object
6 返回值个数>1: 返回元组tuple
注:所以当函数中没有return时,print打印调用函数时返还一个None。
5.拆包与打包
1.拆包:
代码示例:
li = [1,2,3]
tu = (11,22,33)
dic = {"a":"111","b":"222","c":"999"}
def func(a,b,c):
print("a的值:{}".format(a))
print("b的值:{}".format(b))
print("c的值:{}".format(c))
func(li[0],li[1],li[2]) # 第一种传参法
func(*li) # 第二种传参法
func(*tu) # 元组传参
func(**dic) # 字典传参
2.打包:
定义参数时候在参数前面,加个*或者**,那么这个参数就是一个不定长参数
带有一个*不定长参数,会将接收到的参数,打包成一个元组
带有两个或上**的不定长参数,会将接收到的参数,打包成一个字典
6.函数的作用域
1.全局变量:
函数外部定义的变量;不管函数内部还是函数外部都能够访问
2.局部变量:
在函数内部定义的变量,仅限函数内部可以使用,在函数外无法调用
代码示例:
y = 2023 # 全局变量
def func():
a = 100 # 局部变量
print(a) # 函数内部定义的变量,在函数内部是可以使用的
print(y) # 函数内部,可以使用全局变量
print(a) # 在函数外部调用局部变量a会报错
3.在函数内部修改全局变量的值:global
代码示例:
a = 111
def func():
global a # 这里使用global 声明某个变量之后,那么这个变量在函数内进行的操作会对全局生效
a = 222
func() #调用
print(a)
注意点:
1 不同的函数,可以定义相同名字的局部变量
2 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
7.常用的一些内置函数
1.最大值:max(),最小值:min(),求和:sum()。
代码示例:
li = [1,2,3,4,5,6,7]
res = max(li) # 获取列表中的最大值
print("最大值:",res)
res = min(li) # 获取列表中的最小值
print("最小值;",res)
res = sum(li) # 求列表中的数据总和
print("数据总和:",res)
2.enumerate:获取每一个元素及下标。
代码示例:
li = [1,2,3,4,5,6,7]
res = enumerate(li) # 返回一个enumerate类型的数据,enumerate支持数据类型包括字符串,元组,字典。
for i in res: # 采用for循环遍历,获取元素的下标及其对应的值
print(i)
3. eval:识别字符串中有效的python表达式(通俗 一点理解,就是把字符串左右两边引号去掉)。
代码示例:
str1 = "{'a':11,'b':22}"
str2 = "[11,22,33,44]"
# 需求:把str1转换成字典,str2转换成列表
dic1 = eval(str1)
print(dic1,type(dic1))
li = eval(str2)
print(li,type(li))
4.zip:聚合打包(打包时,以最短的为标准进行匹配打包,长的去掉)。
代码示例:
li = [1,2,3,4]
li2 = [11,22,33,44]
res = zip(li,li2) # 将li,li2聚合打包
print(list(res)) # 采用list(tuple,dict)转换成列表后输出
5.filter过滤器。
表现语法形式: filter(function,iterable)
第一个参数:
第二个参数:iterable :可迭代对像(就是可以使用for循环进行遍历的都是可迭代对像,字符串,列表,元组,字典,range)
原理:filter会将第二个参数中的数据,进行遍历,然后当成参数传入第一个参数(函数),根据函数返回的结果是否为True,来决定是否要将数据过滤出来
代码示例:
li = [1,2,3,4,5]
def func():
return a > 2 #这里必须用return,因为必须有返回值才能过滤。
res = filter(func,li)
print(res)
6.map():会根据提供的函数对指定序列做映射。
语法:map(function, iterable)
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
代码示例:
li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def func(a):
return a^2
res = map(func,li)
print(list(res))
7.strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
方法语法:str.strip([chars]);
返回值:返回移除字符串头尾指定的字符序列生成的新字符串。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
代码示例:
str = "************this is ***********string***example...ok***"
print(str.strip("*")) # 指定删除字符串中的*
str = "00000000python0000java0000"
print(str.strip("0"))
str2 = " python "
print(str2.strip())
8.匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。
在python中,不通过def来声明函数名字,而是通过 lambda 关键字来定义的函数称为匿名函数。
lambda函数能接收任何数量(可以是0个)的参数,但只能返回一个表达式的值.
lambda函数是一个函数对象,直接赋值给一个变量,这个变量就成了一个函数对象。
语法:lambda 参数:表达式
使用场景:
1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或是返回值)
2.要处理的业务符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数
代码示例:
def sum_func(a, b, c):
return a + b + c
# 将匿名函数对象赋值给 sum_lambda
sum_lambda = lambda a, b, c : a + b + c
print(sum_func(1, 2, 3)) # 6
print(sum_lambda(1, 2, 3)) # 6