Q:告诉我一点关于python的东西,让我对它有个大致的认识?
A:
python是一种动态编程语言(脚本语言),类似的还有PHP,JavaScript。与之相对应的是静态编程语言,比如C语言,Java等。
两种语言最显而易见的区别可能就在于动态语言的语法没有静态语言那么复杂、严格。所以脚本语言的语法学起来很快,写起代码来也很简短。
python适合的领域Web开发(据说豆瓣是Py写的)、数据采集(比如爬虫)、数据分析(众多第三方代码包支持)。
除此之外,除了系统开发和驱动开发(C语言首选),python都能做,但是做起来不太适合。
Q:作为一门编程语言,python都有那些内置的数据类型?
A:
python则不像Java那样有“基本数据类型”。python里的数据类型都被看成对象。
常用的python的数据类型有整数、浮点数、字符串、布尔值等。有别于Java等静态语言,python使用变量前不需要声明。随时赋值使用即可。
boolean isTrue = true //先声明变量isTrue为布尔型,再赋值true
isTrue = True #直接提出一个变量isTrue,赋值为True,解释器会根据变量的值来确定一个变量的类型
除此以外,python还有一些类似Java中数组一样的内置数据结构:列表list、元组tuple、字典dictionary等。
列表就是一个可以批量存数据的容器。列表里的数据一个接一个排成一条线,每一个数据都有一个序号,可以根据这个序号将这个数据在列表中找出来。同一个列表可以存放任何类型的数据。
lst1 = [a, b, c, d, e] #创建一个列表lst1,存放五个变量,类型未知
lst2 = ['a', 'b', 'c', 'd' ,'e'] #创建一个列表lst2, 存放五个字符串
lst3 = [1, 2.1, True, 'ABC', lst1] #创建列表lst3,存放各种变量
print lst1[0] #打印lst1第一个元素
print len(lst1) #打印lst1有多少个元素
lst4 = lst1+lst2 #lst1与lst2首尾相连成一个新列表
lst1.append(f) #在lst1的末尾添加新变量f
lst5 = lst1[0:3] #分片操作产生新列表,内容为lst1第一到第三个元素
#......
元组和列表根本的不同在于列表创建后可以修改,元组不可以修改。除此之外其他操作基本与列表无异。
tup = (a,b,c,d,e) 创建一个元组,存放五个变量,类型未知
列表和元组里的元素都有序号,我们可以用lst[0]或tup[0]来调用。如果我们希望自己给每个放入容器中的数据创建序号(索引),可以使用字典。
dict1 = { 'a':a, 'b':b, 'c':c} #创建字典dict1,其中'a'与a构成一个项,'a'为a的键,a为'a'的值
print dict1['a'] #打印'a'对应的值
print len(dict1) #打印dict1有多少项(键值对)
dict1['d']=d #给键'd'赋值d,若键'd'不存在,则创建这个键在赋值
del dict1['d'] #删除'd'与d这一键值对
字典中的值可以为任何类型的数据,但键的角色有限制:必须是不能变的数据类型。比如数字、字符串、元组等。像列表这种可变的数据类型不能充当字典中的键。
Q:刚才讨论列表时讨论到了分片操作,这是什么鬼?似乎可以把列表分成一片一片提取出来,很厉害的样子?
A:分片操作确实就是把列表分成一片一片,然后提取出来,形成一个新的列表。不仅适合于列表,也适合于元组和字符串这些序列。这是一个很有用的操作。
常见的分片操作有:
lst = [0,1, 2, 3, 4, 5, 6, 7, 8, 9,] #创建列表lst
print lst1 = lst[1 : 3] #输出[1, 2]
print lst2 = lst[ : 3] #输出[0,1,2]
print lst3 = lst[3 : ] #输出[3, 4, 5, 6, 7, 8, 9]
print lst4 = lst[ : ] #输出 [0,1, 2, 3, 4, 5, 6, 7, 8, 9,]
print lst5 = lst[-3 : -1] #输出[7, 8]
print lst6 = lst[2 : -2] #输出[2, 3, 4, 5, 6, 7]
print lst7 = lst[0 : 10 : 2] #输出[0, 2, 4, 6, 8]
list[start :end+1 : step]
分片操作中start是分片的起始序号,不填的话默认是0。end+1是分片操作的终止序号的后一位,默认是列表长度,即最后一号元素的序号加一。也就是说如果填序号6,那么分片只会分到序号5,序号6的元素会留下不被截取到。step则是分片的步长,也就是说隔几个选一个,不填的话默认是1。
虽然演示时用的是列表,但元组和字符串也能进行分片,只是元组分片得到新的元组,字串分片得到新的字串。
Q:字符串也能分片,那是不是和列表、元组一样是一种数据结构啊?
A:
在C语言中,字符串的本质就是字符数组。在Java中,字符串的本质就是经过特殊处理(封装)的字符数组。
初学者可以暂时简单的认为,python中元组是经过特殊处理的列表(一旦创建,不能修改),而字符串是经过特殊处理的元组(元素只能是一个个字符)。
字符串有很多奇葩的操作。
s1 = 'hello'
s2 = "hello"
s3 = '''hello'''
s4 = """hello"""
#s1, s2, s3, s4都是创建一个字符串。s3是三个单引号,s4是三个双引号
考察下面代码:
print '你好'
如果在python2.X中运行上面这一句代码,会报错。python2.X 与 python3.X最大的区别之一在于python3内部默认编码是Unicode,二python2内部默认编码是ASKII。这就造成了python2有事在近视中文操作时出现乱码,比如字符串的操作。
如果希望在python2中成功打印“你好”,就需要先在python文件最开头声明编码方式,然后在带有中文的字符串前添加一个“u”——
#coding:utf-8
print u'你好'
这样中文字符才能在python2中 显示。python3中没有这个顾虑,这届采用前一段的代码即可。
Q:字符串还有那些需要注意的操作?
有编程基础的人都知道字符串内部可以有转义字符存在,比如
print 'Hello, World!' #Hello和World会同行显示
print 'Hello, \n World!' #Hello和World会分行显示`
原因就是""是一个转义号,\n在字符串里是换行符的意思。所以如果某个字符串自身本来就有""存在,就需要再转义,用"\"表示""。
懒惰与不耐烦是程序员的美德,如此麻烦的操作,怎么忍?
python提供了一种简洁的操作:原是字符串。只需在字符串前加上"r",那这个字符串里任何转义或者格式化等符号都将无效,字符串将呈现其原本的面貌。
str1 = r'C:\programfile\python\pythonfiles\hello.py'
str2 = ur'我的电脑C:\programfile\python\pythonfiles\hello.py'
另一个值得关注的字符串操作——字符串格式化。有事由于某些行业内部要求或者说整个团队一起工作需要所有人遵守一些规范来确保交流时不出差错,我们需要对字符串内一些内容做格式化(不是磁盘格式化那种~)
字符串格式化要用到符号"%"。在字符串中某些数字、标准名称等用%d、%s、%f等来表示,在字符串后再写上一个"%"符号,然后写上被替换的内容。
如果看不懂上面那抽象无比的文字,最好看看下面的例子。
一个很简单的例子——
print 'I am %f meters tall.' % 1.70 # %f 是指十进制浮点数(小数),默认八个字段长度
print '%d plus %d equals %d' %(1, 1, 2) # %d 是指十进制整数
print 'The revenue this month is %10.2f' % 12759.25734 # %f10.2 是指十进制浮点数,10个字段长度,小数点后保留2位小数。
#输出
#I am 1.720000 meters tall.
#1 plus 1 equals 2
#The revenue this month is 12759.26
字符串还有很多重要的操作,另外它本身也自带许多有用的方法,这个需要我们慢慢去积累。
2016-10-7