Python培训(课堂PPT)_第1页
Python培训(课堂PPT)_第2页
Python培训(课堂PPT)_第3页
Python培训(课堂PPT)_第4页
Python培训(课堂PPT)_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1Python培训培训Python基本语法与编程基本语法与编程2目标目标使用使用 Python.3Python 基础篇基础篇 -Life Is Short You Need PythonPython 简介简介Python是一种开源的是一种开源的 、解析、解析性的,面向对象的编程语言。性的,面向对象的编程语言。 Python使用一种优雅的语法,可读性强使用一种优雅的语法,可读性强 Python支持类和多层继承等的面向对象编程支持类和多层继承等的面向对象编程技术。技术。 Python可运行在多种计算机平台和操作系统可运行在多种计算机平台和操作系统中,如中,如unix,windows,MacOS,O

2、S/2等等等等4使用使用python安装安装python, 请参阅请参阅:运行运行python脚本脚本:交互式运行交互式运行(在在Windows平台下有平台下有GUI界面)界面)执行执行python脚本文件脚本文件在在Linux/UNIX环境下运行程序环境下运行程序 。在在python头部加一行:头部加一行:#! /usr/local/bin/pythonchmod +x myfile.py./myfile.py (当然也可以直接以当然也可以直接以python myfile 方式执行方式执行)5快速开始简单语句快速开始简单语句print “hello w

3、orld” 计算器计算器1+1格式化字符串格式化字符串print The total is %0.2f %56.35986注释注释 和和 模块模块注释注释# 我是注释我是注释“”“”“ 我的注释我的注释 ”“”“”模块模块import syssys.exit()7Python的数据类型的数据类型变量的定义。在变量的定义。在python中,变量的类型是由中,变量的类型是由赋给它的数值定义的。赋给它的数值定义的。q = 7 #q其为数值型变量其为数值型变量q = “Seven” #q为字符串型变量为字符串型变量基本数据类型基本数据类型:字符串,整数,浮点数,虚数,字符串,整数,浮点数,虚数,布尔型

4、。布尔型。集合类型:列表(集合类型:列表(List),元组(元组(Tuple),字典字典(Dictionary或或Hash)8Python的数据类型的数据类型列表(列表(List)List的定义。的定义。aList = 23 或者或者 bList = 1,2,3List的使用。可以像的使用。可以像c语言中数据一样引用语言中数据一样引用list中的元素。中的元素。print bList1 List常用操作:常用操作:append, del, + ,*, len(list)0 * 59Python的数据类型的数据类型:列表(方法列表(方法)列表对象支持的方法列表对象支持的方法(演示)演示)appe

5、nd(x)count(x) :X在在List中的个数中的个数extend(L)Index(x)insert(i,x)pop(x)remove(x) reverse() sort()10Python的数据类型的数据类型:元组(元组(Tuple)Tuple的定义的定义aTuple = (1, 3, 5)print aTuple元组可以用方括号括起下标做索引元组可以用方括号括起下标做索引元组一旦创建就不能改变元组一旦创建就不能改变 列表大部分操作同样适用于元组列表大部分操作同样适用于元组11Python的数据类型的数据类型:字典(字典(Hash)字典是一个用大括号括起来的键值对,字典元字典是一个用大

6、括号括起来的键值对,字典元素分为两部份,键素分为两部份,键(key)和值。和值。字典是字典是python中唯一内置映射数据类型。通中唯一内置映射数据类型。通过指定的键从字典访问值。过指定的键从字典访问值。字典的使用字典的使用:a = a:aa, b:bbac=cca.has_key(a)12Python的数据类型的数据类型:字典(常用方法字典(常用方法)字典的常用方法(演示):字典的常用方法(演示):has_key(x) keys() values() items() clear() copy() update(x) get(x,y)13Python 控制语句控制语句 ifPython支持三种

7、不同的控制结构:支持三种不同的控制结构:if,for和和while,不支持,不支持C语言中的语言中的switch语句。语句。(1)if 语句的用法:语句的用法:if EXPRESSION1: STATEMENT1elif EXPRESSION2:STATEMENT2else: STATEMENT314Python 控制语句控制语句 forfor语句的用法:语句的用法:mylist = for statementfor word in mylist:print wordelse: #最终执行最终执行 print End list15Python 控制语句控制语句 whilewhile语句的用法:

8、语句的用法:a = 0while a 5: a = a + 1 print aelse:print as value is five16Python 循环中的控制语句循环中的控制语句break: 终止当前循环终止当前循环continue: 终止本次循环终止本次循环pass: 什么事都不错什么事都不错17Python 函数函数函数定义:函数定义:def function_name(arg1,arg2,.):statementreturn value函数名:函数名:函数名必须以下划线或字母开头,可以包含任意函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标字母、数

9、字或下划线的组合。不能使用任何的标点符号;点符号;函数名是区分大小写的。函数名是区分大小写的。函数名不能是保留字。函数名不能是保留字。18Python 函数作用域函数作用域Python使用名称空间的概念存储对象,这个名称空间就使用名称空间的概念存储对象,这个名称空间就是对象作用的区域,是对象作用的区域, 不同对象存在于不同的作用域。不同对象存在于不同的作用域。不同对象的作用域规则:不同对象的作用域规则:每个模块都有自已的全局作用域。每个模块都有自已的全局作用域。函数定义的对象属局部作用域,只在函数内有效,不会影函数定义的对象属局部作用域,只在函数内有效,不会影响全局作用域中的对象。响全局作用域

10、中的对象。赋值对象属局部作用域,除非使用赋值对象属局部作用域,除非使用global关键字进行声关键字进行声明。明。LGB规则规则大多数名字引用在三个作用域中查找:先局部大多数名字引用在三个作用域中查找:先局部(Local),次之全局次之全局(Global),再次之内置,再次之内置(Build-in)。若仍然找。若仍然找不到这个变量名不到这个变量名,则引发则引发NameError异常异常. 19Python 函数参数函数参数函数的参数分类:函数的参数分类:默认参数:默认参数:def function(ARG=VALUE)元组参数:元组参数:def function(*ARG)字典参数:字典参数:

11、def function(*ARG)一些规则:一些规则:默认值必须在非默认参数之后;默认值必须在非默认参数之后;在单个函数定义中,只能使用一个在单个函数定义中,只能使用一个tuple参数(参数(*ARG)和一个字典参数()和一个字典参数(*ARG)。)。tuple参数必须在连接参数和默认参数之后。参数必须在连接参数和默认参数之后。字典参数必须在最后定义。字典参数必须在最后定义。20内置特殊函数内置特殊函数apply() 函数函数apply(func , args , kwargs ) 函数用于当函数参数已经存在于一个元组或字典函数用于当函数参数已经存在于一个元组或字典中,间接中,间接地地调用函

12、数调用函数. args是一个包含将要提供是一个包含将要提供给函数的按位置传递的参数的元组给函数的按位置传递的参数的元组. 如果省略了如果省略了args,任何参数都不会被传递任何参数都不会被传递. kwargs是一个是一个包含关键字参数的字典包含关键字参数的字典. foo(3,“x”, name=Dave, id=12345) apply(foo, (3,“x”), name: Dave, id: 12345 ) lambda操作符操作符 lambda args: expression args是一个用逗号分隔的参数是一个用逗号分隔的参数, expressin是一是一个调用这些参数的表达式个调用

13、这些参数的表达式 21map(), zip(), reduce(), 和和filter()t = map(func, s ) . 即即ti = func(si). 需要注意的是需要注意的是, func函数必须有且只有一个参数函数必须有且只有一个参数 a = 1, 2, 3, 4, 5, 6 b = map(lambda x: 3*x, a) # b = 3, 6, 9, 12, 15, 18 t2 = map(func, s1,s2,sn) ? t3 = map(None, s1,s2,sn) ?zipls = zip(s1 , s2 , ., sn ) :ziplsi = (s1i , s2

14、i , ., sni ). zip()函数取决于最短序列函数取决于最短序列.reduce(func , s )函数从一个序列收集信息函数从一个序列收集信息,然后只返回一个值然后只返回一个值(例如例如求和求和,最大值最大值,等等). b = reduce(sum, 1,2,3,4,) # b = (1+2)+3)+4) = 10 filter(func ,s)是个序列过虑器,使用是个序列过虑器,使用func()函数来过滤函数来过滤s中的元素。中的元素。 c = filter(lambda x: x = 0 # d = 5,2,7,8 e = (x,y) for x in a # e = (5,a

15、),(5,b),(5,c), for y in b # (2,a),(2,b),(2,c), if x 0 # (7,a),(7,b),(7,c), # (8,a),(8,b),(8,c) f = (1,2), (3,4), (5,6) g = math.sqrt(x*x+y*y) # g = 2.23606, 5.0, 7.81024 for x,y in f h = reduce(lambda x,y: x+y, # 平方根的和平方根的和 math.sqrt(x*x+y*y) for x,y in f) 24eval(), exec, execfile(),和和compile() eval

16、(str ,globals ,locals )函数将字符串函数将字符串str当成有效当成有效Python表达式来求值,并返回计算结果。表达式来求值,并返回计算结果。 同样地同样地, exec语句将字符串语句将字符串str当成有效当成有效Python代码来执行代码来执行.提供给提供给exec的代码的名称空间和的代码的名称空间和exec语句的名称空间相同语句的名称空间相同. 最后,最后,execfile(filename ,globals ,locals )函数可以用函数可以用来执行一个文件来执行一个文件,看下面的例子看下面的例子: eval(3+4) 7 exec a=100 a 100 exe

17、cfile(rc:test.py) hello,world! 25eval(),exec,execfile()名字空间名字空间默认默认eval(),exec,execfile()所运行的代码都位于当前的所运行的代码都位于当前的名字空间中。名字空间中。eval(), exec,和和 execfile()函数也可接受函数也可接受一个或两个可选字典参数作为代码执行的全局名字空一个或两个可选字典参数作为代码执行的全局名字空间和局部名字空间间和局部名字空间Demo:globals = x: 7, y: 10, birds: Parrot, Swallow, Albatross locals = # 将上

18、边的字典作为全局和局部名称空间将上边的字典作为全局和局部名称空间 a = eval(3*x + 4*y, globals, locals) exec for b in birds: print b in globals, locals 注意语法注意语法 execfile(foo.py, globals, locals) exec是一个语句是一个语句(就象就象print或或while), 而而eval()和和execfile()则是内建函数则是内建函数. 26compile(str ,filename ,kind )函数函数compile()将一个字符串编译为字节代码将一个字符串编译为字节代码,

19、str是将要被编译的字符串是将要被编译的字符串,filename是定义该字符串变量的文件,是定义该字符串变量的文件,kind参数指定了代码被编译的类型参数指定了代码被编译的类型single指单个语句指单个语句, exec指多个语句指多个语句, eval指一个表达式指一个表达式. 返回一个代码对象,该对象也可以被传递给返回一个代码对象,该对象也可以被传递给eval()函函数和数和exec语句来执行语句来执行 预编译预编译, 可以有效提高程序的执行效率可以有效提高程序的执行效率 27递归递归Python对递归函数调用的次数作了限制对递归函数调用的次数作了限制.函数函数 sys.getrecursi

20、onlimit()返回当前允许的最返回当前允许的最大递归次数大递归次数,而函数而函数sys.setrecursionlimit()可以改变该函数的可以改变该函数的返回值返回值.默认的最大递归次数为默认的最大递归次数为1000.当一个函数递归次数超当一个函数递归次数超过最大递归次数时过最大递归次数时,就会引发就会引发RuntimeError异常异常. 28Python 模块模块模块:可把一个复杂的程序按功能分开,分别存放到不同模块:可把一个复杂的程序按功能分开,分别存放到不同文件中,使程序更容易维护和管理。文件中,使程序更容易维护和管理。Python中的模块是以中的模块是以.py结尾的结尾的Py

21、thon代码文件。代码文件。 通过通过import命令输入,如:命令输入,如: import sys(和(和c中中include语句似乎相似语句似乎相似)该该import语句共执行三步操作:语句共执行三步操作:创建新的名称空间(创建新的名称空间(namespace),该名称空间中),该名称空间中拥有输入模块中定义的所有对象;拥有输入模块中定义的所有对象;执行模块中的代码;执行模块中的代码;创建该名称空间的变量名。创建该名称空间的变量名。29Python 模块模块import的使用的使用:import ftplib as ftpfrom ftplib import FTP30Python脚本与模

22、块脚本与模块python脚本和模块都是一个以脚本和模块都是一个以.py结束的文件,那程结束的文件,那程序是如何判断一个序是如何判断一个.py文件是作为脚本还是模块呢?文件是作为脚本还是模块呢?关键是一个名为关键是一个名为_name_的变量,如果它的值是的变量,如果它的值是_main_,则是作为脚本直接运行,否则是做为模,则是作为脚本直接运行,否则是做为模块运行的。块运行的。if _name_ = “_main_”:main()31Python 包包(package)我们可以把几个功能相近的模块组成一个我们可以把几个功能相近的模块组成一个Python包,存包,存放到一个目录结构中,通过输入包的路

23、径来调用对对象。放到一个目录结构中,通过输入包的路径来调用对对象。例子:例子: / WebDesign _init_.py design.py draw.py其中其中_init_.py是包的初始化文件,可以为空,但是是包的初始化文件,可以为空,但是必不可少的。必不可少的。可以以下列方式引用可以以下列方式引用design模块:模块:import WebDesign.design32Python 类类简单例子简单例子#!/usr/bin/python#-*- encoding:utf-8 -*-class test: #定义一个定义一个test类类 desc = 这是一个测试类。这是一个测试类。

24、#在类中定义一个属性在类中定义一个属性desc def _init_(self,name1): #对象构造函数,初始化类对象构造函数,初始化类 1 = name1 def show(self,name2): #在类中定义一个方法在类中定义一个方法show() print hello world print name1:,1 print name2:,name2调用调用obj = test(这是传递给这是传递给name1的值的值) #生成生成test类的实例对象类的实例对象print obj.desc #调用类中的调用类中的desc属性属性obj.show(这

25、是传递给这是传递给name2的值的值) #调用类中的调用类中的show()方法方法33面向对象编程(基于对象)面向对象编程(基于对象) class Foo: def _init_(self, a, b): self.a = a self.b = b def show_a(self): print self.a def show_b(self): print self.b _init_ 函数:每次生成类的时候都会执行的函数:每次生成类的时候都会执行的, self 指向类对象自身。指向类对象自身。记住记住, 类函数类函数(或者叫做方法或者叫做方法) 它的第一个参数它的第一个参数 “self” 不要

26、忘记写了不要忘记写了foo_obj = Foo(Im A, Im B) foo_obj.show_a() foo_obj.b = Hello world! foo_obj.show_b()34 命名规范命名规范类的首字母大写类的首字母大写, 没有特别原因不要在前面加没有特别原因不要在前面加 “T” 或者或者 “C” 什么的什么的函数和变量尽量全小写函数和变量尽量全小写, 单词间下划线单词间下划线python命名规范(约定):命名规范(约定):类里面类里面 “单下划线单下划线” 开始的成员变量叫做保护变量开始的成员变量叫做保护变量, 意意思是只有类对象和子类对象自己能访问到这些变量思是只有类对象

27、和子类对象自己能访问到这些变量; 而而 双下划线双下划线 开始的是私有成员开始的是私有成员, 意思是只有类对象自意思是只有类对象自己能访问己能访问, 连子类对象也不能访问到这个数据。连子类对象也不能访问到这个数据。35使用私有成员的一个例子使用私有成员的一个例子 class Fool: def _init_(self): self._a = None # None 就是什么都没有就是什么都没有 def set_a(self, a): self._a = a def get_a(self): print self._a fool_obj = Fool() print fool_obj ._a #

28、 哼哼哼哼, 等着报错吧等着报错吧, # # 只有只有 foo 自己自己 才可以才可以 看见看见 _a fool_obj.set_a(Im A) print fool_obj.get_a()36闲言碎语闲言碎语 Java:把对象里面的成员保护起来:把对象里面的成员保护起来,程序员似乎养成了习程序员似乎养成了习惯。惯。 “隐藏实现隐藏实现” ? python真正真正 隐藏实现隐藏实现 的方法的方法, 就是重定义等号运算符就是重定义等号运算符用直接操作成员变量的方法来做用直接操作成员变量的方法来做 (用等号代替函数用等号代替函数)真正漂亮、收放自如的程序敢于暴露自己的实现细节真正漂亮、收放自如的程

29、序敢于暴露自己的实现细节, 用用最轻量级的方法来做事情最轻量级的方法来做事情轻量级的方法轻量级的方法通常会很巧妙通常会很巧妙, 但不会很复杂。但不会很复杂。37继承继承class Bar(Fool): def _init_(self, a, b, c, d): Fool._init_(self, a, b) # 调用父类初始化调用父类初始化 self.c = c self.d = d def show_c(self): print self.c def show_d(self): print self.d foo_obj.show_a() foo_obj.show_b() foo_obj.sh

30、ow_c() foo_obj.show_d()多重继承多重继承 class MBar(Foo1, Foo2, Foo3, .): .38继承继承 所谓继承就是让新的类所谓继承就是让新的类, 子类得到父类子类得到父类 (就是就是那个那个 Foo) 的成员和功能。的成员和功能。 但是最好不要忘记子类也需要一个但是最好不要忘记子类也需要一个 _init_ 函数函数, 把把 a、b、c、d 这些成员都这些成员都创建出来创建出来, 或者直接调用父类的或者直接调用父类的 _init_ 函数来完成函数来完成这件事情这件事情, 并且我们通常是这样做的。并且我们通常是这样做的。39简单的网络通信及即时聊天简单的

31、网络通信及即时聊天网络编程。不妨做一个即时聊天工具吧网络编程。不妨做一个即时聊天工具吧, 不过这次的程序很简陋不过这次的程序很简陋, 只只能说是一个网络对讲机罢了。能说是一个网络对讲机罢了。from SimpleXMLRPCServer import SimpleXMLRPCServer def foo():return Hello world! server = SimpleXMLRPCServer( (localhost, 8000) ) server.register_function(foo) server.serve_forever() 用用 IE 来访问来访问 http:/loca

32、lhost:8000 看看我们得到了什么看看我们得到了什么? 是是一个出错页面一个出错页面, 不错不错, 这表示我们的服务器工作正常这表示我们的服务器工作正常, 只是访问的方法只是访问的方法不对而已。不对而已。40客户机程序客户机程序对应的客户机程序对应的客户机程序 from xmlrpclib import ServerProxy server = ServerProxy(http:/localhost:8000) print server.foo()服务器返回了服务器返回了 Hello world!。这里。这里 localhost 是指是指本机本机, 8000 是端口是端口, 我们通常会指

33、定大于我们通常会指定大于 1024 的端口号。的端口号。 localhost 我们通常会用域名我们通常会用域名 (机器名机器名) 或或 IP 来代替来代替, 而端口号是任意的。而端口号是任意的。 下面下面, 该传些东西了。比如发送一句话到服务器上去显示该传些东西了。比如发送一句话到服务器上去显示出来。出来。41 服务端程序服务端程序from SimpleXMLRPCServer import SimpleXMLRPCServer def msg(s): print s return True server = SimpleXMLRPCServer( (localhost, 8000) ) se

34、rver.register_function(msg) server.serve_forever() 对应的客户机程序:对应的客户机程序: from xmlrpclib import ServerProxy server = ServerProxy(http:/localhost:8000) while True: msg = raw_input() server.msg(msg)42开个玩笑开个玩笑, 一个即时通信工具已经写好了。两一个即时通信工具已经写好了。两台机器互相知道台机器互相知道 IP 或者机器名或者机器名, 协商好端口协商好端口号。然后打开一个服务器、将客户机指向对方号。然后打开

35、一个服务器、将客户机指向对方的服务器就可以了。的服务器就可以了。 那么怎么将客户端和服务器合并在一起呢那么怎么将客户端和服务器合并在一起呢? 因为调用因为调用 serve_forever() 之后程序就停之后程序就停在那里了在那里了, 所以无法再接收用户输入的东西了所以无法再接收用户输入的东西了。43多线程编程多线程编程 import thread from SimpleXMLRPCServer import SimpleXMLRPCServer from xmlrpclib import ServerProxy def msg(s): print s return True def run_

36、server(): my_server = SimpleXMLRPCServer( (localhost, 8001) ) my_server.register_function(msg) my_server.serve_forever() def run_client(): your_server = ServerProxy(http:/localhost:8002) while True: msg = raw_input() your_server.msg(msg) thread.start_new_thread( run_server, () ) run_client()44第二个差不多

37、第二个差不多, 只是把地址互换只是把地址互换 import thread from SimpleXMLRPCServer import SimpleXMLRPCServer from xmlrpclib import ServerProxy def msg(s): print s return True def run_server(): my_server = SimpleXMLRPCServer( (localhost, 8002) ) my_server.register_function(msg) my_server.serve_forever() def run_client():

38、your_server = ServerProxy(http:/localhost:8001) while True: msg = raw_input() your_server.msg(msg) thread.start_new_thread( run_server, () ) run_client()45这样这样, 一对对讲机就写好了一对对讲机就写好了图形界面:图形界面: 用用 Tkinter 来写一个界面了。来写一个界面了。 首先把窗体画出来。首先把窗体画出来。 from Tkinter import * wnd = Tk() wnd.lab = Label(wnd, text=-) wnd.ent = Entry(wnd) wnd.btn = Button(wnd, text=send) wnd.lab.pack() wnd.ent.pack(side=LEFT) wnd.btn.pack(side=LEFT) 然后把刚才的网络部分加上去。然后把刚才的网络部分加上去。46 import thread from SimpleXMLRPCSe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论