您的位置:首页 > 编程语言 > Python开发

【笔记】Python入门(慕课)

2015-10-10 15:18 686 查看
一、Python变量和数据类型

1. print 'a', 'b', 'c' 三个字符串连成一串输出。print遇到逗号则输出空格。

2. 字符串前加上r,如r'\(~_~)/ \(~_~)/',则字符串内的字符不需要转义。但不能表示多行字符串和带有'与"的字符串。

    用'''string'''可以表示多行字符串和带有引号的字符串(相当于字符串原样输出,不需要添加转义字符)。

    

3. 以Unicode表示的字符串(如中文字符)前必须加上u,其他方面和普通字符串一样,比如第2条的方面。如u'中文\n日文\n韩文',ur'''中文"日文"韩文'''

    如果中文字符串在Python环境下遇到UnicodeDecodeError,这是因为.py文件保存的格式有问题,可以在第一行添加注释# -*- coding:utf-8 -*-,目的是告诉编译器用utf-8编码读取源代码,然后用Nodepad++另存为以utf-8格式保存。

    

4. 0、空字符串''和None为False,其他数值和非空字符串为True。

二、List和Tuple类型

1. Python内置数据类型为列表list,list是一个有序集合,也就是其中的元素是按照顺序排列的。例子L = ['Lisa', 95, 'John', 80, 'Alice', '60']

    L[-1]表示倒数第一个元素。

    

2. list添加新元素。L = ['A', 'B', 'C']

    L.append('D') #把新元素追加到list末尾

    L.insert(0, '#') #把新元素添加到索引位置,原本此位置及后面的元素依次顺移一位

    

3. L.pop()删除list最后的一个元素,并返回这个元素(输出此元素)

    L.pop(2)删除第三个元素

    

4. 对一个索引赋值可以直接替换此元素。

5. tuple是另一种有序列表,但是一旦创建就不能修改。t = ('A', 'B', 'C'),没有增加修改删除的方式,查询方式与list相同。

6. 创建单元素tuple,t = (1,)需要加一个额外的逗号,否则会产生歧义,输出数字1,因为括号也可以是数学符号。同样Python输出单元素tuple也会自动加一个逗号。

7. tuple内容不变是指tuple元素的指向永远不变,但如果指向一个list,tuple元素的指向仍不变,但list元素的指向可变,则变成了一个内容“可变”的tuple。

三、条件判断和循环

1. 同样的缩进代表一个代码块,使用四个空格缩进。如果在Python交互模式下,要退出缩进还要多加一个回车。

2. if例子

if age >= 18: #有一个冒号

    print 'your age is', 18

    print 'adult'

print 'END'

if-else例子:

if age >= 18:

    print 'adult'

else:

    print 'teenager'

    

if-elseif例子

if age >= 18:

    print 'adult'

elif age >= 6:

    print 'teenager'

elif age >= 3:

    print 'kid'

else:

    print 'baby'

    

3. for循环

for name in L:

    print name # name变量是在for循环中定义的。依次取出list中的元素,赋值给name,然后执行for循环体。

    

4. while循环

while x < 100:

    sum += x

    x = x + 1

print sum

5. break

while True:

    sum += x

    x = x + 1

    n = n + 1

    if n > 20:

        break

print sum

四、dict和set类型

1. dict 键值对应,类似json。{}代表一个dict

1)

    d = {

        'Adam': 95,

        'Paul': 80,

        'Me': 100

    }

    len(d) # ==>3

    len()函数可以计算任意集合的大小。

2)使用d[key]查找对应的value。

    例子:

    if 'Paul' in d: #先检查dict中是否有'Paul',防止报错。

        print d[Paul]

    print d.get['Paul'] #==> d['Paul']

    print d.get('bucunzaidekey') #==> None

3)在一个dict中,key不能重复。

    key-value的序对没有顺序,打印时不一定是创建时的顺序。

    作为key的元素必须不可变,因此不能用list作为key。value是否可变无所谓。

4)更新dict

    d['Paul'] = 72 #key不存在则添加,存在则替换。

5)遍历dict

    for key in d:

        print key+':',d[key]

    

2. set持有一系列不重复的元素,相当于一个无序的list

1)创建set

    s = set(['A', 'B', 'C'])

    print s #==> set(['A', 'C', 'B'])

    如传入包含相同元素的list,则自动去重

    s = set(['A', 'B', 'C', 'C'])

    print s #==> set(['A', 'C', 'B'])

    print len(s) #==> 3

2)访问set

    set是一个无序集合,所以不能用索引访问。访问set相当于判断一个元素是否在set中。

    'A' in s #==> True

    

3)set的特点

    set储存的元素必须是不变对象。

    set储存的元素是没有顺序的。

    使用例子:

    weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])

    if x in weekdays:

        print 'input ok'

    else:

        print 'input error'

4)遍历set

for name in s:

    print name

    

5)更新set

    s.add('Paul') #==> 重复不会报错

    s.remove('Paul') #==> 若试图删除不存在的元素,则报错。以此remove前需要先判断。

    L = ...

    s = ...

    for x in L:

        if x in s:

            s.remove(x)

        else:

            s.add(x)

五、函数

1. 定义函数

    def square_of_sum (L):

        sum = 0

        for x in L:

            sum += x*x

        return sum

2. 函数可以返回多个值 return x,y

    返回的实际上是一个tuple,若x, y = func () tuple可以自动将值依次赋值给变量。

    

3. 传入默认参数

def greet(str='world')

    print 'hello,',str+'.'

greet()

greet('Paul')

4. 定义可变参数

def average(*args)

    return float(sum(args)) and float(sum(args))/len(args)

args是一个tuple。

六、切片

1. 对list进行切片

    L[0:3]从索引0开始取到索引3,不包括索引3。如果是从0开始,0可以省略,为L[:3]。

    L[:]表示从头取到尾,L[:]实际上复制出了一个新list。

    L[::2],第三个参数表示每N个取一个,如例为每两个元素取一个。

    把list换成tuple,切片操作完全相同,只是切片结果也变成了tuple。

    

2. 倒序切片

    L[-2:]从倒数第二个元素取到末尾。

    L[:-2]从头取到倒数第二个元素。

    L[-3:-1]从倒数第三个元素取到倒数第一个元素。

    L[-4:-1:2]从倒数第四个元素取到倒数第一个元素,每两个取一个。

    print L[4::5][-10:] L[4::5]5的倍数的list,取倒数十个。

    

3. 对字符串切片

    字符串切片方式与list一样,每个字符相当于一个元素。

    

七、迭代

1. Python中,迭代永远是取出元素本身,而不是元素的索引。

    想要在for循环中取到索引,用enumerate()

    for index,name in enumerate(L):

        print index,'-',name

    使用enumerate()函数,可以在for循环中同时绑定索引index和元素name。

    实际上,enumerate()函数将['A', 'B', 'C', 'D']变成了[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')],因此,每个元素实际上是一个tuple。

    因此,索引迭代并不是真的按索引访问,而是有enumerate()函数将每个元素自动变成了(index, element)这样的tuple,再迭代,就获得了索引与元素本身。

    

2. zip()将两个list合并为一个list,zip([1, 2, 3], ['A', 'B', 'C']) ==> [(1, 'A'), (2, 'B'), (3, 'C')]

    range(a, b) 一个从a到b的数字list,range(a, b, 2)生成一个每两个数字显示一个的数字list。

3. 迭代dict的value

    1)dict对象有一个values()方法,可以将dict转换为一个包含所有value的list。

    d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }

    print d.values()

    2)dict对象还有一个itervalues()方法,不是讲dict转换为list,而是在迭代过程中依次从dict中取出value,节省生成list所需要的内存。

    

4. 迭代dict的key和value

    1)items()方法将dict转换为包含tuple的list

    >>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }

    >>> print d.items()

    [('Lisa', 85), ('Adam', 95), ('Bart', 59)]

    对此进行迭代,可以同时获得key和value

    for key,value in d.items()

        print key, ':', value

    2)同样,items()也有一个对应的方法iteritems(),不把dict转换为list,而是在迭代过程中不断给出tuple,不占用额外内存。

    

八、列表生成式

1. [x*x for x in range(1, 10)] 生成一个[1*1, 2*2, ...10*10]的列表。

2. 复杂表达式

    ['<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)

    print '</table>'

    字符串可以通过%进行格式化,用指定的参数替代%s,如果是直接传递参数之类不是添加到字符串中则不需要这样。

    字符串的join()方法可以把一个list拼接成一个字符串,用点号前面的内容分隔。

    

3. 条件过滤

    [x*x for x in range(1, 11) if x%2 == 0] 在for循环后还可以加上if来进行筛选。

    

4. 多层表达式

    for循环可以嵌套,因此在列表生成式中,也可以用多层for循环来生成列表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: