作为一名资深的QL(Quick Learner),学习一门新的编程语言分分钟不在话下,Python语言,so easy,在经过如此多面向对象语言的洗礼后,接触一下函数式语言(虽然python也有面向对象)也是不错的。
我用的python版本:2.7.11,有最新的3.4
布尔型:大写True,False
逻辑运算:and、or和not
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
print语句:
print语句可以向屏幕上输出指定的文字。比如输出’hello, world’,用代码实现如下:
>>> print 'hello, world'
print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:
>>> print 'The quick brown fox', 'jumps over', 'the lazy dog'
The quick brown fox jumps over the lazy dog
print会依次打印每个字符串,遇到逗号“,”会输出一个空格
print可以打印上面的数据
注释:
Python的注释以 # 开头
变量命名:变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头。
转义字符:
要表示字符串: Bob said "I'm OK".
代码:'Bob said \"I\'m OK\".'
raw字符串
如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。例如:
r'\(~_~)/ \(~_~)/'
多行字符串:
可以用”’…”’表示:
'''Line 1 Line 2 Line 3'''
上面这个字符串的表示方法和下面的是完全一样的:
'Line 1\nLine 2\nLine 3'
对中文支持:
在前面加一个u
u'中文\n日文\n韩文'
当然仍可以组合使用:
ur'''Python的Unicode字符串支持"中文", "日文", "韩文"等多种语言'''
如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释
# -*- coding: utf-8 -*-
目的是告诉Python解释器,用UTF-8编码读取源代码,注意:加了这行语句就不用u了。
list简介:Python内置的一种数据类型列表。list是一种有序的集合,可以随时添加和删除其中的元素
构造list:直接用 [ ] 把list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list:
>>> myList= ['1', '2', '3']
>>> myList# 打印myList变量的内容
['1', '2', '3']
注意:由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型。
访问List:使用索引0开始,注意不要越界。
倒序索引: L[-1]为最后一个元素,-2倒数第二个,依次,注意不要越界。
添加元素:
L.append(xxx)//添加在尾部
L.insert(index, xxx) //添加在index(从0开始)前
删除元素:
L.pop()//删除并返回最后一个元素
L.pop(index)//删除索引为index的元素
替换元素:
L[index] = another//直接将索引为index的重新赋值
tuple简介:另一种有序的列表,和 list 非常类似,但tuple一旦创建完毕,就不能修改了。
表示:
>>> t = ('1', '2', '3')
现在,这个 t 就不能改变了,tuple没有 append()方法,也没有insert()和pop()方法。所以,没法直接往 tuple 中添加和删除元素。
但可以通过索引访问元素。
单元素:
因为用()定义单元素的tuple有歧义((1)会被当成数字1),所以 Python 规定,单元素 tuple 要多加一个逗号“,”:
>>> t = (1,)
>>> print t
(1,)
构造可变的tuple:
t 有 3 个元素:’a’,’b’和一个list:[‘A’, ‘B’],下面代码只是说明我们该变得不是tuple,而是list。
>>> t = ('a', 'b', ['A', 'B'])
>>> L = t[2]
>>> L[0] = 'X'
>>> L[1] = 'Y'
>>> print t
('a', 'b', ['X', 'Y'])
所以:元组和list都是可以相互嵌套的。
我们现在只学习不同的语法:
age = 20
if age >= 18:
print 'your age is', age
print 'adult'
print 'END'
注意: Python根据缩进来确定代码块,具有相同缩进的代码被视为一个代码块。
缩进:据说严格按照Python的习惯写法:4个空格,不要使用Tab,不要混合Tab和空格。(PS:只要记得住,还是可以用tab)
注意:不要忘记冒号。
单个if:
if-else:
if-elif-else:
对于嵌套结构的 if … else …,我们可以用 if …和多个elif … else … 的结构(即 else if):
注意:执行顺序从上到下。
看个例子就行了:
for:
while:
break:
continue:用法都一样
循环嵌套:
简介:一种集合,说白了就是java里的map,键值对,所以它的特点是无论多少个元素,速度都一样快,同时元素是无序的 ,key不能重复,这和hashmap都差不多,还有就是 key 的元素必须不可变,所以key不能用list。
d = {
'jimo': 95,
'love': 85,
'dog': 59
}
print len(d)#求其长度
访问: 通过d[key] 查找对应的 value
注意: key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError
print d['jimo']
print d['cat']
所以一般这么写:
if 'cat' in d:#先判断下
print d['cat']
更新:直接改
d['jimo'] = 70
d['cat'] = 1#若dict里没有,会直接加进去
遍历:
print d
for key in d:
print key,':',d[key]
简介:同样是一个无序不重复的集合。
创建:
s = set(['A', 'B', 'C', 'C'])
print s
访问Set:其实没办法访问,只能做判断:
print 'A' in s
print 'a' in s
遍历set:当然遍历方法和dict类似
应用:
weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])
x = 'MON'
if x in weekdays:
print 'input ok'
else:
print 'input error'
添加删除元素: add,remove
s = set(['A', 'B', 'C', 'C'])
print s
s.add('D')
print s
s.remove('A')
print s
s.remove('A')
print s
可看出:删除不存在的元素会报错。
1.内置函数:
可以在官网查看函数:Functions
不要忘了引用库函数:import math math.cos(angle)
常用函数:
>>> range(1, 101)
[1, 2, 3, ..., 100]
2.自定义函数:
定义一个函数要使用 def 语句,然后是 函数名,参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return
语句返回。
def mysum(L):#求L中每个元素平方的和
return sum([i*i for i in L])
print mysum([1, 2, 3, 4, 5])
3.多个返回值:
def multiParams(x,y):
return x+1,y+1
x,y = multiParams(1,2)
print x,y
r = multiParams(1,2)
print r
4.默认参数:
def defaultParams(x,y=10):
return x*2+y
x = defaultParams(1)
print x
x = defaultParams(1,2)
print x
5.可变参数:
def average(*args):
if len(args)!=0:
return sum(args)*1.0/len(args)
else:
return 0.0
print average()
print average(1, 2)
print average(1, 2, 3, 4)
对于list和tuple都适用:
顺序切片:
L = ['a','b','c','d']
print L[0:3]#从0开始2结束
print L[1:3]
print L[:3]#从头开始0可省略
print L[:]#取所有元素
print L[::2]#第三个参数表示每N个取一个
倒序切片:
print L[-1:-3]
print L[:-4]
print L[-2:]
对字符串切片:
print 'ABCDEFG'[:3]
print 'ABCDEFG'[::2]
上面已经用过迭代。
2.索引迭代enumerate:
L = ['a','b','c','d']
for index,num in enumerate(L):
print index,':',num
for t in enumerate(L):
print t[0],':',t[1]
zip()函数可以把两个 list 变成一个 list:
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
3.迭代Dict:
可看到在Dict那里我们进行了遍历,是通过key获取到value的,现在我们直接获取value:
d = {
'jimo': 95,
'love': 85,
'dog': 59
}
for v in d.values():#values() 方法实际上把一个 dict 转换成了包含 value 的list
print v
for v in d.itervalues():# itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存
print v
4.迭代dict的key和value:
for key,value in d.items():#当然也有iteritems方法
print key,':',value
print d.items()
1.生成列表:
print range(1,11)
print range(1,11,2)
print range(1,11,3)
print [x*x for x in range(1,11)]
#相当于:
L = []
for x in range(1,11):
L.append(x*x)
print L
2.生成HTML表格:
d = {
'jimo': 95,
'love': 85,
'dog': 59
}
#字符串可以通过 % 进行格式化,用指定的参数替代 %s
tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)#字符串的join()方法可以把一个 list 拼接成一个字符串
print '</table>'
3.条件过滤:
print [x*x for x in range(1,11) if x%2==0]
L = ['jimo','love',123,456,'lonely']
print [x.upper() for x in L if isinstance(x,str)]
# isinstance(x, str) 可以判断变量 x 是否是字符串
4.for循环嵌套:
print [x+y for x in 'abc' for y in '123']