Python学习
来源:互联网 发布:微信app支付php服务端 编辑:程序博客网 时间:2024/06/09 16:58
Python的注释
Python的注释以 # 开头,后面的文字直到行尾都算注释
# print 'hello, python.'
Python的变量
a = 123 # a是整数print aa = 'imooc' # a变为字符串print a
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。动态语言更加灵活
Python中定义字符串
----------如果字符串本身包含'比如我们要表示字符串 I'm OK ,这时,可以用" "括起来表示:print "I'm OK"----------类似的,如果字符串包含",我们就可以用' '括起来表示print 'Learn "Python" in imooc'----------如果字符串既包含'又包含"这个时候,就需要对字符串的某些特殊字符进行“转义”,Python字符串用\进行转义。要表示字符串 Bob said "I'm OK".由于 ' 和 " 会引起歧义,因此,我们在它前面插入一个\表示这是一个普通字符,不代表字符串的起始,因此,这个字符串又可以表示为'Bob said \"I\'m OK\".'----------常用的转义字符还有:\n 表示换行\t 表示一个制表符\\ 表示 \ 字符本身----------
Python中raw字符串与多行字符串
1. 在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。例如:r'\(~_~)/ \(~_~)/' 2. 但是r'...'表示法不能表示多行字符串,也不能表示包含'和 "的字符串如果要表示多行字符串,可以用'''...'''表示 3. '''Line 1 Line 2 Line 3''' 与 'Line 1\nLine 2\nLine 3'表示的含义是一样的 4. # -*- coding: utf-8 -*- //-*- coding:utf-8 -*- 此句的作用是支持utf-8编码 print '''静夜思 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。''' 5. Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True 6. 构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。 L = ['Michael', 100, True],由于python是动态语言,所以列表L中可以放不同数据类型
Python之倒序访问list
1. L = [95.5, 85, 59] print L[-1] print L[-2] print L[-3] 运行结果:59 85 95.5 L[-1] 表示倒数第一个数,L[-2]表示倒数第二个数,...... 2. 加新元素 L.append(78),其中append方法总是添加在尾部 L.insert(0,55),其中0表示插入位置,后一个表示插入新元素 3. 从list删除元素 L.pop(),其中pop函数总是删除最后一个函数,59被删除了, 如果要删除85这个元素,L.pop(1),1表示85在L中的索引位置 4. 创建tuple t=(95.5,85,59),tuple称为元组,其成员变量不可修改 (其指针指向不变),其访问成员方法和list一样 5. 创建单元素tuple t=(1)的结果是整数1,因为(1)会被编译器运算花括号里的1, 要表示成一个tuple的话,改成t=(1,)、t=('sdfsd',)等加一个逗号 6. t = ('a', 'b', ['A', 'B']),包含'a','b',和一个list list[0]='X',list[1]='Y'是有效的 tuple所谓的“不变”是说,tuple的每个元素,指向永远不变, 即指向'a',就不能改成指向'b',指向一个list, 就不能改成指向其他对象,但指向的这个list本身是可变的!
条件判断和循环
1. if条件判断,python对缩进特别严格。 age = 20 if age >= 18: print 'your age is', age print 'adult' print 'END' 具有相同缩进的代码被视为代码块,第三行和第四行具有相同缩进,如果if 条件为真,则执行。 缩进请严格按照Python的习惯写法:4个空格,不要使用Tab, 更不要混合Tab和空格。 2. if else语句 if age >= 18: print 'adult' else: print 'teenager' 注意else后有一个冒号 3. if-elif-else,多判断条件 if age >= 18: print 'adult' elif age >= 6: print 'teenager' elif age >= 3: print 'kid' else: print 'baby' 4. for循环 L = ['Adam', 'Lisa', 'Bart'] for name in L: print name 注意,print name也要注意缩进,缩进4格 5. while循环 N = 10 x = 0 while x < N: print x x = x + 1 6. break退出循环 sum = 0 x = 1 while True: sum = sum + x x = x + 1 if x > 100: break print sum 7. continue for x in L: if x < 60: continue sum = sum + x 当x小于60时,continue跳出本次循环,进行下一次循环
dict和set
1. dict dicts = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } 花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。 由于dict也是集合,len() 函数可以计算任意集合的大小 可以简单地使用 d[key] 的形式来查找对应的 value, (1)if 'Paul' in d: print d['Paul']//判断Pual是否存在于d中,从而避免了报错 (2)dict本身提供的一个get方法,在Key不存在的时候,返回None: >>> print d.get('Bart') 59 >>> print d.get('Paul') None (3)dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。由于dict是按 key 查找,所以,在一个dict中,key不能重复。dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样:因此不能用dict存储有序的集合 (4)dict的第三个特点是作为 key 的元素必须不可变,因此一个list不能作为key,最常用的key是字符串 (5)新添元素:d['Paul'] = 72,覆盖旧元素:d['Brat'] =88 2.循环遍历dict 以 name:score 格式打印出来 d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } for key in d: print key+':',d[key] 2. set (1)set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。 创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素: s = set(['A', 'B', 'C']) 必须使用list,s = set('A', 'B', 'C')报错 (2)由于set存储的是无序集合,所以我们没法通过索引来访问。访问 set中的某个元素实际上就是判断一个元素是否在set中。 'bart' in s False (3)set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。 set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的,最后,set存储的元素也是没有顺序的。 (4)for循环遍历set >>> s = set(['Adam', 'Lisa', 'Bart']) >>> for name in s: ... print name s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)]) for x in s: print x[0],':',x[1] (5)更新set 添加 :s = set([1, 2, 3] s.add(4) 删除 :s.remove(3),如果3不在set中,报错
函数
1. >>> help(函数名) 某函数的帮助信息。 >>> abs(-20)//调用函数信息 20 Python内置的常用函数还包括数据类型转换函数,比如 int()函数可以把其他数据类型转换为整数: >>> int('123')123 >>> str(123) 123 (1)sum()函数接受一个list作为参数,并返回list所有元素之和。请计算 1*1 + 2*2 + 3*3 + ... + 100*100。 L = [] x=1 y=0 while x<=100: y=x*x L.append(y) x=x+1; print sum(L) 2. 编写函数 定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。 def my_abs(x): if x >= 0: return x else: return -x 3. Python函数之返回多值,其返回多值其实就是返回一个tuple (1)# math包提供了sin()和 cos()函数,我们先用import引用它 import math def move(x, y, step, angle): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny (2)x, y = move(100, 100, 60, math.pi / 6) >>> print x, y 151.961524227 70.0 (3)>>> r = move(100, 100, 60, math.pi / 6) >>> print r (151.96152422706632, 70.0)//r 为一个tuple 4. 递归函数 我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为: 如果a只有一个圆盘,可以直接移动到c; 如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。 请编写一个函数,给定输入 n, a, b, c,打印出移动的步骤: move(n, a, b, c) 例如,输入 move(2, 'A', 'B', 'C'),打印出: A --> B A --> C B --> C def move(n, a, b, c): if n==1: print a+'-->'+c return move(n-1,a,c,b) print a+'-->'+c move(n-1,b,a,c) move(3, 'A', 'B', 'C') ... A-->C A-->B C-->B A-->C B-->A B-->C A-->C 5. 定义默认参数 def greet(b='world'): print 'Hello,'+b+'.' greet()//当不输入参数是,默认使用b='world' greet('Bart')//输入参数时,使用b='Bart' ... Hello,world. Hello,Bart. 6. 定义可变参数 def average(*args): sum=0.0 n=0.0 for x in args: sum=sum+x n=n+1 if n==0: return 0.0 else: return sum/n print average() print average(1, 2) print average(1, 2, 2, 3, 4) 0.0 1.5 2.4 args相当于一个tuple
迭代
1. 索引迭代:对于有序集合,元素确实是有索引的。有的时候,我们确实想在 for 循环中拿到索引,方法是使用 enumerate() 函数:>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']>>> for index, name in enumerate(L):... print index, '-', name0 - Adam1 - Lisa2 - Bart3 - Paul迭代的每一个元素实际上是一个tuple:for t in enumerate(L): index = t[0] name = t[1] print index, '-', namezip()函数可以把两个 list 变成一个 list:>>> zip([10, 20, 30], ['A', 'B', 'C'])[(10, 'A'), (20, 'B'), (30, 'C')]在迭代 ['Adam', 'Lisa', 'Bart', 'Paul'] 时,如果我们想打印出名次 - 名字(名次从1开始),请考虑如何在迭代中打印出来。提示:考虑使用zip()函数和range()函数L = ['Adam', 'Lisa', 'Bart', 'Paul']for index, name in zip(range(1,5),L): print index, '-', name 2. 迭代dict的value dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value:d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }print d.values()# [85, 95, 59]for v in d.values(): print v# 85# 95# 59dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样:d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }print d.itervalues()# <dictionary-valueiterator object at 0x106adbb50>for v in d.itervalues(): print v# 85# 95# 59差别:(1) values() 方法实际上把一个 dict 转换成了包含 value 的list。(2)但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。 3. 迭代dict的key和valueitems() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:>>> for key, value in d.items():... print key, ':', value... Lisa : 85Adam : 95Bart : 59和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }sum = 0.0for k, v in d.iteritems()://注意是d.iteritems()不是d.itervalues() sum = sum + v print k,':',vprint 'average', ':', sum/len(d)
生成列表
1. 如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:>>> L = []>>> for x in range(1, 11):... L.append(x * x)... >>> L[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:>>> [x * x for x in range(1, 11)][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]这种写法就是Python特有的列表生成式。利用列表生成式,可以以非常简洁的代码生成 list。(2)请利用列表生成式生成列表 [1x2, 3x4, 5x6, 7x8, ..., 99x100]提示:range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...]print [(x+1)*x for x in range(1,101,2)] 2. 复杂表达式d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格: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)print '</table>'注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。在生成的表格中,对于没有及格的同学,请把分数标记为红色。提示:红色可以用 <td style="color:red"> 实现:d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }def generate_tr(name, score): if score<60: return '<tr><td>%s</td><td style="color:red">%s</td></tr>' % (name, score) return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)tds = [generate_tr(name,score) for name, score in d.iteritems()]print '<table border="1">'print '<tr><th>Name</th><th>Score</th><tr>'print '\n'.join(tds)print '</table>' 3. 条件过滤列表生成式的 for 循环后面还可以加上 if 判断。例如:>>> [x * x for x in range(1, 11)][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:>>> [x * x for x in range(1, 11) if x % 2 == 0][4, 16, 36, 64, 100]有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。请编写一个函数,它接受一个 list,然后把list中的所有字符串变成大写后返回,非字符串元素将被忽略。提示:(1) isinstance(x, str) 可以判断变量 x 是否是字符串;(2) 字符串的 upper() 方法可以返回大写的字母。def toUppers(L): return [x.upper() for x in L if isinstance(x,str)]print toUppers(['Hello', 'world', 101]) 4. 多层表达式for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列:>>> [m + n for m in 'ABC' for n in '123']['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']利用 3 层for循环的列表生成式,找出对称的 3 位数。例如,121 就是对称数,因为从右到左倒过来还是 121。print [x*100+y*10+z for x in range(1,10) for y in range(0,10) for z in range(0,10) if x==z]
阅读全文
1 0
- 【Python学习】Python 关键字
- Python学习----Python基础
- 【python】:python学习笔记
- Python:Python学习总结
- Python学习-Python数据类型
- Python学习
- 学习python
- python学习
- 学习Python
- python学习
- python学习
- python学习
- python 学习
- 学习python
- Python学习
- Python 学习
- python学习
- Python学习
- 软件构造 目录
- Blender_linux
- 反向传播及softmax算法推导
- spark 算子回调函数实现类中使用集合作为实例变量
- Servlet的学习
- Python学习
- BZOJ4517 排列计数 [组合数][错排]
- MySQL数据库(七)_结合unity实操二_强行读取数据库信息进行装备数据交互
- 哈夫曼树与哈夫曼编码
- Java8 I/O源码-整体结构
- 打印当前时间
- 【PE】Windows平台下为可执行文件或动态库dll添加版本信息
- 通道
- Tomcat编码问题详解