干货来了!python学习之重难点整理合辑1
关于装饰器、lambda、鸭子类型、魔法函数的理解仍存有困惑之处,趁周末有时间温故,赶紧去自学了解下相关知识。
1.装饰器是什么:
很多初学者在接触装饰器的时候只做到了肤浅的了解它的概念、组成形态。实际上装饰器是python学习中很难啃的大骨头,一旦涉及到具体用途以及原理,经常会把人绕晕。
在这里,我们需要明确的一点是:装饰器并不是加速器。装饰器的作用仅仅是为了封装一个函数,使其增加原有的函数功能,却不改变其调用方式。
而装饰器往往需要具有三大要素:1把想加入的函数C作为参数传入函数A 2.在函数A里面嵌套一个函数B,并在B函数里面调用函数C 3.在函数A里面把函数B作为返回值返回
具体结构: def A(C):
def B():
C()
return B
@A
def foo():
cdsvhoush
foo()
像这样直接调用foo函数,实际上就是把foo作为参数传入了装饰函数A中,实现函数功能更好的复用。而把函数作为参数使用是python特有的一种用法。
2.在类中使用装饰器:
装饰器不仅可以是函数,还可以是类,相比函数装饰器,类装饰器具有灵活度大、高内聚、封装性等优点。
。。。
3.有关lambda函数的用法
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。
如下,是lambda函数中的一个常见用法。先忽略下一行不看,光看上一行是不是觉得难以理解?其实,lambda只是一个表达式,函数体比define简单很多。下一行用刚刚命名的f来调用lambda的时候,是不是现在就觉得亲切不少?
lambda x,y:x-y ————lambda后面的内容是输入值,:后的含义是进行的运算规则及返回值。 lambda是可以赋值给一个变量的
4. 将lambda函数作为参数传递给其他函数。(注:lambda的常见高能用法,以下是本人在CSDN上摘抄大佬所整理的部分)
部分Python内置函数接收函数作为参数。典型的此类内置函数有这些。
(1)filter函数。此时lambda函数用于指定过滤列表元素的条件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。
(2)sorted函数。此时lambda函数用于指定对列表中所有元素进行排序的准则。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。
##我们做过的学生信息查询系统的排序功能时就用到了sorted方法,里面就调用了lambda函数!!
(3)map函数。此时lambda函数用于指定对列表中每一个元素的共同操作。例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。
(4)reduce函数。此时lambda函数用于指定列表中两两相邻元素的结合条件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。
5.鸭子类型 :
首先,让我们先回顾一下多态是什么:
当同一个变量在调用同一个方法时,完全可能呈现出多种行为(具体呈现出哪种行为由该变量所引用的对象来决定),这就是所谓的多态(Polymorphism)。
“鸭子类型”的语言是这么推断的:一只鸟走起来像鸭子、游起泳来像鸭子、叫起来也像鸭子,那它就可以被当做鸭子。也就是说,它不关注对象的类型,而是关注对象具有的行为(方法)。
魔法函数:
先来介绍几个python常用魔法函数。
1、__init__():
所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对象属性就不会被初始化,虽然我们仍然可以对其进行赋值
2、__str__():
直接打印对象的实现方法,__str__是被print函数调用的,一般都是return一个什么东西,这个东西应该是以字符串的形式表现的。如果不是要用str()函数转换,我们可以直接print的对象都是实现了__str__这个方法的,比如dict
3、__new__():
在object类中存在一个静态的__new__(cls, *args, **kwargs
)方法,该方法需要传递一个参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供,__new__方法必须有返回值,且返回的是被实例化的实例,只有在该实例返回后才会调用__init__来进行初始化,初始化所用的实例就是__new__返回的结果,也就可以认为是self。
4、__hasattr__(对象,“字符串”):
判断对象中是否存在字符串中名字的方法,返回值为False或True。
5、__getattr__(对象,“字符串”):
得到对象中对应字符串中名字的方法(前提是经上述hasattr判断,要先存在这样的方法,才可得到)
6、__setattr__(对象,“字符串”,。。):
把对象的属性值赋给a = __setattr__(...,...,...)
好,现在知识点回顾完毕,现在是第三周的编程刚刚结束,说一下我近期的感受吧。
刚学完基础语法的时候,发现解决每个问题的难点都在于:把之前固有的解决问题的思路转化为编程语言来描述。也许这是每个初学一门语言的人都要经历的过程,但后来我发现,知识都是死的,但具体怎么解决,是要靠强大的逻辑去支撑的。还有就是,要学会经常复盘。对于做过的每道题题,解决的每个项目,当时觉得做出来很轻松,但当敲过更多的代码,学过更多的知识过后,你需要去思考:我还可以有更好的办法让这个程序代码行数更少。在学完面向对象以后,我个人的强大感受是:整个世界的运转都离不开类和对象。每个实例的不同表现形式是面向对象的多态性、子类就是父类、但是子类可以实现自己定义的多种功能...更神奇的还有,如何把之前做过的每道题用“类和对象”的思路去完成。其实,处理一个问题、或者是大的项目,难点就在于其设计思路的复杂、多样性。解决一个问题之前,应该首先思考的是它的数据存放类型、数据处理模型,一定要首先先思考它的可行性,再去进一步搭框架(不然的话世界上就没那么多程序员想揍产品经理了),之前在做数独这个项目的时候,说句实话我的大脑一片空白。直到老师指导我,细化的告诉我这些数据该怎么存放,具体程序执行的大致流程,我的思路才清晰了一些,才得以独立完成这个项目。
俗话说,师傅领进门,修行在个人,别人只能帮你解决一个小bug,不可能一直帮你。如何做到活学活用,则要看你敲过的代码行数、你解决过的问题、你自己实现出来的每个项目。当然,积累的越多,收获越大。如何打破自己原有的世界观,进入新的代码天地,需要走上一阵子了。
实现很容易,设计可一点儿都不简单,因为只有实现过的人才懂得如何去设计,以及这样做可不可以。所以我的建议是,对于初学者,不要每道题解不出就哭爹喊娘不干了,一定要坚持独立思考这个过程,直到实在想不出再去求助别人,不为别的,只有这样做才会有效果。世界上绝大多数难题都是举一反三,老话说,就是“照葫芦画瓢”。同样的南墙,先撞一次,下次再遇到就是老朋友了。我无法描述独立解决一道问题的快感,我只知道,看不见报错提示、也没有逻辑错误的程序跑出来的那一瞬间,我坐在电脑前的5个小时、8个小时、甚至15个小时都值得,仅仅因为:这些知识已经变成我的武器了。
最后一句话送给像娜娜酱1999一样迷茫的人:学而不思则罔,思而不学则殆。最坏的结果不过是大器晚成。❤
(整理不易,请各位客官点个赞再走呗(#^.^#))
干货来了!python学习之重难点整理合辑1的更多相关文章
- Python学习的个人笔记(基础语法)
Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...
- 灵魂画手的零基础python教程1:关于Python学习的误区、python的优缺点、前景
滴~ 近段时间,因为工作项目的原因,阿菌要重拾起python这门语言了,所以顺势写一门python教程,精心的编排,配上漫画和视频,希望能帮助更多想接触编程的同学入门,课程将从基础语法开始讲起,和大家 ...
- 大学四年的Python学习笔记分享之一,内容整理的比较多与仔细
翻到以前在大学坚持记录的Python学习笔记,花了一天的时间整理出来,整理时不经回忆起大学的时光,一眨眼几年就过去了,现在还在上学的你们,一定要珍惜现在,有个充实的校园生活.希望这次的分享对于你们有学 ...
- Python 学习之路 (一):基础
数据类型和变量 整数 在Python3中,整数可以处理任意大小的整数,不分长整型和整型, 十六进制用0x开头或者H结尾表示:0x2af ,2afH 用函数 int() 来转换字符串中的数字,里面不能包 ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- coursera python 学习总结
为啥要写这篇总结?早上突然想到了四个字:知行合一.实践,总结,再实践,再总结经验,积累经验,为己所用.闲话少叙,来干货: 1.目标要单一,如果想要完成课程,还要健身,还要玩玩游戏.看看电影,还学别的课 ...
- 《码农周刊》干货精选(Python 篇)
<码农周刊>已经累计发送了 38 期,我们将干货内容进行了精选.此为 Python 篇. <码农周刊>往期回顾:http://weekly.manong.io/issues/ ...
- [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …
[Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...
随机推荐
- SSM(六)JDK动态代理和Cglib动态代理
1.Cglib动态代理 目标类: package cn.happy.proxy.cglib; public class Service { public Service() { System.out. ...
- RabbitMq-安装篇
嘿,大家好,今天更新的内容是rabbitMq的安装篇~~ windows下安装rabbitMq rabbitMq下载地址:点我下载 1.由于rabbitMq用erlang语言开发,所以安装rabbit ...
- mysql报错(Not unique table/alias)
Not unique table/alias 错误编号:1066 问题分析: SQL 语句中出现了非唯一的表或别名. 解决方法: 1.请检查出现问题位置的 SQL 语句中是否使用了相同的表名,或是定义 ...
- Codeforces 730A:Toda 2(multiset模拟)
http://codeforces.com/problemset/problem/730/A 题意:有n个人打天梯,想让这n个人的分数相同,每场比赛必须有2-5个人参赛,参赛的人会降低一分,问一个合理 ...
- 20152016-acmicpc-neerc-northern-subregional-contest J:Journey to the "The World's Start"(单调队列+DP+二分)
http://codeforces.com/gym/100801/attachments 题意:给出n-1张不同的票,票价分别为 pi,每张票每次最多可以坐 r 个站(1<=r<n),并且 ...
- jsp传值
是由a1.jsp发出请求然后由a2.jsp转发给ok.jsp,由ok.jsp响应a1.jsp. 但是这个转发过程是在服务端发生的,客户端不知道所以地址是不变的 转发请求的代码: request.get ...
- web前端css(一)
一 css的引入方式: 1) 行内样式: <p style=”color: green”>我是一个段落</p> 2) 内接样式: <style ty ...
- scrapy基础知识之 CrawlSpiders:
通过下面的命令可以快速创建 CrawlSpider模板 的代码: scrapy genspider -t crawl spidername xx.com LinkExtractors class sc ...
- 微信小程序支付以及微信退款开发
最近公司项目急着测试,需要开发微信小程序+微信支付+微信退款,本着这几天的一些研究,决定记录一下开发的过程. 本着知识分享的原则,希望对大家有所帮助. 本篇针对的是微信小程序的支付开发,如果有对微信公 ...
- Java学习笔记之---内部类
Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...