一、函数的返回值
函数的返回值:通过关键字return
不写return或者return后面不写内容:返回值数目=0,返回None
return后面返回一个值:返回就是该数据
return后面返回多个值:返回的是一个元组
注意点:函数执行到return就会结束函数的运行,并返回结果
# 先看一个例子
li = [11, 22, 33]
res1 = li.append(44)
print(res1) # 打印结果为 None 为什么呢?因为append这个方法没有返回值
res2 = li.copy()
print(res2) # 打印结果为 [11, 22, 33, 44] ,为什么这个又能打印出来呢?因为copy方法有返回值
# 那么怎么看一个方法有没有返回值,方法一:可以看源码,ctrl+鼠标点击该方法,点进去看
# 方法二:ctrl+鼠标靠近该方法,会有提示 看箭头--》
# return的使用
def add(a, b):
c = a + b
return c
result = add(11, 22)
print("调用之后的结果为", result) # 输出结果 33
def func(a, b):
c = a+b
d = a-b
return c, d
result2 = func(55,44)
print("调用之后的结果为", result2) # 输出结果 (99, 11)
# 也可以这样写
res3, res4 = func(99, 88)
print(res3) # 187
print(res4) # 11
二、全局变量与局部变量
函数的作用域:
全局变量:python中定义在模块(py文件中的变量),叫做全局变量,在该文件任何地方都可以使用
局部变量:定义在函数中的变量,叫做局部变量,只能在函数内部使用
建议:定义局部变量的时候尽量不要和全局变量重名
global:在函数内部申明全局变量
一张图来解释:
# 在函数内部申明全局变量
def demo01():
global aa # 声明执行使用的是全局变量
aa = 100
demo01()
print(aa) # 此时能打印出 100
三、常见的内置函数
len():获取数据的长度
sum(): 求和
max(): 最大值
min(): 最小值
bool:获取数据的布尔值,python所有的数据都有布尔值,
非零为True, 值等于0或者数据值为None或者数据长度为0
# sum 求和
li = [11, 22, 33]
tu = (11, 22, 33, 44, 55)
dic = {"a": 11, "b": 22}
print(sum(li)) # 输出结果为 66
print(sum(tu)) # 输出结果为 165
print(sum(dic.values())) # 输出结果为 33
# 求最大值max
li1 = [11, 22, 33]
print(max(li1)) # 输出结果为 33
# 求最小值min
li1 = [11, 22, 33]
print(min(li1)) # 输出结果为 11
四、高级内置函数
enumerate:可以获取序列类型数据的下标和值
eval: 可以识别字符串中的有效的python表达式,可这样理解-->即去掉字符串两边(首尾)的引号
怎么来判断是不是有效的表达式? 把两边的引号去掉,没报错,就是有效的表达式
处理数据时,这个eval方法常用!!!
filter:过滤器函数
zip():聚合打包(重点!!!测试处理数据常用--)
4.1 enumerate
enumerate:可以获取序列类型数据的下标和值
# 1.enumerate
li = ["aa", "bb", "cc", "dd"]
# 打印列表中的每个元素以及下标
res = enumerate(li)
print(list(res)) # [(0, 'aa'), (1, 'bb'), (2, 'cc'), (3, 'dd')]
li1 = ["a", "b", "c", "d"]
for i, v in enumerate(li1):
print("下标{},值{}".format(i, v)) # 下标0,值a 下标1,值b 下标2,值c 下标3,值d
4.2 eval
eval: 可以识别字符串中的有效的python表达式,可这样理解-->即去掉字符串两边(首尾)的引号
# 2.eval
a = "[11,22,33,44]" # 这是一串字符串
b = "{'a':1,'b':2}" # 这是一串字符串
c = "3>5"
res = eval(a) # 可自动识别列表
print(res) # 打印结果:[11, 22, 33, 44]
print(eval(b)) # 打印结果:{'a': 1, 'b': 2} 可自动识别字典类型
print(eval(c)) # 打印结果:False 可自动识别布尔值
4.3 filter
过滤器函数,过滤器的规则(条件需要自己写,通常写在函数内)
# 获取字典中值大于30的键值对,放到一个新字典中
dic = {"a": 11, "b": 22, "c": 33, "d": 44}
# 传统做法
new_dict = {}
for k, v in dic.items():
if v > 30:
new_dict[k] = v
print(new_dict) # 打印结果:{'c': 33, 'd': 44}
# 用filter过滤器来实现
def func(x):
return x[1] > 30
res1 = filter(func, dic.items())
print(dict(list(res1))) # 打印结果:{'c': 33, 'd': 44}
# 可能有的同学看的不是很清晰,现在用一个列表来举例filter()用法
li2 = [11, 22, 33, 44, 55, 66]
def func2(z):
return z > 30
r3 = filter(func2, li2)
print(list(r3)) # 打印结果:[33, 44, 55, 66]
# 扩展:匿名函数 lambda表达式(适用于函数中只有一行代码的简单函数)
# lambda 参数:返回值
li3 = [11, 22, 33, 44, 5, 66, 77, 88, 99]
r4 = filter(lambda x: 50 > x > 30, li3)
print(list(r4)) # 打印结果: [33, 44]
4.4 zip()
zip():聚合打包(重点!!!)
# zip():聚合打包
# 需求:
# title = ["name", "age", "gender"]
# info = [['小明', 18, '男'], ['小红', 22, '女'], ['小张', 28, '男']]
# 把以上信息,转换为下列格式
# users = [{'name': '小明', 'age': 18, 'gender': '男'},
# {'name': '小红', 'age': 22, 'gender': '女'},
# {'name': '小张', 'age': 28, 'gender': '男'}]
# 先拿一段短的例子来讲解
a = ["name", "age", "gender"]
b = ['小明', 18, '男']
r5 = dict(zip(a, b))
print(r5) # 打印结果: {'name': '小明', 'age': 18, 'gender': '男'}
title = ["name", "age", "gender"]
info = [['小明', 18, '男'], ['小红', 22, '女'], ['小张', 28, '男']]
list1 = []
for item in info:
# print(item) #这里的item,是指每一个这样的列表 ['小明', 18, '男']、['小红', 22, '女']、['小张', 28, '男']
dic1 = dict(zip(title, item))
list1.append(dic1)
print(list1)