Python中函数、生成式、生成器、装饰器和异常处理机制

一、函数

1.定义函数以及参数(形参、实参)
在这里插入图片描述
在这里插入图片描述

2.求最大值、求和

在这里插入图片描述

3.递归函数

在这里插入图片描述

二、生成式

列表生成式 [ ]
集合生成式 { }
字典生成式 { }
什么场景使用/改写生成式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、生成器

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

四、装饰器

1.装饰器

在这里插入图片描述

2.如何去使用装饰器?@装饰器的名称

 2. 如何去使用装饰器?@装饰器的名称
# @timeit的工作原理: download_music=timeit(download_music) 
# 执行的过程:
#   1). timeit(download_music)函数的返回值是wrapper函数名.
#   2). download_music=timeit(download_music), 让download_music=wrapper
#   3). 最后一行download_music(),实质上执行的函数wrapper()
#   4). 执行wrapper函数时, f()实质上执行的函数download_music()
@timeit
def download_music():
    url = "http://。。。。。。。。。。。。。。ca9b831350d8.mp3"
    # 模拟浏览器访问mp3的网址,获取服务器端给我们的响应(response)
    response = requests.get(url)
    # 获取mp3音乐的内容
    # music_content = response.content
    # 打开文件,存储音乐的内容到文件中
    with open("再见.mp3", 'wb') as f:
        f.write(response.content)
    print("再见.mp3下载完成.......")

在这里插入图片描述

3.基于装饰器计算下载歌曲的时间

import time
import requests
 
#1装饰器计算时间
def timeit(f):
    def wrapper():
        start = time.time()
        result = f()
        end = time.time()
        print("%s used time is %.3fs" %(f.__name__, end-start))
        return result
    return wrapper
#2下载歌曲并使用装饰器
@timeit
def download_music():
    url = "http://m10.music.126.net/20200719111612/e36c0e235dbad219e9d8f0e65fa62007/ymusic/0201/7233/bea2/2cb43c8bcaa7797d32e5ca9b831350d8.mp3"
    response = requests.get(url)
    with open("再见.mp3", 'wb') as f:
        f.write(response.content)
    print("再见.mp3下载完成.......")
download_music()
~                  

4.多个装饰器器、调用帮助的问题

import time
from functools import wraps
 
def welcome(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        print("welcome..........")
        result = f(*args, **kwargs)
        return result
    return wrapper
 
def logger(f):
    # 这里是可变参数和关键字参数
    # wraps装饰器用来保留f函数原有的属性,包括他的帮助信息
    @wraps(f)
    def wrapper(*args, **kwargs):
        """
        wrapper function
        """
        start = time.time()
        # 这里是解包
        result = f(*args, **kwargs)
        end = time.time()
        print("Logger: %s %s run %.3f s" %(time.ctime(), f.__name__, end-start))
        return result
    return wrapper
 
# 多个装饰器装饰的时候, 从下向上进行装饰的, 执行的时候是从上到下进行执行.
@welcome
@logger    # add = logger(add)====> add=wrapper
def add(num1, num2):
    """
    add function
    """
    time.sleep(0.1)
    return num1 + num2
 
result = add(10, 20)
print(result)
# 装饰器: 用来装饰函数或者类的工具, 在不改变源代码的情况下给函数/类添加额外功能.
# 装饰器装饰的是函数/类,所以需要传递的参数是函数名或者类名。
 
import time             # 时间处理模块
# HTTP请求库,多用于网络爬虫, 需要pip install 下载的
import requests
 
@timeit
def add(num1, num2):
    time.sleep(0.2)
    return num1 + num2
# download_music()   
 
"""
分析add函数执行的过程: 
    1. add(10, 20)调用函数
    2. 发现add函数被装饰器timeit装饰了, @timeit==> add=timeit(add)
    3. timeit(add)函数的返回值是wrapper函数, add=timeit(add)这里add=wrapper
    4. 终于知道add函数是什么了.add(10, 20)===> wrapper(10, 20)
    5. 在wrapper函数中有f()===> add(10, 20)
    6. 返回f()函数的返回值30
"""
print(add(10, 20))

五、异常处理机制

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值