3.2 作业答案

第1题

import functools


def outer(function):
    @functools.wraps(function)
    def inner(*args, **kwargs):
        # print("before")
        res = function(*args, **kwargs)  # 执行原函数
        print("after")
        return res

    return inner


@outer
def func(a1):
    return a1 + "傻叉"


@outer
def base(a1, a2):
    return a1 + a2 + '傻缺'


@outer
def foo(a1, a2, a3, a4):
    return a1 + a2 + a3 + a4 + '傻蛋'

第2题

import random
import functools


def five_times(function):
    @functools.wraps(function)
    def inner(*args, **kwargs):
        data_list = []
        for i in range(5):
            res = function(*args, **kwargs)  # 执行原函数
            data_list.append(res)
        return data_list

    return inner


@five_times
def func():
    return random.randint(1, 4)


result = func()  # 内部自动执行5次,并将每次执行的结果追加到列表最终返回给result
print(result)

第3题

import os
import functools


def gard(function):
    @functools.wraps(function)
    def inner(path):

        # 获取路径的上级目录
        # folder_path = path.rsplit('/', 1)[0]
        folder_path = os.path.dirname(path)

        # 不存在,就创建
        if not os.path.exists(folder_path):
            os.makedirs(folder_path)

        res = function(path)
        return res

    return inner


@gard
def write_user_info(path):
    file_obj = open(path, mode='w', encoding='utf-8')
    file_obj.write("武沛齐")
    file_obj.close()


write_user_info('/Users/wupeiqi/PycharmProjects/luffyCourse/day12/xxx.txt')

第4~8题

def func(val):
    def inner(a1, a2):
        return a1 + a2 + val

    return inner


data_list = []

for i in range(10):
    data_list.append(func(i))
# data_list 是inner函数列表
v1 = data_list[0](11, 22)  # 11+22+0
v2 = data_list[2](33, 11)  # 33+11+2

print(v1)
print(v2)
posted @ 2022-02-13 20:04  林夕321  阅读(45)  评论(0)    收藏  举报