• 1. Python入门
  • 2. Python的历史Python是自由软件的丰硕成果之一 创始人 Guido van Rossum 时间地点 1989年圣诞节期间在阿姆斯特丹创造 名字来源 大蟒蛇飞行马戏团的爱好者 渊源 从ABC发展而来 主要受Modula-3的影响 结合了Unix shell和C的习惯
  • 3. Python的语言特点Python是一种面向对象的解释性语言 Python是免费的 Python是可移埴的 Python是可扩展的 Python是简单的 Python是万能的
  • 4. Python的语法特点Python是一种语法表达极其优美的脚本语言 运行方式 命令行、交互式、图形集成环境 面向对象 甚至还支持异常处理 模块和包 与Java类似,还开发了JPython 语言扩展 可以用C/C++/Java编写新的语言模块 丰富的库 数据分析/系统管理/web/GUI/… …
  • 5. 为什么是PythonPython有什么魅力值得我们去学习 它使程序员的生活更有趣 简单易学 功能丰富 谁在使用Python呢? Google NASA ...... 国内:豆瓣,5分钟,Rokee
  • 6. 使用Python(Windows下)http://www.python.org/下载python-2.5.msi 安装
  • 7. 两种主要运行Python程序的方法命令行交互模式
  • 8. 两种主要运行Python程序的方法将程序写成文件形式,再由Python执行
  • 9. IDLE开发环境(PythonGUI)
  • 10. IDLE开发环境(PythonGUI)编写Python程序可以使用任何一种文本编辑器,当然使用IDLE的编辑器,有语法高亮等提示
  • 11. Python语法可直接在>>>提示符后输入表达式,Python将会计算表示式,得到结果>>> 1 + 1 2 >>> 2 * 3 6 >>> 2 ** 3 8 指数
  • 12. 字符串Python内建了字符串数据类型,并重载了运算符“+”>>> 'artificial' + "intelligence" 'artificialintelligence' 可以使用‘’,也可以使用“”例如:
  • 13. 字符串Python内建有许多方法进行字符串操作例如:
  • 14. 字符串重复: “ABC” *3 #ABCABCABC 索引 “ABC”[0] #A “ABC”[-1] #C 切片 “ABC”[1:3] #BC “ABC”[-2:-1] #B “ABC”[-2:] #BC “ABC”[:-2] #A 长度 Len(“ABC”) #3 比较 “ABC” > “abc”
  • 15. 变量无需事先定义可以把表达式存入变量中>>> s = 'hello world' >>> print s hello world >>> s.upper() 'HELLO WORLD' >>> len(s.upper()) 11 >>> num = 8.0 >>> num += 2.5 >>> print num 10.5 例如:无须声明 类型可变 变量命名规则 建议:字母,数字或下划线 没有常量的概念
  • 16. 练习1学习Python的字符串方法,可通过使用命令dir和help获取更多的帮助信息例如:点运算符
  • 17. 列表 LISTPython内建许多有用的数据结构,列表(LIST)是其中之一;列表保存的是一组(可变)项>>> fruits = ['apple','orange','pear','banana'] >>> fruits[0] 'apple' 可以使用‘+’串连列表例如:>>> otherFruits = ['kiwi','strawberry'] >>> fruits + otherFruits >>> ['apple', 'orange', 'pear', 'banana', 'kiwi', 'strawberry']
  • 18. 列表 LISTPython允许使用负索引访问列表,例如fruits[-1]将访问列表fruits的最后一个元素‘banana’>>> fruits[-2] 'pear'
  • 19. 列表 LISTPython内建许多列表方法,例如pop,append等>>> fruits.pop() 'banana' >>> fruits ['apple', 'orange', 'pear'] >>> fruits.append('grapefruit') >>> fruits ['apple', 'orange', 'pear', 'grapefruit'] >>> fruits[-1] = 'pineapple' >>> fruits ['apple', 'orange', 'pear', 'pineapple']
  • 20. 列表 LIST可以使用切片操作符‘ : ’,获取列表的一个切片,即一部分列表>>> fruits[0:2] ['apple', 'orange'] >>> fruits[:3] ['apple', 'orange', 'pear'] >>> fruits[2:] ['pear', 'pineapple'] >>> len(fruits) 4
  • 21. 列表 LIST列表中可以是任何的Python数据类型,所以可以有列表的列表>>> lstOfLsts = [['a','b','c'],[1,2,3],['one','two','three']] >>> lstOfLsts[1][2] 3 >>> lstOfLsts[0].pop() 'c' >>> lstOfLsts [['a', 'b'],[1, 2, 3],['one', 'two', 'three']]
  • 22. 练习2使用命令dir和help学习列表的其他方法>>> dir(list) …… >>> help(list.reverse) Help on built-in function reverse: reverse(...) L.reverse() -- reverse *IN PLACE* >>> lst = ['a','b','c'] >>> lst.reverse() >>> ['c','b','a'] 还有更多……
  • 23. 元组 tuple元组tuple是和列表list类似的Python内建数据结构,只不过元组一旦创建,就不可改变;另外元组用圆括号(),而列表用方括号[]>>> pair = (3,5) >>> pair[0] 3 >>> x,y = pair >>> x 3 >>> y 5 >>> pair[1] = 6 TypeError: object does not support item assignment
  • 24. 字典 dictionary另一个数据结构是字典,类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。 注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以把不可变或可变的对象作为字典的值。基本说来就是,你应该只使用简单的对象作为键。 键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。
  • 25. 字典 dictionary>>> studentIds = {'aria': 42.0, 'arlo': 56.0, 'john': 92.0 } >>> studentIds['arlo'] 56.0 >>> studentIds['john'] = 'ninety-two' >>> studentIds {'aria': 42.0, 'arlo': 56.0, 'john': 'ninety-two'} >>> del studentIds['aria'] >>> studentIds {'arlo': 56.0, 'john': 'ninety-two'} >>> studentIds['aria'] = [42.0,'forty-two']
  • 26. >>> studentIds {'aria': [42.0, 'forty-two'], 'arlo': 56.0, 'john': 'ninety-two'} >>> studentIds.keys() ['aria', 'arlo', 'john'] >>> studentIds.values() [[42.0, 'forty-two'], 56.0, 'ninety-two'] >>> studentIds.items() [('aria',[42.0, 'forty-two']), ('arlo',56.0), ('john','ninety-two')] >>> len(studentIds) 3 字典 dictionary
  • 27. 练习3使用命令dir和help学习字典的其他方法
  • 28. 运算符数学运算符 + - * / // % ** 比较运算符 < <= > >= == != 逻辑运算符 and or not 赋值运算符 = += -+ *= /= %= **= <<= >>= &= ^= |= 字符串运算符 + * 没有 ++ --1<2<3 #Truex,y = (1,3) #x=1, y=3没有三元运算符 ?:没有 && || !
  • 29. 字符编码str和unicode都是basestring的子类,严格意义上说,str其实是字节串,它是unicode经过编码后的字节组成的序列。unicode才是真正意义上的字符串。 文件编码:#-*- coding: UTF-8 -*- sys.getdefaultencoding(): gbk sys.getfilesystemencoding(): mbcs locale.getdefaultlocale(): ('zh_CN', 'cp936') locale.getpreferredencoding(): cp936 模块codecs(操作文件)
  • 30. 获取输入input(prompt) (预设为数字类型) raw_input(prompt) (转为字符串类型) 例如: >>>x=raw_input("请输入您的名字:") >>>print x+"您好!" 如果是 >>>x=input("请输入您的名字:") >>>print x+“您好!” 则会怎样?
  • 31. range(x),用这个函数可以产生出一个列表(list), 成员分别为 0, 1, 2, 3, ..., x-1。 输入下列指令可以很简单的看出来他的功用: >>> ran = range(10) >>> print ran [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 这个在之后的 for 循环会常使用到. 方便好用的range
  • 32. Python编程(脚本编写)前面使用Python的方式是一种互动的方式,下面介绍的是Python脚本的编写,首先以IF语句为例a=raw_input(“想不想去看加勒比海盗3呀?") if a == "想" : print "那走吧!" elif a == "不想" : print "那你想看什么呢?" else : print "嗯,你到底想怎么样…"
  • 33. 脚本编写将上页代码保存为文件if.py,则可以在命令行模式下通过python if.py运行程序注释井号 代码特点 采用缩进来区分代码的层次关系 没有大括号({}),采用引号(:)做为代码片段的开始 语句结束不使用分号(;) 不推荐同一行写多条语句
  • 34. for 循环# This is what a comment looks like fruits = ['apples','oranges','pears','bananas'] for fruit in fruits: print fruit + ' for sale' fruitPrices = {'apples': 2.00, 'oranges': 1.50, 'pears': 1.75} for fruit, price in fruitPrices.items(): if price < 2.00: print '%s cost %f a pound' % (fruit, price) else: print fruit + ' are too expensive!'注释
  • 35. for 循环将上页代码保存为文件foreach.py,可以通过IDLE的run运行该程序
  • 36. 特别注意:缩进空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。if 0 == 1: print 'We are in a world of arithmetic pain' print 'Thank you for playing' 将输出Thank you for playing if 0 == 1: print 'We are in a world of arithmetic pain' print 'Thank you for playing' 则不会有输出
  • 37. 特别注意:缩进可以使用空格或制表符产生缩进,两个空格或四个空格都是可以的,不过一般建议使用一个制表符TAB产生缩进,你的所有程序应该固定使用一种缩进规则
  • 38. for应用于列表再看一个例子,简单的语句即可对列表进行操作nums = [1,2,3,4,5,6] plusOneNums = [x+1 for x in nums] oddNums = [x for x in nums if x % 2 == 1] print oddNums oddNumsPlusOne = [x+1 for x in nums if x % 2 ==1] print oddNumsPlusOne
  • 39. 练习4写一个程序,生成并输出一个字符串列表中长度大于5的字符串的小写形式
  • 40. 函数#文件名:function1.py def sayHello(): #属于函数的语句块开始 print ‘Hello World!(怎么总是这一句,好像蛮白痴的:) )’ #你还可以在函数语句块中做你想的任何事情! sayHello()#调用该函数 sayHello()#再次调用,随你喜欢多少次都行
  • 41. 函数例子2fruitPrices = {'apples':2.00, 'oranges': 1.50, 'pears': 1.75} def buyFruit(fruit, numPounds): if fruit not in fruitPrices: print "Sorry we don't have %s" % (fruit) else: cost = fruitPrices[fruit] * numPounds print "That'll be %f please" % (cost) buyFruit('apples',2.4) buyFruit('coconuts',2)
  • 42. 函数例子2将上页代码保存为文件fruit.py,运行,分析
  • 43. 练习5增加多一些水果到字典fruitPrices 中,添加函数buyLotsOfFruit ,该函数变量为元组(fruit,pound)的列表,并返回该列表所表示的水果总的价钱
  • 44. 类和对象封装了数据,并提供与这些数据交互的函数 class FruitShop(object): def __init__(self, name, fruitPrices): """ name: Name of the fruit shop fruitPrices: Dictionary with keys as fruit strings and prices for values e.g. {'apples':2.00, 'oranges': 1.50, 'pears': 1.75} """ self.fruitPrices = fruitPrices self.name = name print 'Welcome to the %s fruit shop' % (name)
  • 45. def getCostPerPound(self, fruit): """ fruit: Fruit string Returns cost of 'fruit', assuming 'fruit' is in our inventory or None otherwise """ if fruit not in self.fruitPrices: print "Sorry we don't have %s" % (fruit) return None return self.fruitPrices[fruit]
  • 46. def getPriceOfOrder(self, orderList): """ orderList: List of (fruit, numPounds) tuples Returns cost of orderList. If any of the fruit are """ totalCost = 0.0 for fruit, numPounds in orderList: costPerPound = self.getCostPerPound(fruit) if costPerPound != None: totalCost += numPounds * costPerPound return totalCost def getName(self): return self.name
  • 47. 对象以上代码保存为文件shop.py,则可以按以下方法使用类FruitShop创建对象import shop name = 'AI' fruitPrices = {'apples':2.00, 'oranges': 1.50, 'pears': 1.75} myFruitShop = shop.FruitShop(name, fruitPrices) print myFruitShop.getCostPerPound('apples') otherName = 'AII' otherFruitPrices = {'kiwis':1.00, 'bananas': 1.50, 'peaches': 2.75} otherFruitShop = shop.FruitShop(otherName, otherFruitPrices) print otherFruitShop.getCostPerPound('bananas')
  • 48. 练习6增加函数shopSmart,变量为订单列表orderList,函数返回针对该订单,更便宜的那个商店
  • 49. 连接mysql下载MySQLdb http://sourceforge.net/projects/mysql-python conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable") 提供的connect方法用来和数据库建立连接,接收数个参数,返回连接对象. 连接对象也提供了对事务操作的支持,标准的方法 commit() 提交 rollback() 回滚 MySQLdb用户指南: http://mysql-python.sourceforge.net/MySQLdb.html
  • 50. Python 操作 mysqlcursor用来执行命令的方法: callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数 execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数 executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数 nextset(self):移动到下一个结果集 cursor用来接收返回值的方法: fetchall(self):接收全部的返回结果行. fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据. fetchone(self):返回一条结果行. scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.
  • 51. Python web Django www.djangoproject.com/ Pylons www. pylonsproject.org/ Tornado www.tornadoweb.org/ Bottle www. bottlepy.org
  • 52. IO/NETWORK Linux select/poll/epoll BIO/NIO/AIO NIO(python twisted, java netty,java mina) AIO(Linux epoll, windows IOCP) Network framework Urllib,urllib2 Twisted Gevent