Python的语法整体感觉与Swift还是很相似的。下面是学习过程中作的一些笔记,也算是迅速入门的教程了。
#Python默认不支持UTF-8,解决办法:
第一种:
#!/usr/bin/python
#coding:utf-8
print “你好吗”
第二种:
#!/usr/bin/python
#-*-coding:utf-8 -*-
print “你好吗”
第三种:
#!/usr/bin/python
#vim: set fileencoding:utf-8
print “你好吗”
#逗号(,)有链接字符串作用并加空格
print ‘hello, python’ #输出hello, python
print ‘hello,’, ‘python’ #同上
#Unicode字符串输出
print u’中文’ #输出:中文
数学运算结果和运算值的类型一样,如:
print 2.5 + 10 / 4 #==>4.5
print 2.5 + 10.0 / 4 #==>5.0
#逻辑运算
and or not 与或非
Python把0、空字符串”和None看成 False,其他数值和非空字符串都看成 True
#list类型
L = [‘Adam’, 95.5, ‘Lisa’, 85, ‘Bart’, 59]
print L #==>[‘Adam’, 95.5, ‘Lisa’, 85, ‘Bart’, 59]
print L[0] #==>Adam
print L[-1] #==>59 此为倒序访问
L.append(‘Paul’) #==> 添加元素
L.insert(0, ‘ABC’) #==>在第一个元素位置添加元素
L.pop() #==>总是删除最后一个元素
L.pop(2) #==>删除索引值为2的值
L[2] = ‘Paul’ #==>替换索引值为2的值
L[-1] = ‘Paul’ #==>替换索引值为-1的值
#tuple元组
创建tuple和创建list唯一不同之处是用()替代了[],tuple没有 append()方法,也没有insert()和pop()方法
t = (‘a’, ‘b’, [‘A’, ‘B’]) #此元组内的list内的值是可以改变的。
L = t[2]
L[0] = ‘X’
L[1] = ‘Y’
#条件判断
age = 20
if age >= 18:
print ‘your age is’, age
print ‘adult’
print ‘END’
注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。
缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
注意: if 语句后接表达式,然后用:表示代码块开始。
if age >= 18:
print ‘adult’
else:
print ‘teenager’
#else if结构
if age >= 18:
print ‘adult’
elif age >= 6:
print ‘teenager’
elif age >= 3:
print ‘kid’
else:
print ‘baby’
#循环语句
for循环示例:
L = [‘Adam’, ‘Lisa’, ‘Bart’]
for name in L:
print name
while循环示例:
N = 10
x = 0
while x < N:
print x
x = x + 1
break,continue与其他语言语义相同
#dict 类似于Java中得Map
花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
d = {
‘Adam’: 95,
‘Lisa’: 85,
‘Bart’: 59
}
由于dict也是集合,len() 函数可以计算任意集合的大小:
>>> len(d) #==>3
可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key
注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符:
if ‘Paul’ in d:
print d[‘Paul’]
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None
1.dict的第一个特点是查找速度快。由于dict是按 key 查找,所以,在一个dict中,key不能重复。
2.dict的第二个特点就是存储的key-value序对是没有顺序的!
3.dict的第三个特点是作为 key 的元素必须不可变。
赋值语句:>>> d[‘Paul’] = 72
如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value。
直接使用for循环可以遍历 dict 的 key。
#set类型 同Java中Set
set持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的。
s = set([‘A’, ‘B’, ‘C’])
>>> ‘A’ in s
True
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
最后,set存储的元素也是没有顺序的。
同样可以用for语句循环。
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])
如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了。
删除set中的元素时,用set的remove()方法。如果删除的元素不存在set中,remove()会报错。
所以用add()可以直接添加,而remove()前需要判断。
#函数
比较函数 cmp(x, y) 就需要两个参数,如果 x<y,返回 -1,如果 x==y,返回 0,如果 x>y,返回 1
int()函数可以把其他数据类型转换为整数。
str()函数把其他类型转换成 str。
定义函数:
def my_abs(x):
if x >= 0:
return x
else:
return -x
如果没有return语句,函数执行完毕后也会返回结果,只是结果为 None。
return None可以简写为return。
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y – step * math.sin(angle)
return nx, ny
>>> r = move(100, 100, 60, math.pi / 6)
>>> print r
(151.96152422706632, 70.0)
用print打印返回结果,原来返回值是一个tuple!
假设计算平方的次数最多,我们就可以把 n 的默认值设定为 2:
def power(x, n=2):
s = 1
while n > 0:
n = n – 1
s = s * x
return s
可变参数的函数:
def fn(*args):
print args
调用示例:fn(‘a’),fn(‘a’, ‘b’)
#list进行切片
>>> L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
>>> L[0:3]
[‘Adam’, ‘Lisa’, ‘Bart’]
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
如果第一个索引是0,还可以省略0,写成:L[:3]
只用一个 : ,表示从头到尾:
>>> L[:]
[‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
切片操作还可以指定第三个参数:
>>> L[::2]
[‘Adam’, ‘Bart’]
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。
倒序切片:
>>> L[-2:]
[‘Bart’, ‘Paul’]
对字符串切片:
>>> ‘ABCDEFG'[:3]
‘ABC’
>>> ‘ABCDEFG'[-3:]
‘EFG’
>>> ‘ABCDEFG'[::2]
‘ACEG’
>>> ‘abc’.upper() #字符串变大写字母函数
‘ABC’
#索引迭代
方法是使用 enumerate() 函数:
>>> L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
>>> for index, name in enumerate(L):
… print index, ‘-‘, name
0 – Adam
1 – Lisa
2 – Bart
3 – Paul
zip()函数可以把两个 list 变成一个 list
>>> zip([10, 20, 30], [‘A’, ‘B’, ‘C’])
[(10, ‘A’), (20, ‘B’), (30, ‘C’)]
迭代dict:
d = { ‘Adam’: 95, ‘Lisa’: 85, ‘Bart’: 59, ‘Paul’: 74 }
sum = 0.0
for v in d.itervalues():
sum = sum + v
print sum / len(d)
for k, v in d.iteritems():
sum = sum + v
print k, ‘:’, v
print ‘average’, ‘:’, sum / len(d)
条件过滤:
列表生成式的 for 循环后面还可以加上 if 判断
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
多层表达式:
语义真TM难懂,用到在研究吧~OVER!