python极简教程06:生成式和装饰器
测试奇谭,BUG不见。
这一场,主讲python的生成式和装饰器。
目的:掌握四种生成式(列表、生成器、集合、字典),装饰器的原理和使用。
生成式
01 什么是生成式?
能够用一行代码,快速高效的生成数据。(这就不需要再通俗的讲解了吧)
02 列表生成式
举个例子:提取1-100之间的奇数
# 不用列表生成式
odd_list = []
for i in range(101):
if i%2==1:
odd_list.append(i)
print(odd_list)
# 使用列表生成式(更加简洁)
odd_list = [i for i in range(101) if i%2==1]
print(odd_list)
03 列表生成式
使用(),而不是 []
# 注意:这个不是生成tuple,而是生成器
odd_gen = (i for i in range(101) if i%2==1)
print(odd_gen)
-> <generator object <genexpr> at 0x00000206EEBFF750>
print(type(odd_gen))
-> <class 'generator'>
for i in odd_gen:
print(i)
04 集合生成式
举个例子:列表元素去重
src_list = [1,1,1,2,2,3,4,5,5,6]
res_set = {i for i in src_list}
print(res_set)
-> {1, 2, 3, 4, 5, 6}
05 字典生成式
举个例子:字典kv反转
src_dict = {"zhangsan":20,"lisi":21, "wangwu":33, "zhaoliu":10}
rev_dict = {v:k for k,v in src_dict.items()}
print(src_dict)
-> {'zhangsan': 20, 'lisi': 21, 'wangwu': 33, 'zhaoliu': 10}
print(rev_dict)
-> {20: 'zhangsan', 21: 'lisi', 33: 'wangwu', 10: 'zhaoliu'}
装饰器
装饰器
01 什么是装饰器?
顾名思义:增强函数或类的功能的一个函数。
装饰器的作用:增强函数的功能,确切的说,可以装饰函数,也可以装饰类。
初学的你,还是太难理解?
02 通俗的讲解
你开视频聊天,觉得自己的颜值不在线,于是乎,你使用美颜,增强装饰自己的颜值。
对于美颜这个功能来说,你可以用,我可以用,所有人都可以用,以此来增强装饰自己的颜值。
03 如何定义一个装饰器
def decorator(func):
def wrapper(*args,**kargs):
# 可以自定义传入的参数
print(func.__name__)
# 返回传入的方法名参数的调用
return func(*args,**kargs)
# 返回内层函数函数名
return wrapper
04 如何使用一个装饰器
方法一:不用语法糖@符号
# 装饰器不传入参数时
f = decorator(函数名)
# 装饰器传入参数时
f = (decorator(参数))(函数名)
方法二:采用语法糖@符号
# 定义的装饰器
@decorator
def f():
pass
# 执行被装饰过的函数
f()
再举个例子:计算函数时间
import time
# 定义装饰器
def time_calc(func):
def wrapper(args, kargs):
start_time = time.time()
f = func(args,kargs)
exec_time = time.time() - start_time
print(exec_time*1000)
return f
return wrapper
# 使用装饰器
@time_calc
def add(a, b):
return a + b
@time_calc
def sub(a, b):
return a - b
add_result = add(1987190, 123423123123)
sub_result = sub(12341234, 123222)
一如既往,做个总结
01 生成式和装饰器,是python高级编程的重要知识点;
02 工作中,使用他俩的频率特别高。
python极简教程06:生成式和装饰器的更多相关文章
- Python 极简教程(八)字符串 str
由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...
- python极简教程04:进程和线程
测试奇谭,BUG不见. 大家好,我是谭叔. 这一场,主讲python的进程和线程. 目的:掌握初学必须的进程和线程知识. 进程和线程的区别和联系 终于开始加深难度,来到进程和线程的知识点~ 单就这两个 ...
- python极简教程01:基础变量
测试奇谭,BUG不见. 其实很久之前,就有身边的同事或者网友让我分享一些关于python编程语言的教程,他们同大多数自学编程语言的人一样,无外乎遇到以下这些问题: 网络上的资料过多且良莠不全,不知道如 ...
- python极简教程08:对象的方法
测试奇谭,BUG不见. 讲解之前,我先说说我的教程和网上其他教程的区别: 1 我分享的是我在工作中高频使用的场景,是精华内容: 2 我分享的是学习方法,亦或说,是指明你该学哪些.该重点掌握哪些内容: ...
- Python 极简教程(一)前言
现在 Python 用处很多,学的人也很多,其流行程度自不必说.但是很多人学 Python 的时候都遇到过问题,特别对于非计算机专业毕业的人来说. 现在的教程非常多,但是绝大部分对于初学者都不够友好. ...
- Python 极简教程(三)数据类型
每种语言都有各种数据类型.这就像在现实生活中,我们计数的时候需要用到数字,在表述金额.重量.距离等需要精确计数时用到小数,在日常交谈中要用文字,等等.在计算机语言中,为了表述不同的情况,也需要用到各种 ...
- Python 极简教程(二)编码工具
Python 的编码工具很多.目前最流行的是 pycharm,关于 pycharm 的安装使用请参考 PyCharm安装使用教程. 而学习过程中,我觉得最好用的,还是 Python 自带的练习工具 I ...
- python极简教程05:生成器和匿名函数
测试奇谭,BUG不见. 讲解之前,我先说说我的教程和网上其他教程的区别: 1 我分享的是我在工作中高频使用的场景,是精华内容: 2 我分享的是学习方法,亦或说,是指明你该学哪些.该重点掌握哪些内容: ...
- python极简教程07:封装、多态和继承
测试奇谭,BUG不见. 这一场主讲python的面向对象部分--封装.多态和继承. 目的:掌握Python面向对象的三个核心概念. 封装 01 什么是封装? 封装的目的是,保护隐私.通俗的讲:不想让别 ...
随机推荐
- SWPUCTF 2019 pwn writeup
来做一下以前比赛的题目,下面两个题目都可以在buu复现(感谢赵总). SWPUCTF_2019_login 32位程序,考点是bss段上的格式化字符串.用惯onegadgets了,而对于32位程序来说 ...
- NOAA数据下载方法
NOAA OneStop https://data.noaa.gov/onestop/about NOAA 数据搜索平台,在一个地方同时搜索NOAA的 Geophysical, oceans, coa ...
- LuoguP1723 高手过愚人节 题解
Content 有 \(n\) 次询问,每次询问给定一个字符串 \(s\),求这个字符串最长的回文子串的长度. 数据范围:\(n\) 无解(至少从题面来看是这样的),字符串长度目测应该在 \(10^7 ...
- CF1491A K-th Largest Value 题解
Content 你有一个长度为 \(n\),并且仅包含 \(0/1\) 的数组 \(a\).现在对这个序列做以下两种操作之一共 \(q\) 次: \(1\) \(x\):将 \(a_x\) 修改为 \ ...
- 模块化和webpack模块化打包
模块化和webpack模块化打包: 一.❀ 模块化 [导入import-----导出export] 1.为什么需要模块化? JavaScript 发展初期,代码简单地堆积在一起,只要能顺利地从上往下一 ...
- Android NDK开发篇:如何使用JNI中的global reference和local reference
JNI提供了一些实例和数组类型(jobject.jclass.jstring.jarray等)作为不透明的引用供本地代码使用.本地代码永远不会直接操作引用指向的VM内部的数据内容.要进行这些操作,必须 ...
- 【LeetCode】88. Merge Sorted Array 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 新建数组 日期 题目地址:https://leetc ...
- C. Hongcow Builds A Nation
C. Hongcow Builds A Nation time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- 【操作系统】编程模拟FIFO,LRU,NUR,OPT页面置换算法
#include<stdio.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x) ...
- 基于Spring MVC + Spring + MyBatis的【外包人力资源管理系统】
资源下载:https://download.csdn.net/download/weixin_44893902/45600390 练习点设计:模糊查询.删除.新增 一.语言和环境 实现语言:JAVA语 ...