python装饰器

python【5】迭代,生成,修饰

不问归期 提交于 2019-12-03 01:49:40
迭代器 迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退。另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比较大的数据集合,节省内存 from collections import Iterator # isinstance() 判断是否是 迭代器# 可以被next()函数不断返还下一个值的被称为迭代器# iter() 可以将 list dict str 编程迭代器 生成器generator 定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器 #!/usr/bin/env python # -*- coding: utf-8 -*- # By Garrett a = [i*2 for i in range(10)] print(a) #

python之带有参数的装饰器

徘徊边缘 提交于 2019-12-03 01:42:11
一个小demo def set_level(level_num): def set_func(func): def call_func(*args, **kwargs): if level_num == 1: print("----权限级别1,验证----") elif level_num == 2: print("----权限级别2,验证----") return func() return call_func return set_func # 带有参数的装饰器装饰过程分为2步: # 1. 调用set_level函数,把1当做实参 # 2. set_level返回一个装饰器的引用,即set_func # 3. 用返回的set_func对test1函数进行装饰(装饰过程与之前一样) @set_level(1) def test1(): print("-----test1---") return "ok" @set_level(2) def test2(): print("-----test2---") return "ok" test1() test2() 来源: https://www.cnblogs.com/GouQ/p/11769698.html

点读系列《流畅的python》

我只是一个虾纸丫 提交于 2019-12-03 00:13:41
第1章 python数据模型 python的写法是由背后的魔法方法实现的,比如obj[key],解释器实际调用的是obj.__getitem__(key) 作者把魔法方法叫做双下方法,因为有两个下划线 collections.namedtuple可以用来创建只有少数属性但没有方法的对象,比如 beer_card = Card('7', 'diamonds') random.choice和random.sample不一样的地方在于,sample是返回序列,choice是返回元素,当使用sample(list, 1)[0]的时候,不如直接使用choice(list) deck[12::13],是指先抽出索引是12的那张牌,然后每向后数13张牌拿一张 实现了__getitem__让对象变得可迭代了 sorted(deck, key=spades_high) python sorted函数 suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) def spades_high(card): rank_value = FrenchDeck.ranks.index(card.rank) return rank_value * len(suit_values) + suit_values[card.suit]

一些面试题总结

匿名 (未验证) 提交于 2019-12-02 23:57:01
合并字典:请合并下面两个字典 a = {"A":1,"B":2},b = {"C":3,"D":4} dict1 = {"A": 1, "B": 2} dict2 = {"C": 3, "D": 4} # 方式一 **表示打散 print({**dict1, **dict2}) # * ** 都表示打散可迭代对象 # 方式二 update方法 dict1.update(dict2) # 合并字典 元组操作:如何把元组 ("a","b") 和元组 (1,2),变为字典 {"a":1,"b":2} # zip的使用 a = ("a", "b") b = (1, 2) print(dict(zip(a, b))) 交换字典的键和值 dict1 = {"A": 1, "B": 2} res = {k: v for v, k in dict1.items()} print(res) 我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢? Python交换两个变量的值 a,b=b,a 这个不是元组解包,在栈的顶端做两个值的交换。 read()/readline()/readlines() with open('test.txt', 'r', encoding='utf-8') as f: text = f.read() print(text) with

Python入门 - 2(真0基础)

匿名 (未验证) 提交于 2019-12-02 22:56:40
一 前言 上一章说了那么多,不知道大家是否有跃跃欲试的冲动。说实话,编程就像英语一样,只是一门语言,如果不用出来,能力会衰退。就像荒岛没人对话,时间长了很可能就不会说话了。如果不能自己写出来,永远就是别人的东西。这就是为什么很多人看了网络上那么多视频都学不会的原因。是的,可能你也正在看,甚至跟着视频将代码敲了下来,但是这些都是别人的。试着问自己一下,关了视频再写一遍,能做到吗?大概率是做不到的。。。怎么办?多写?写到吐?NO!!! base on project的学习计划才是有意义的。盲目多写,或者盲目写重复的内容只能让你记住了一部分的写法,思路不是你的。找一个目标,你喜欢的方向,往那个方向去研究,找那个方向的project去做。举个例子,我喜欢炒股炒外汇,那就去看一些关于量化交易系统的书或者文章,试着写一个自动买卖的小系统。为什么要这样做?因为持久的学习需要满足感,需要自信心。当自己写的程序能跑起来时,那种快感是难以言喻的。当然,无论选择哪个方向,基础还是必须打好的,没有这些基础,根本无法支撑你走得更远,更无法达到你的目标,所以,加油!坚持! 二 三元运算(装13用!!!~~~) 上一章的流程控制,是不是一个if...else...就得分好几行来写,难道就不能有一行写完的表达方式?必须有啊,写出来还特别有逼格。别人几百行实现的功能,几十行就实现了,是不是短小精悍? # 正常写法

Python生成器、装饰器

匿名 (未验证) 提交于 2019-12-02 22:56:40
## 生成器   - 生成器是用来创建Python序列的一个对象   - 通常生成器是为迭代器产生数据的   - 例如range()函数就是一个生成器   - 每次迭代生成器时,它都会记录上一次调用的位置,并返回下一个值,这使程序不需要创建和存储完整的序列 ## 生成器函数   - 生成器函数与普通函数类似,但它的返回值使用yield语句,而不是return 1 def my_range(start=0, last=10, step=1): 2 number = start 3 while number < last: 4 yield number 5 number += step 6 7 my_range # 是一个普通函数 8 # <function my_range at 0x7efe3dbf2e18> 9 10 my_range() # 返回一个生成器对象 11 # <generator object my_range at 0x7efe3daac360> 12 13 list(my_range(1, 10)) 14 # [1, 2, 3, 4, 5, 6, 7, 8, 9] ## 装饰器   - 装饰器的作用在于在不改变原有代码结构的前提下,对原有代码的功能进行补充扩展   - 装饰器的本质上是接受函数为参数的高阶函数

Python学习笔记:Day4 编写Model

匿名 (未验证) 提交于 2019-12-02 22:54:36
最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖子,廖雪峰的课程连接在这里: 廖雪峰 Python的相关介绍,以及它的历史故事和运行机制,可以参见这篇: python介绍 Python的安装可以参见这篇: Python安装 Python的运行模式以及输入输出可以参见这篇: Python IO Python的基础概念介绍,可以参见这篇: Python 基础 Python字符串和编码的介绍,可以参见这篇: Python字符串与编码 Python基本数据结构:list和tuple介绍,可以参见这篇: Python list和tuple Python控制语句介绍:ifelse,可以参见这篇: Python 条件判断 Python控制语句介绍:循环实现,可以参见这篇: Python循环语句 Python数据结构:dict和set介绍 Python数据结构dict和set Python函数相关: Python函数 Python高阶特性: Python高级特性 Python高阶函数: Python高阶函数 Python匿名函数: Python匿名函数 Python装饰器: Python装饰器 Python偏函数: Python偏函数 Python模块:

python小知识-__call__和类装饰器的结合使用

匿名 (未验证) 提交于 2019-12-02 22:54:36
class Decorator(): def __init__ (self, f): print ( ‘ run in init...... ‘ ) self.f = f def __call__ (self, a, b): self.f(a, b) @Decorator # add = Decorator(add) def add(a, b): print ( ‘ a + b: ‘ , a+ b) add( 10, 20) 描述符: 3.__set__,__get__,__delete__都是啥 1). 这3个特殊的函数说实话我学Python的时候都没有用过 ,后来在看一些进阶的书的时候才发现它的妙用! 其实都是Python类里面的描述符概念 ,描述符允许你自定义在引用一个对象属性是应该完成的事情。这3个特殊的方法组合了Python里面的描述法协议: __set__:在设计属性的时候被调用 __get__:在读取属性的时候被调用 __delete__:在删除属性的时候被调用 a=A() a.x >> In __get__ <__main__.A object at 0x10089aa58> <class ‘__main__.A‘> a.x=5 >>In __set__ <__main__.A object at 0x101feba90> 5 对x进行赋值的时候,其实就会被_

Python 装饰器

匿名 (未验证) 提交于 2019-12-02 22:54:36
装饰器:作用就是抽离函数中大量御寒数本身无关的雷同代码并重用。 为存在的对象添加额外的功能 出现''TypError:'NoneType' is not callabale'' 是因没有定义嵌套函数 @其实就是字符输入上了一点, 看起来像装饰器 关于内置的装饰器: staticmethod,classmethod和property(作用:静态方法,类方法,类属性) functools模块 提供的模块: wraps(wrapped[,assigned][,update]): 未完待续! 文章来源: Python 装饰器

Python学习之路26-函数装饰器和闭包

匿名 (未验证) 提交于 2019-12-02 22:54:36
《流畅的Python》笔记。 本篇将从最简单的装饰器开始,逐渐深入到闭包的概念,然后实现参数化装饰器,最后介绍标准库中常用的装饰器。 函数装饰器用于在源代码中“标记”函数,以某种方式增强函数的行为。装饰器就是函数,或者说是可调用对象,它以另一个函数为参数,最后返回一个函数,但这个返回的函数并不一定是原函数。 以下是装饰器最基本的用法: # 代码1 #装饰器用法 @decorate def target () : pass # 上述代码等价于以下代码 def target () : pass target = decorate ( target ) 即,最终的 target 函数是由 decorate(target) 返回的函数。下面这个例子说明了这一点: # 代码2 def deco ( func ) : def inner () : print ( "running inner()" ) return inner @deco def target () : print ( "running target()" ) target () print ( target ) # 结果 running inner () # 输出的是装饰器内部定义的函数的调用结果 < function deco .< locals >. inner at 0x000001AF32547D90 >