Python入门问答录(一)

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

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

推荐阅读更多精彩内容