标签归档:Python

python基础4-列表操作

上篇我们学习了python的字符串类型,了解了字符串的不变性,今天我们接着学习新的数据类型-列表,列表也是序列式的数据类型,跟字符串一样,支持下标和切片操作,但列表跟字符串不同的是它是可变类型,就是它是可以改变的,这个数据类型在后续我们编程中用的非常的多,比如将读出的IP放到列表中,然后读取执行,这些后续我们写实际脚本时再说,我们先从最基础的,如何创建列表开始:

1、创建列表方式,一种是用[],一种是用list()函数,这二种方法都可以创建一个列表,如下:

如果[]里什么都没有,就创建了一个空列表,在列表里的内容称为列表元素,元素类型可以使python支持的标准类型。

2、列表的元素数据访问,刚开始我们也说了,列表是序列类型,所以它支持切片和下标的访问,例子如下:

因为这个跟字符串操作非常类似,所以我们不在多说。

3、列表操作函数

关于列表的操作有很多的方便可用的函数,这里我们跟字符串一样,也挑一些比较常用的来举例说明下,其它函数如果后续用到我们再说。

append()函数: 作用是添加列表的元素在尾部,接收一个参数,然后将改元素加入列表的尾部,举例如下:

extend()函数:作用是扩展一个列表,这个函数类似把两个列表相加,例如:

remove() : 作用根据指定的值删除一个元素,当列表元素被删除后,位于它后面的元素自动迁移,然后列表长度减一,举例:

pop():这个函数会返回指定下标位置的元素,如果不给指定下标,它默认使用-1,例如pop(0)返回列表的头元素,pop()返回列表的尾部元素,但这个函数在获取后就会自动将这个元素在列表中删除,例如:

如果这个函数不带参数会比较有意思,因为它跟append()函数的作用相反,一个是从尾部加,一个是从尾部减,这个结构就是大学数据结构课程中的-栈,即后进先出,可以假设有个空列表,运行append()就是压栈的操作,pop()就是出栈的操作,那如果加入下标0,即pop(0),那这样列表就形成了一个队列,跟去公园买票排队一样,先进来的先出去,即先进先出,这也是一种队列方式,这两种方式在后续编程中非常有用,如果后续我们有用到,我们会详细说。

count()函数用来统计列表中元素的重复个数,如果我们生成了一个列表,想要获取某元素在列表中出现的次数,可以用这个函数,例如:

len()函数,跟字符串的len函数功能一样,返回列表的长度,这个比较简单就不多说了。

基本函数我们就说讲这么多,后续有特殊的我们详细再谈,接下来我们说一下列表的一些关系操作

4、列表关系操作,in, not in

关系操作就是检查判断一个对象是不是一个列表的成员,如果存在返回True, 否则返回False, 一般常用与条件语句中,例如:

具体的条件语句我们后续会单独详细说,在这里就不展开了,这种关系操作后续编程中也非常有用。

5、列表转字符串操作

在日常处理列表中,有一个比较常见的操作就是要求将一个列表转成一个字符串,这里我们可以用join()函数实现,例如:

6、列表解析,这部分内容我们在讲循环的语句的时候会单独说,它在编程中也比较常用,这个功能可以让我们动态的生成列表。

写到这我们也基本把列表也说完了,除了这些数据类型,理解python的赋值语句(等于号)也非常关键,在最后我给出一个例子,请大家一起理解下这些语句的意义,如果有问题可以留言交流。

关于列表的学习就到这里,欢迎大家留言交流,如果觉得还不错,请帮忙转发。

python基础3-字符串操作(2)

这篇我们接上一篇把字符串类型没有说的完的接着说完,我们先说字符串的不变性,在Python中字符串类型是一种不可变的数据类型,就是说它的值不能被改变或修改,那什么意思呢,就是我们如果要想修改一个字符串就只能通过生成一个新字符串的方式来操作,也许有的小伙伴会说,不是呀,字符串是能修改的呀,比如这个例子:

这看起来像是字符串可变,但实际上在Python内部自动为你创建了一个新的字符串,这2个语句是赋值语句,后者覆盖了前者,那你可能会问,那字符串的不变性体现在哪里呢?我们接着看下一个例子:

目前看没什么问题,我们都可以理解,下面我修改foo的值,在输出ba的值:

结果跟你想的一样吗?是不有人说,应该输出"hanging on in spam”才对呀,因为我重新给foo赋值了呀, 抱歉,即使你跟foo重新赋了值,但ba的值仍然不变,因为ba是一个新的字符串,这就是字符串的不变性,它一旦被创建就不再改变。

关于字符不变性我们就说到这里,接下来我们开始了解一些字符串内建操作函数,因为字符串内建函数非常的多,我不可能全部写出来,所以就挑了一些相对比较常用的来说了:

1、len():这个最简单,统计字符床长度的(包括空格),一般用于我们条件判断中,比如我们看下ba的长度:

2、strip():这个函数用来去掉字符串左右空格,这个函数比较有用,一般我们从文本中读出来的字符都要先strip(),确保它没带特殊字符,除了strip(),还有lstrip(),rstrip(),就是去掉字符串的左空格和有空格,如下:

3、join(seq):这个函数用来把一个序列的元素合并成一个新的字符串,比如我们要将一个列表中的元素合并成一个字符串,关于列表数据类型我们下篇会说,例子如下:

4、split(seq,num):这个函数用来把字符串分割成一个列表,其中seq是分隔符,num是分割的次数(可省),例如:

5、replace(s1,s2,num): 这个函数需要三个参数,num参数非必须,s1将会替换成s2, 这个在做字符串替换时非常有用,例如:

6、encode(encoding,errors):字符串的编码,这个函数让我们轻松应对字符串的编码问题,其中encoding可以有很多中,例如常见的有gb2312 gbk gb18030 bz2 zlib big5 bzse64等,最场景的应用就是在写入文件之前统一将字符串编码格式进行转换为utf-8类型,然后写入文件中:

7、startswith(s,start,end):这个函数判断字符串的开头是否以s开始,如果是返回True,否则返回False,记住这个函数返回的是一个bool值,不是返回字符串,你要实现类似shell中的grep功能,就需要自己加个判断,然后print输出,例如:

想对于的还有endswith,用法基本类似,就不在举例了。

关于字符串的内建函数部门就暂时说这么多吧,后续如果有用到其它函数我们单独在说,最后我再强调一下,python中字符串对象是不可改变的,我们一旦创建一个字符串后,我们在上面用任何函数的改变都会返回一个新的字符串,原串并没有变,所以在日后的编程中要注意这一点。

写在最后:码字不易,如果觉得不错,还请大家帮忙转发。

 

 

python基础3-字符串操作

上一篇我们介绍了Python的安装和基本的数字类型,从这篇开始我们学习几个python核心的序列类型,我们先从字符串开始,在开始前我先给大家纠正关于编程学习的一个误区,就是可能很多人认为程序员非常擅长数学,数学不好的人估计很难学好编程,所以有的人还没开始就放弃了,就我个人感觉,数学肯定是很重要,但没有到离开数学就无法编程的地步,当然这是我的想法,所以为了验证我自己的想法,我特意采访了我们公司大概10几位程序员,他们编程经历最小的2年,最长的大概有10年,其中还有一位数学本科生,他们给出的答案基本相似,包括那位数据专业毕业的同事,说他们现在编程根本用不到什么数学知识,编程内容主要还是处理业务逻辑,所以基本可以看出,学好数学不是学好编程的必要条件,但编程需要逻辑思维,那什么是逻辑思维?说白了就是做事的先后顺序,这个我们每个人都会,比如你有5件事要从,编号从1到5,最简单的一种是你从第一件事开始一个一个做,做完这5件事,但有时候并不能按照我们意愿来,比如你完成了第一件事,突然来个电话,你不得不放弃做现在的事,等接完电话在继续,又或者某件事跟另一件事有某种关联,你不得不完成第三件事才能继续第二件事,总之就是事件完成要有先有后,并能等待某个事件处理完毕后继续进行处理,这就是编程中的逻辑,好吧说了这么多解释这件事就是希望每个人不要轻易放弃,大胆学习编程吧,它没有你想想的难,每个人都可以学会。

上一段我们花了大段篇幅解释了数学和编程的关系,那既然日常编程中碰不到大量的数学问题,那都在处理什么,这就要到我们的正题了,没错,大部分程序员编程中都在处理字符串,在Python中操作字符串非常的方便,让我们开始:

1、单引号,双引号,三引号字符串

在Python中我们可能看到对字符串有的人用双引号来括起来,有的用单引号括起来,他们有什么不同吗?答案是它们没有区别,那为什么要用到双引号呢,因为如果一个字符串中已经有单引号了,在最外层就必须要用双引号,否则就会报错,如下:

那三引号的作用是做什么的呢?三引号是用来解决如果一行很长,而且里面又包括一些特殊字符比如换行符等,这时候就用到三引号了,比如:

2、字符串的转义、拼接、复制

python中的转义最好理解,它跟shell下一样,就是在字符前加\就可以转义一个字符,比如\n就是回车换行,\t就是制表符,如果一个字符串中有单引号或双引号或者\都可以进行转义,如下:

在Python下字符串拼接是用+号符操作的,非常直观,例如:

字符串的复制也非常简单,可以通过*操作符,例如复制20个#符:

3、字符串切片

切片操作是字符串的重要特性,在字符串 后面加入[]就可以提取该位置的单个字符,如果顺序是从左到右,记住第一个字符是从0开始,如果是从右到左从-1开始,如下:

除了获取单个字符,我们还可以用更复杂的方式获取一段字符,操作格式是[开始:结束:步长],这三个参数没有严格要求必须同时存在,但如果要获取某段字符至少要有开始或结束,如果都不写就是获取整个字符串内容了,如下:

4、字符串格式化

字符串格式化就是对字符输出时处理,类似C语言的 printf()函数,打印出字符,以下是Python格式化符号表:

   符   号    说     明
     %c    格式化字符及其ASCII码
     %s    格式化字符串
     %d    格式化整数
     %o    格式化无符号八进制数
     %x    格式化无符号十六进制数
     %X    格式化无符号十六进制数(大写)
     %f    格式化定点数,可指定小数点后的精度
     %e    用科学计数法格式化定点数
     %E    作用同%e,用科学计数法格式化定点数
     %g    根据值的大小决定使用%f活%e
     %G    作用同%g,根据值的大小决定使用%f或者%E

 

最简单的格式化例子如下:

如果要打印指定点数可以用%f,保留小数点后二位,如下:

从Python2.6版本开始字符串格式化增加了format方法进行格式化,它的格式没有了%,用{}来替代,如下:

用format的好处是后面的参数可以不按顺序,如我们的例子,name在前或在后对输出没有影响,另外还要记住就是在Python2.6的版本{}里的内容不能为空,2.7的版本可以支持为空:

所以有时候你下载一些模块安装不上,如果出现这个format错误,就表示你目前系统的版本比较低,你要做的要么升级当前版本,要么修改下源代码就可以通过,我是之前碰到过几次。

关于字符串的内容我本来打算分一次写完的,发现内容实在太多,所以就只能分2次写了,字符串的内容我们还有内建函数和字符串特性没有说,下次我们继续。

python基础2-安装、基本语法和数据类型

上一篇我们已经介绍完了python的一些语言特性,从这篇开始我们将要进入正式的Python语言学习中了,这篇主要涉及的内容有:

1、python安装

2、python解释器介绍

3、基本语法

4、python的数据类型

1、安装:

我们从安装说起,可能有的小伙伴认为这个太简单了,不需要提了,但因为这是最基础的教程,所以这部分我思来想去还是加上,因为linux本身都已自带Python,所以关于Linux下的安装就不做过多的介绍,后期我们我会专门写一篇关于在linux下的虚拟环境配置,这次主要是windows安装,打开浏览器,输入Python官网地址:https://www.python.org/ 我们将进入如下页面,点击donloads,会出现选版本的界面,截图如下:

install

注意这里有二个版本可供选择,可以根据自己情况选择,在入门基础阶段差别不大,除了print,因为可能大部分小伙伴是做运维的,所以后续脚本类的代码我会选择在centos7系统下运行,centos7默认的是2.7版本,不过大家也不用担心,它们差别没大家想想的大(对运维来说),不要太纠结版本的选择,重要的是尽快学起来,如果在版本上都能纠结个半年,这时间浪费的就太可惜了,下载完成后,双击运行,下一步就可以了,基本上是傻瓜式是安装,但安装好后需要设置环境变量,设置环境变量的截图如下:

201209201707594792

设置完环境变量后,打开cmd窗口,输入python就进入了python交互式解释器中,那安装就到这里了,接下来我们说说python交互解释器的用途。

2、python交互式解释器

在CMD命令行下输入python或在Linux终端下输入python就会进入交换式解释器,使用非常简单

这就是最基本运行环境, 大家可别小瞧了这个解释器的功能,Python之所以容易上手,很大一部分原因我认为是因为有它,尤其我们运维小伙伴最喜欢,因为这个功能跟Linux下shell非常相似,想想我们怎么写shell脚本的,对于一些特别不确定的shell命令,我们会选择在终端运行没问题后在加入shell脚文件中,写python脚本也一样,如果不确定的语句可以在解释器中运行完后确保获得是自己想要的结果,然后在放入我们的代码中,所以它是一个非常好的协助我们调试的工具,我身边写python有超过二年的程序员在调试一些代码时也会选择在解释器下进行,所以后续充分利用好这个工具。

3、python基本语法

3.1

稍微知道python的人都应该知道,Python代码的风格是缩进模式,请看例子:

大家看这段简单的代码,Python代码中没有括号,对于条件语句、循环语句或类语句后要加分号(:),然后下一个语句缩进。,就这一个缩进格式不知道阻挡了多少人想学python确望而却步,这主要是大家从大学学的C语言开始就是带括号的,所以突然不带括号了,会不习惯,尤其我们运维经常写shell脚本,转到python下会发现有很多限制,刚开始会痛苦不堪,但这就是python的风格, 它就是靠缩进来控制类,函数和其它逻辑的刚开始肯定会有一个过程,但你一旦熟悉了,就会发现python写出来的代码是如此简洁,所以在大家刚看开始的写Python的时候,出现错误最多的应该就是:

python缩进错误和缩进方式不一致,那为了避免这个问题,我们就应该统一缩进模式,对于缩进用tab还是空格我看网上也是一个很大的争论,我觉得真没必要,在我们的教程里我建议大家采用4个空格作为统一的缩进格式。

3.2 基本语句和表达式

这部分内容太多,后续我们用在做详细介绍,在这只举几个简单例子,大家熟悉就行,还有就是变量是大小写敏感的。

 

3.2 注释和多行语句

python的注释和多行跟shell脚本一样,这个我就不多说了,在语句前加#就注释,如果语句太长就用\来换行,如下:

四、python数据类型

python的变量类型有以下几种,分别是:

  • boolean    #bool = True
  • integer      #age = 26
  • long         #999999999l, python表达的数值跟机器支持的虚拟内存大小有关
  • float         #pi = 3.14159
  • string      #name = “mingd.cn”
  • list          #[a,b,c,d]
  • Tuple     #(a,b,c,d)
  • Dictionary #{‘a':1, ‘b':2, ‘c':3}

这里边布尔类型最容易理解,True 或False, 关于数字类型我这里就不在多介绍了,在实际编程中运维用的不是太多,如果后续我们遇到了我们单独说,我们重点放到字符串,列表、元组和字典这几个数据类型,这些我们将在下一篇分别重点介绍,请小伙伴持续关注。

python基础1-python语言介绍

从这周起我们正式进入Python基础的学习,那在正式进入学习之前,我们先看下python能沟通做什么,以及学完python我们能干嘛?

python是什么,我们还是直接看度娘好了:

Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python是纯粹的自由软件源代码解释器CPython遵循 GPL(GNU General Public License)协议[2]  。
Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中[3]  有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

从这一段中我们可以了解到,第一Python是一个解释型语言,什么是解释型语言呢?简单给大家介绍下,实际上我们用任何一门高级语言写出的程序,机器是无法识别的,因为机器只知道0和1,那怎么能让机器理解我们写的程序呢,这就需要把我们写的程序翻译能机器能理解的语言,那翻译的过程有二种,一种就是解释,一种就是编译,编译就是程序在运行前前把代码编译成机器能运行的文件,例如.exe文件,而解释型就不一样,解释型语言写完就可以运行,不需要编译,它在运行的时候才翻译,那么写到这问题就来了,就是因为解释型语言在执行的时候才翻译,而编译型语言在执行是已经不需要翻译了,所以解释型语言在运行速度会慢,比如Python写的C写的同一个功能,C运行速度要快很多,不过大家也不用担心,这今年随着硬件的提示,它们直接的差别也越来越小,尤其现在的服务器配置动不动就是E5-26XX,32G,运行个脚本根本不是个事儿,当然为提示效率,Python在每次运行也会生成.pyc的文件,这个是python的字节码文件,就是编译后的文件,如果再次运行相同程序,效率会提示很多。

说完python特性,我们再来看看python都能干嘛,简单说啥都能干,也许大家都听说过一句话:人生苦短,我用python.因为Python有大量的模块库,所以它基本能你能想到的它基本都可以做,另外构建新的项目还非常快,在这里其它我不多说了,我还是要讲讲运维,在Python流行之前,我们运维基本采用shell+aws+sed组合来完成自动化运维,在后来随着运维自动化平台的发展,我们都开始研究怎么做自动化平台,但在哪个时候是没有特别合适做运维自动化平台的语言,所以php在那个时候基本成了运维工程师的选择,比如我之前就是写php的,所以如果你看到有用Php实现运维报警的脚本也不必惊讶,我们现在的服务器上老的报警脚本就是Php写的,然后大家都知道了,就是Python来了,有时候我在想,真的要感谢python,因为Python让我们运维可以提升到一个更高的层次,运维具备研发能力,我觉得这才是真正运维的方向,因为不到研发层面,靠之前老模式的运维方式比如每天敲些基本命令和配置搭建某个服务器或者写几个自动化脚本时很难让一个公司的运维水平得到一个质提升的。

最后给大家看一个图,这个是最新的tiobe的编程排行,包括行2016年和2017年的对比,python始终保持在前名,可见Python的流行程度,所以尽快加入学习吧,这篇就到这里,下篇我们开始将Python的基本语法和基本的数据类型。

102243_dhtb_2903254