Python入门笔记

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!