2018-07-06-python学习语法篇

一、基础知识

1.数据类型

数据类型主要有整数型(整数连除法都是整数的,用地板除//,浮点数(其实就是小数,这么说是因为小数点是可以浮动的),布尔值(True,False,注意有and,or,not三种运算),字符串(注意Python3中要用单引号或者双引号包括起来,然后转义还是用\符号,然后就是r可以去掉转义作用),空值None(注意不是NULL),然后就是常值一般用全大写表示。

2.字符串编码问题

一开始全世界都是ascii编码,毕竟计算机都是老美发明的,然后由于各国语言输入需要,所以开始变成unicode编码,因为Unicode编码可以将所有语言都编码出来,unicode编码是定长编码(除了极少部分的字符以外),然后这样英文编码就很浪费,所以就改成utf-8编码(变长编码),这样就节省空间,一般Unicode和utf-8之间的关系是这样的:内存中都是Unicode编码,然后当涉及在硬盘中存储以及传输数据的时候就转变为utf-8编码。

图一t


图二

然后再次科普一下utf-8,utf-16,utf-32的区别,utf-8用1-8个字节来编码,utf-16用两个或者四个字节来编码,utf-32用四个字节来编码,所以utf系列并不一定是变长编码。

然后学一下所谓的编码问题,首先是chr函数与ord函数,一个是整数变字符,一个是字符变整数。

然后介绍两个函数,一个是encode,一个是decode,用法是比如'oppo'.encode('utf-8')等。

然后是如果需要把数据转换为数据流的话,我们就需要加个b,例如x=b'oppo'

然后就是如何指定文档使用编码,用法是:#  -*- coding:utf-8  -*-

然后就是格式化字符串的问题,主要和c语言的做法差不多,但提供了一个format函数给你用,很方便,用法是在需要格式化的地方加上{编码,从0开始},然后就是后面要加上.format(),括号里面再加上所谓的需要填的输入就可以了。

3.list和tuple

list是一个有序的数据集合,可以包含不一样的数据类型,常用的方法有append(),insert(),pop(i),替换的话就用二维数组的方法去解决就好了。

然后就是tuple,元组,和list不同的地方在于他初始化以后就不可改变了,这种不可改变指的是我们的指针地址不可改变,而不是内容不可改变,如果tuple里面有list的话,其实list是可以改变的,然后tuple就没有append,insert,pop这些方法了。

4.dict以及set

首先说一下dict,这玩意主要采用哈希表的方法来存储,通过建立索引表达到快速搜索的目的,主要是用空间换时间的一种做法,相对而言的就是我们的list就是一种省内存省空间但是换时间的一种做法,耗时间比较多。

dict要注意初始化定义key以后后面就不能改变key了,主要有get以及pop两种方法。get是用来获取key值的。

set是集合的意思,他有key却没有value,然后没有重复值,拥有add和remove两个方法。

5.函数

常用abs()绝对值,len(),max()等等....然后就是数据类型转换,如int(),str(),float(),bool等。

定义函数的时候就先def,然后接上函数名称,括号,函数参数,冒号,接着缩进写函数体,最后接上return,return的时候可以同时返回多个返回值(其实Python是自动生成一个tuple,然后把多个返回值赋值给tuple,将tuple再返回来的),如果没有返回语句就会返回None,这时候需要我们手动写上pass当占位符。

6.参数

参数一共有五种,位置参数、默认参数、可变参数、关键字参数、命名关键字参数。

位置参数就是和c语言差不多,没啥好说的。

默认参数就是预先在函数头部括号里面给他设置值,然后就可以随意使用了。

可变参数的定义是参数加一个*,然后就可以尽情地使用了。

关键字参数是拥有key的参数,然后定义是使用双**,来定义的,然后可传一个list或者tuple进去就行了。

命名关键字参数是使用时必须传入参数名,如果没有可变参数,就传入一个*当分隔符,如果有了就直接加在可变参数后面定义就行了。

最后是所谓的参数组合,主要要符合一定的顺序,这个顺序是这样的:

先位置参数,然后默认参数,接着可变参数,然后是关键字参数,最后是命名关键字参数。

7.递归和尾递归(一图言掉)


图三

二、高级特性

1.切片:主要是按照一定规律切取目标中的一部分元素出来,主要以对list的切片来举例子,我们先生成range(100),就生成了0到99之间的数字,赋值给L,然后L[0(默认从0开始):100(默认最后一个元素):3(每隔多少个就取一个数字)],然后还可以使用-1来表示倒数的数字,就差不多这样了。

2.迭代:这里迭代指的就是遍历,对于list而言,迭代可以直接通过下标来完成,而对于其他如dictionary类型而言,迭代默认是迭代key,如果你想要迭代value的话,可以通过d.values()来完成,然后就是同时迭代key和values的话,就通过d.items()来完成。

判断一个对象是否是可迭代对象可通过collections中的Iterable类型来判断

图四

接着是如何同时迭代下表和内容呢,答案很简单,就是直接通过enumerate来完成,把list放进该方法再加上for循环迭代体就完成了。

3.列表生成式

主要是用来生成列表的,通过在列表中引进for循环表达式以及if判断式子来达到高效率表达的作用,格式是这样的,[ x(生成什么元素)  for(for语句可用来从别的列表中获取数据)if (if语句主要用来判断) ]

4.生成器

主要是用来解决List存储空间过大的问题,因此用generator来创建生成器对象,生成器保存有list中元素生成的方法,但只有用到的时候才会生成,这样就节省大量空间。生成方法有两种,一种是生成列表的时候(要用列表生成式)将[]改成(),其次是在函数里面将return改成yield,这个有一个作用就是运行的时候用上直接返回数值并停止,下次运行的时候需要从下一句开始运行,然后生成的时候使用生成器对象的形式来生成的!!!

5.迭代器

可直接作用于for循环的对象称为迭代器对象,都是iterable,可以使用isinstance()判断一个对象是否是Iterable对象,但是不一定是iterator对象,生成器才是一个iterator对象,然后就是Iterable对象可以通过iter方法来生成iterator对象。以上!

三:高阶函数

1.map&&reduce&&filter&&sorted

map主要接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到每个列表元素上,并返回iterator上面。

reduce主要将接收到的函数作用在一个序列上面,这个函数必须接收两个输入,reduce将取列表中下一个元素以及上一次的运行结果作为输入,此外,reduce需要从functools引进。

filter函数主要是接收一个列表和一个函数,与map不同的是,他将函数作用在每个序列元素以后,再根据返回值是True或者false来决定留下哪一个元素,进入对序列起到筛选作用。

sorted函数主要接收两个参数,一个是列表,一个是key函数,还可以加个reverse,key函数会作用在列表中每个元素里面再进行排序。

2.几种函数技巧

返回函数,主要是将函数作为返回值来返回,返回以后可以再自己调用执行,这里有一个技巧叫闭包,主要思想是在函数里面再定义函数,这样的话就返回这个函数以后她还可以调用母函数里面的局部值等等,但是要注意他是出来再执行的,因此要注意不能用到会变化的值,如果实在要用的话,那就在函数里面先把它执行了再返回出来。

匿名函数,其实就是lambda表达式,格式是这样的,lambda参数1,2:表达式,大致如此。

装饰器在我理解就是把函数当成变量,然后就是拥有自己的一些属性,例如__name__等,当我们需要定义自己的属性值的时候,就用函数定义起来,然后在需要装饰的函数那里前面加上@装饰函数名就好了。

偏函数呢,其实就是所谓的把函数参数进行一个简化设置默认值的方法,说白了呢,就是通过调用functools这个模块中partial中的方法,来简化参数,他有两个参数,一个放进函数,一个放你想设置的默认值(这里其实可以放多个)。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  • 一、python 变量和数据类型 1.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序...
    绩重KF阅读 1,677评论 0 1
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,566评论 1 118
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,942评论 17 410
  • 购物车是每个商城类的app必备的实现功能,然而购物车模块实现起来并不简单,需要考虑的地方也比较多,当初我实现起来也...
    爱猫的仙生阅读 7,470评论 1 26
  • 之所以写第二轮开启正能量,原因是从一月份进入学习群至今半年过去了,孩子从寒假开始,我学习课程,调节自己和孩子,从未...
    幸福花路阅读 251评论 0 6