一、函数的返回值

函数的返回值:通过关键字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:在函数内部申明全局变量

一张图来解释:

Python怎么看主函数 python怎么看函数输出结果_字符串

# 在函数内部申明全局变量
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)