Python之函数【中】

1、函数的返回值


在这里插入图片描述
示例:

# 定义摄氏度函数
def c_temp():
    c_t = 14
    print(f"今天的摄氏度:{c_t}")
    # 如果不做任何返回,默认返回值为None
    # 将c_t返回到该函数的调用处
    return c_t


# 定义华氏度函数
def f_temp(c_t):
    f_t = round(c_t/1.8 + 32, 2)
    print(f"今日的华氏度:{f_t}")


if __name__ == '__main__':
    # 注意1:函数在定义完之后,统一在最后去调用
    c_t_two = c_temp()
    f_temp(c_t_two)     # 实参

2、函数多个返回值


在这里插入图片描述
示例:

def test_one():
    a, b, c = (1, 2, 3)

    # 函数当中有多个return不会报错,但是只执行第一个
    # return a
    # return b
    # return c

    # 相当于将a,b,c打包返回,元组
    return a, b, c


# res = test_one()    # tuple
# print(res)


a, b, c = test_one()    # 拆包
print(a)
print(b)
print(c)


3、函数作用域介绍


在这里插入图片描述
示例:

"""
注意:if判断,循环控制是没有作用域的概念。
"""
# if True:
#     a = 5
#
#
# print(a)


# for i in range(3):
#     print("hello")
#
#
# print(i)


# def test_one():
#     # 局部变量,该变量的作用域在函数体内部
#     a = 5
#
#
# print(222, a)
# test_one()


# 全局变量
a = 100


def test_one():
    print(f"a = {a}")   # 在局部没有时,则取全局变量中找。100


def test_two():
    a = 200     # 局部变量
    print(f"a = {a}")   # 当局部有该变量时,则优先局部的。200


test_one()
test_two()

4、函数作用域注意点


在这里插入图片描述
示例:

# global
a = 10


def test_one():
    print(f"a = {a}")   # 10


def test_two():
    # a = 20    # 初始化一个局部变量

    # 局部变量-->全局变量
    global a
    a = a + 10
    # a += 10
    print(f"a = {a}")


test_one()
test_two()

5、函数作用域LEGB


在这里插入图片描述
示例:

# built-in   只要在python环境中即可使用,了解。
# int()


# global
a = 11


def outer():
    b = 5   # enclosing

    def inner():
        # nonlocal是将local声明为enclosing
        nonlocal b
        b = 6   # local
        print(b)


    inner()
    print(b)


outer()

输出结果:
在这里插入图片描述

6、函数执行注意点


案例:

"""
1.代码从上至下执行
2.函数只有在调用的时候才会执行
3.函数执行完毕,则返回到函数的调用处
"""


def test():
    print("--5--")
    return None


def test2():
    print("--3--")
    test()
    print("--4--")


def test3():
    print("--1--")
    test2()
    print("--2--")


# 1 3 5 4 2
test3()

7、递归函数.


在这里插入图片描述
示例:

# 实现阶乘
# n! = 1*2*3*...*n
# 3! = 1*2*3


# # 计数器
# i = 1
# res_nums = 1
# while i <= 3:
#     res_nums *= i
#     # res_nums = res_nums * i  # 1*1*2*3
#     i += 1
#
#
# print(f"3!={res_nums}")


# 使用递归实现,在函数内部调用自己
# 递归没有结束条件,一定要自己设定结束条件
# 能够用递归实现的,都可以用循环实现,递归效率低所以很少使用
def get_nums(num):
    if num > 1:
        return num * get_nums(num-1)
    else:
        return 1


# 4 * 3 * 2 * 1
res = get_nums(3)
print(res)


在这里插入图片描述

8、内置模块中的方法


在这里插入图片描述
在这里插入图片描述
示例:

# 实现:返回1-10的奇数列表
# 1.取出 1~10 每一个数
# 2.判断,奇数则添加到列表当中


# li = []
# for i in range(1,11):
#     # i % 2 --> 1 奇数
#     # i % 2 --> 0 偶数
#     if i % 2 == 1:
#         li.append(i)
#
#
# print(li)


# li = []
# for i in range(1, 11, 2):
#     li.append(i)
#
#
# print(li)


# def is_odd(n):
#     # 布尔值,不管bool值为True还是False,都会返回出去。是filter做了过滤的操作。
#     return n % 2 == 1
#
#
# # filter函数,将range(1,11)中每个元素传到is_odd方法中进行条件判断,将结果为True的构建新的filter对象
# print(list(filter(is_odd, range(1, 11))))


# 阶乘实现:1.循环 2.递归 3.reduce
# functools是内置的模块,所以不需要pip安装
from functools import reduce


def multi(x, y):
    return x * y


# 相当于将1,2先传入到multi中,进行乘积返回,再将该结果与3传进入进行乘积返回...依次往后
# 注意:是两两传入..
print(reduce(multi, range(1, 4)))   # [1,2,3]

9、匿名函数


在这里插入图片描述
示例:

# 自定义函数
# def f(x):
#     return x * x
#
#
# print(f(3))


# lambda 形参:返回值
# f = lambda x, y: x * y
# print(f(2, 5))


# from functools import reduce
# # print(reduce(lambda x, y: x*y, range(1,7)))


# # 匿名函数作为返回值
# def fx(i, j):
#     # 返回的匿名函数
#     return lambda :i*j
#
#
# f = fx(6, 6)    # lambda :i*j
# print(f())      # 函数只有在调用时才会执行


# 匿名函数作为实参
# def test(a, b, func):
#     res = func(a, b)    # 11 + 22
#     return res
#
#
# nums = test(11, 22, lambda x,y:x+y)
# print(nums)


# [4,-2,3,1] --> [1,-2,3,4]
# [4,2,3,1] --> [1,2,3,4] --> [1,-2,3,4]
li = [4, -2, 3, 1]

# key:指定排序规则,排序之后返回原元素
li.sort(key=abs)
print(li)

在这里插入图片描述

作业


题1

在这里插入图片描述
方法1:

infors = [{'name': 'qian', 'age': 28}, {'name': 'amy', 'age': 20}, {'name': 'james', 'age': 25}]

print(sorted(infors, key=lambda infos: infos['name']))

方法2

infors = [{'name': 'qian', 'age': 28}, {'name': 'amy', 'age': 20}, {'name': 'james', 'age': 25}]

infors.sort(key=lambda x: x['name'])

print(infors)

在这里插入图片描述


题2

在这里插入图片描述

user_input_one = int(input('用户请输入第1个数:'))
user_input_two = int(input('用户请输入第2个数:'))
user_input_three = int(input('用户请输入第3个数:'))


def number_sum(a, b, c):
    sum = a + b + c
    print(f"用户输入的三个数的和为:{sum}")
    avg = number_avg(sum)
    print(f"平均数为:{avg}")


def number_avg(sum):
    return sum / 3


if __name__ == '__main__':
    number_sum(user_input_one, user_input_two, user_input_three)

题3

在这里插入图片描述

l = ["jack", ("tom", 23), "rose", (14, 55, 67)]


# isinstance(data,(type1,type2)):函数来判断一个对象是否是一个已知的类型,类似 type()。
def show_msg(data):
    if isinstance(data, (str, int)):
        print(data)
    else:
        for item in data:
            show_msg(item)


show_msg(l)

运行结果:
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值