python函数
一、函数
-
什么叫做函数
-
就是将一个代码块封装成一个函数,然后重复进行调用的话
1、函数的定义和调用
-
def 关键字定义函数
-
函数名 就是调用了,必须调用了函数,才能起作用
-
先定义后调用
def get_sum(n):
result=0
for i in range(1,n+1):
result+=i
print(f"和为{result}")
get_sum(100)
2、函数的参数
1、位置参数
-
就是调用函数的时候,传入参数,必须按照一定的位置进行传入
-
按照一定的顺序进行传入,有几个形参就传入几个参数
def user_name(name, age):
print(f"我的名字是{name},年龄是{age}")
user_name("qq", 11)
2、关键字参数
- 顺序可以不一样
def user_name(name, age):
print(f"我的名字是{name},年龄是{age}")
user_name(age=10,name="rrr")
- 位置参数和关键字传参可以一起使用,但是这个位置参数必须放在最前面,关键字参数是在后面的
3、默认值参数
-
在函数定义的时候,直接对形参进行赋值了
-
如果在调用的时候不赋值的话,将使用默认值
-
如果赋值了的话,则使用传递的值
# 没有传参
def user_name(name, age=18):
print(f"我的名字是{name},年龄是{age}")
user_name("qqq")
4、可变参数
1、个数可变的位置参数
-
参数是一个元组
-
也就是这个位置参数的参数是可变的,取决于调用的时候传入了多少个
def fun(*area): # *变量名 是一个元组,可以传入多个参数
print(type(area))
for i in area:
print(i)
fun(1,2,3) # 传入到元组中去
fun([1,2,3]) # 会将整个列表作为一个元素传入到元组中,相当于是一个元素
fun(*[1,2,3]) # 在调用的时候 * 会将列表中的每一个元素作为一个参数传入到元组中去
# 输出结果为
<class 'tuple'>
1
2
3
<class 'tuple'>
[1, 2, 3]
<class 'tuple'>
1
2
3
2、个数可变的关键字参数
-
传入到是一个字典存储
-
关键字参数也是可变的,取决于调用的时候能传入多少个
def fun(**keywords):
print(type(keywords))
for key,value in keywords.items():
print(key,"---",value)
fun(name="qq",age="18") # 接受的是一个键值对的方式
d={"name":"qq","age":"18"} # 如果想要传入一个字典的话,需要**来进行解析
# fun(d) # 不使用的话,会报错
fun(**d)
3、函数的返回值
-
return 返回值,返回到函数的调用的地方
-
没有return的话,函数的返回值为none
def fun(a,b):
s=a+b
return s # 这个s返回到函数调用的地方
result=fun(1,3) # 返回到函数调用的地方,赋值给了result变量
print(result)
- 可以返回多个值,但是一个变量接收的话,就是一个元组类型来存储多个返回值
def fun(n):
ji_shu=0
ou_shu=0
sum_shu=0
for i in range(1,n+1):
if i%2 !=0:
ji_shu+=i
else:
ou_shu+=i
sum_shu+=i
return ji_shu,ou_shu,sum_shu
result=fun(10)
print(type(result))
print(result)
# 输出结果为
<class 'tuple'>
(25, 30, 55)
4、变量的作用域
1、局部变量
-
在函数内部定义的变量
-
仅在函数的内部,函数执行结束后,这个局部变量的生命周期也会结束
-
当局部变量和全局变量名字一样的时,局部变量的优先级高
def fun(a,b):
s=a+b
return s
result = fun(1,2) # 函数调用后,这个局部变量会被销毁
print(result)
2、全局变量
-
在函数外面定义的变量,或者是在函数内部使用global关键字定义的变量
-
作用于整个程序,程序结束后,生命周期结束
-
全局都有用,可以在函数的内部参与运算
-
在函数内部使用global 变量,这个变量就是全局变量
s=100
def fun(a,b):
sum=s+a+b
return sum
result = fun(1,2)
print(result)
# 输出结果为
103
# 当局部变量和全局变量名字一样时
s=100
def fun(a,b):
s=200 # 局部变量的优先级高于全局变量,在名字相同的时候
sum=s+a+b
return sum
result = fun(1,2)
print(result)
# 输出结果为
203
# 函数内部 global关键字定义变量
def fun(a,b):
global s # s这个变量为全局变量
s=200 # 对其进行赋值
sum=s+a+b
return sum
result = fun(1,2)
print(result)
print(s)
s=100 # 在外面可以进行修改这个变量的值
print(s)
# 输出结果为
203
200
100
5、匿名函数
-
lambda函数
-
是指没有名字的函数,这个函数只能使用一次
-
一般是在函数的函数体只有一句代码且只有一个返回值的时候,可以使用匿名函数来简化
def fun(a,b):
return a+b
result=fun(1,2)
print(result)
# 上面代码可以简化成这样的,也就是只有一个返回值的时候使用,lamba匿名函数
s=lambda a,b:a+b # a,b是参数,: 后面是操作 s是函数名
print(type(s))
print(s(1,2)) # 调用函数名s
la = [1,2,3,4,5]
for i in range(len(la)):
result = lambda x:x[i] # 传入是一个列表
s = result(la)
print(s)
#输出结果为
1
2
3
4
5
student_scores=[
{"name":"qq","score":100},
{"name":"oo","score":90},
{"name":"ww","score":95},
]
student_scores.sort(key=lambda x:x.get("score"),reverse=True)
print(student_scores)
# 按照这个key的查找来进行排序,降序的方式来查找
# x 是字典,x.get 取出这些成绩,按照这个成绩来进行排序
# key=分数(函数每一个调用的)
# 临时用的函数,直接使用,不需要函数名
# 字典是可变的数据类型
# 输出结果为
[{'name': 'qq', 'score': 100}, {'name': 'ww', 'score': 95}, {'name': 'oo', 'score': 90}]
6、递归的操作
-
自己调用自己
-
有一个终止条件
# 计算一个数的阶乘
def fun(n):
if n==1: # 终止条件
return 1
else:
return n*fun(n-1) # 自己调用自己
print(fun(4))
-
斐波那列数列
-
1 1 2 3, 前2项的和等于后面一项
二、内置函数
- bool函数,所有空的数据类型都是false
str函数
# 列表转换为字符串
lst= [1,2,3]
s= str(lst)
print(s)
print(type(s))
# 输出结果为
[1, 2, 3]
<class 'str'>
int函数
# 将字符串和float转换为int
list函数
# 将字符串转换为列表
s2= "abc"
print(list(s2))
# 输出结果
['a', 'b', 'c']
数学函数

迭代器操作函数

总结
-
位置参数和关键字参数同时存在的时候,位置参数是在最前面的,关键字参数是在后面的
-
迭代器对象,就是可以使用索引的数据类型就是迭代对象了
案例
1、10个元素,使用函数求出这个列表中元素的最大值
2、编写函数实现提取字符串中的数字并求出和
- 输入一个字符串,有数字和字母的
3、实现字符串中的字母大小写转换
-
小写字母转换成大写
-
大写字母转换成小写

浙公网安备 33010602011771号