版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1Python2Python 基础篇 -Life Is Short You Need PythonPython 简介Python是一种开源的 、解析性的,面向对象的编程语言。 Python使用一种优雅的语法,可读性强 Python支持类和多层继承等的面向对象编程技术。 Python可运行在多种计算机平台和操作系统中,如unix,windows,MacOS,OS/2等等3使用python安装python, 请参阅:运行python脚本:交互式运行(在Windows平台下有GUI界面)执行python脚本文件在Linux/UNIX环境下运行程序 。在python头部加一行:#! /usr/loca
2、l/bin/pythonchmod +x my./my (当然也可以直接以python myfile 方式执行)4快速开始简单语句print “hello world” 计算器1+1格式化字符串print The total is %0.2f %56.35985注释 和 模块注释# 我是注释“”“ 我的注释 ”“”模块import syssys.exit()6Python的数据类型变量的定义。在python中,变量的类型是由赋给它的数值定义的。q = 7 #q其为数值型变量q = “Seven” #q为字符串型变量基本数据类型:字符串,整数,浮点数,虚数,布尔型。集合类型:列表(List),元
3、组(Tuple),字典(Dictionary或Hash)7Python的数据类型列表(List)List的定义。aList = 23 或者 bList = 1,2,3List的使用。可以像c语言中数据一样引用list中的元素。print bList1 List常用操作:append, del, + ,*, len(list)0 * 58Python的数据类型:列表(方法)列表对象支持的方法(演示)append(x)count(x) :X在List中的个数extend(L)Index(x)insert(i,x)pop(x)remove(x) reverse() sort()9Python的数据类
4、型:元组(Tuple)Tuple的定义aTuple = (1, 3, 5)print aTuple元组可以用方括号括起下标做索引元组一旦创建就不能改变 列表大部分操作同样适用于元组10Python的数据类型:字典(Hash)字典是一个用大括号括起来的键值对,字典元素分为两部份,键(key)和值。字典是python中唯一内置映射数据类型。通过指定的键从字典访问值。字典的使用:a = a:aa, b:bbac=cca.has_key(a)11Python的数据类型:字典(常用方法)字典的常用方法(演示):has_key(x) keys() values() items() clear() copy
5、() update(x) get(x,y)12Python 控制语句 ifPython支持三种不同的控制结构:if,for和while,不支持C语言中的switch语句。(1)if 语句的用法:if EXPRESSION1: STATEMENT1elif EXPRESSION2:STATEMENT2else: STATEMENT313Python 控制语句 forfor语句的用法:mylist = for statementfor word in mylist:print wordelse: #最终执行 print End list14Python 控制语句 whilewhile语句的用法:a
6、 = 0while a 5: a = a + 1 print aelse:print as value is five15Python 循环中的控制语句break: 终止当前循环continue: 终止本次循环pass: 什么事都不错16Python 函数函数定义:def function_name(arg1,arg2,.):statementreturn value函数名:函数名必须以下划线或字母下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号;函数名是区分大小写的。函数名不能是保留字。17Python 函数作用域Python使用名称空间的概念存储对象,这个名称
7、空间就是对象作用的区域, 不同对象存在于不同的作用域。不同对象的作用域规则不同对象的作用域规则:每个模块都有自已的全局作用域。函数定义的对象属局部作用域,只在函数内有效,不会影响全局作用域中的对象。赋值对象属局部作用域,除非使用global关键字进行声明。LGB规则大多数名字引用在三个作用域中查找:先局部(Local),次之全局(Global),再次之内置(Build-in)。若仍然找不到这个变量名,则引发NameError异常. 18Python 函数参数函数的参数分类:默认参数:def function(ARG=VALUE)元组参数:def function(*ARG)字典参数:def f
8、unction(*ARG)一些规则:默认值必须在非默认参数之后;在单个函数定义中,只能使用一个tuple参数(*ARG)和一个字典参数(*ARG)。tuple参数必须在连接参数和默认参数之后。字典参数必须在最后定义。19内置特殊函数apply() 函数apply(func , args , kwargs ) 函数用于当函数参数已经存在于一个元组或字典中,间接地调用函数. args是一个包含将要提供给函数的按位置传递的参数的元组. 如果省略了args,任何参数都不会被传递. kwargs是一个包含关键字参数的字典. foo(3,“x”, name=Dave, id=12345) apply(fo
9、o, (3,“x”), name: Dave, id: 12345 ) lambda操作符 lambda args: expression args是一个用逗号分隔的参数, expressin是一个调用这些参数的表达式 20map(), 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,
10、sn) ? t3 = map(None, s1,s2,sn) ?zipls = zip(s1 , s2 , ., sn ) :ziplsi = (s1i , s2i , ., 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
11、,y) for x in a # e = (5,a),(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) 23eval(), exec, execfil
12、e(),和compile() eval(str ,globals ,locals )函数将字符串str当成有效Python表达式来求值,并返回计算结果。 同样地, exec语句将字符串str当成有效Python代码来执行.提供给exec的代码的名称空间和exec语句的名称空间相同. 最后,exec ,globals ,locals )函数可以用来执行一个文件,看下面的例子: eval(3+4) 7 exec a=100 a 100 execfile(rc:test.py) hello,world! 24eval(),exec,execfile()名字空间默认eval(),exec,execfi
13、le()所运行的代码都位于当前的名字空间中。eval(), exec,和 execfile()函数也可接受一个或两个可选字典参数作为代码执行的全局名字空间和局部名字空间Demo:globals = x: 7, y: 10, birds: Parrot, Swallow, Albatross locals = # 将上边的字典作为全局和局部名称空间 a = eval(3*x + 4*y, globals, locals) exec for b in birds: print b in globals, locals 注意语法 execfile(foo.py, globals, locals) e
14、xec是一个语句(就象print或while), 而eval()和execfile()则是内建函数. 25compile(str , ,kind )函数compile()将一个字符串编译为字节代码, str是将要被编译的字符串, 是定义该字符串变量的文件, kind参数指定了代码被编译的类型 single指单个语句, exec指多个语句, eval指一个表达式. 返回一个代码对象,该对象也可以被传递给eval()函数和exec语句来执行 预编译, 可以有效提高程序的执行效率 26递归Python对递归函数调用的次数作了限制.函数 sys.getrecursionlimit()返回当前允许的最大
15、递归次数,而函数sys.setrecursionlimit()可以改变该函数的返回值.默认的最大递归次数为1000.当一个函数递归次数超过最大递归次数时,就会引发RuntimeError异常. 27Python 模块模块:可把一个复杂的程序按功能分开,分别存放到不同文件中,使程序更容易维护和管理。Python中的模块是以.py结尾的Python代码文件。 通过import命令输入,如: import sys(和c中include语句似乎相似)该import语句共执行三步操作: 创建新的名称空间(namespace),该名称空间中拥有输入模块中定义的所有对象; 执行模块中的代码; 创建该名称空间
16、的变量名。28Python 模块import的使用:import as ftpfrom import FTP29Python脚本与模块python脚本和模块都是一个以.py结束的文件,那程序是如何判断一个.py文件是作为脚本还是模块呢?关键是一个名为_name_的变量,如果它的值是_main_,则是作为脚本直接运行,否则是做为模块运行的。if _name_ = “_main_”:main()30Python 包(package)我们可以把几个功能相近的模块组成一个Python包,存放到一个目录结构中,通过输入包的路径来调用对对象。例子: / WebDesign _init_.py design
17、.py draw.py其中_init_.py是包的初始化文件,可以为空,但是必不可少的。可以以下列方式引用design模块: import WebDesign.design31Python 类简单例子简单例子#!/usr/bin/python#-*- encoding:utf-8 -*-class test: #定义一个test类 desc = 这是一个测试类。 #在类中定义一个属性desc def _init_(self,name1): #对象构造函数,初始化类 1 = name1 def show(self,name2): #在类中定义一个方法show() print h
18、ello world print name1:,1 print name2:,name2调用调用obj = test(这是传递给name1的值) #生成test类的实例对象print obj.desc #调用类中的desc属性obj.show(这是传递给name2的值) #调用类中的show()方法32面向对象编程(基于对象) 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_
19、函数:每次生成类的时候都会执行的, self 指向类对象自身。记住, 类函数(或者叫做方法) 它的第一个参数 “self” 不要忘记写了foo_obj = Foo(Im A, Im B) foo_obj.show_a() foo_obj.b = Hello world! foo_obj.show_b()33 命名规范类的首字母首字母大写, 没有特别原因不要在前面加 “T” 或者 “C” 什么的函数和变量尽量全小写尽量全小写, 单词间下划线python命名规范(约定)命名规范(约定):类里面 “单下划线” 开始的成员变量叫做保护变量保护变量, 意思是只有类对象和子类对象自己能访问到这些变量; 而
20、 双下划线 开始的是私有成员私有成员, 意思是只有类对象自己能访问, 连子类对象也不能访问到这个数据。34使用私有成员的一个例子 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 # 哼哼, 等着报错吧, # # 只有 foo 自己 才可以 看见 _a fool_obj.set_a(Im A) print fool_obj.ge
21、t_a()35闲言碎语 Java:把对象里面的成员保护起来,程序员似乎养成了习惯。 “隐藏实现” ? python真正 隐藏实现 的方法, 就是重定义等号运算符用直接操作成员变量的方法来做 (用等号代替函数)真正漂亮、收放自如的程序敢于暴露自己的实现细节, 用最轻量级的方法来做事情轻量级的方法通常会很巧妙, 但不会很复杂。36继承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
22、def show_d(self): print self.d foo_obj.show_a() foo_obj.show_b() foo_obj.show_c() foo_obj.show_d()多重继承 class MBar(Foo1, Foo2, Foo3, .): .37继承 所谓继承就是让新的类, 子类得到父类 (就是那个 Foo) 的成员和功能。 但是最好不要忘记子类也需要一个 _init_ 函数, 把 a、b、c、d 这些成员都创建出来, 或者直接调用父类的 _init_ 函数来完成这件事情, 并且我们通常是这样做的。38简单的网络通信及即时聊天网络编程。不妨做一个即时聊天工具吧,
23、 不过这次的程序很简陋, 只能说是一个网络对讲机罢了。from SimpleXMLRPCServer import SimpleXMLRPCServer def foo():return Hello world! server = SimpleXMLRPCServer( (localhost, 8000) ) server.register_function(foo) server.serve_forever() 用 IE 来访问 看看我们得到了什么? 是一个出错页面, 不错, 这表示我们的服务器工作正常, 只是访问的方法不对而已。39客户机程序对应的客户机程序 from xmlrpclib
24、import ServerProxy server = ServerProxy() print server.foo()服务器返回了 Hello world!。这里 localhost 是指本机, 8000 是端口, 我们通常会指定大于 1024 的端口号。 localhost 我们通常会用域名 (机器名) 或 IP 来代替, 而端口号是任意的。 下面, 该传些东西了。比如发送一句话到服务器上去显示出来。40 服务端程序服务端程序from SimpleXMLRPCServer import SimpleXMLRPCServer def msg(s): print s return True s
25、erver = SimpleXMLRPCServer( (localhost, 8000) ) server.register_function(msg) server.serve_forever() 对应的客户机程序:对应的客户机程序: from xmlrpclib import ServerProxy server = ServerProxy() while True: msg = raw_input() server.msg(msg)41开个玩笑, 一个即时通信工具已经写好了。两台机器互相知道 IP 或者机器名, 协商好端口号。然后打开一个服务器、将客户机指向对方的服务器就可以了。 那么
26、怎么将客户端和服务器合并在一起呢? 因为调用 serve_forever() 之后程序就停在那里了, 所以无法再接收用户输入的东西了。42多线程编程 import thread from SimpleXMLRPCServer import SimpleXMLRPCServer from xmlrpclib import ServerProxy def msg(s): print s return True def run_server(): my_server = SimpleXMLRPCServer( (localhost, 8001) ) my_server.register_functi
27、on(msg) my_server.serve_forever() def run_client(): your_server = ServerProxy() while True: msg = raw_input() your_server.msg(msg) thread.start_new_thread( run_server, () ) run_client()43第二个差不多, 只是把地址互换 import thread from SimpleXMLRPCServer import SimpleXMLRPCServer from xmlrpclib import ServerProxy
28、 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(): your_server = ServerProxy() while True: msg = raw_input() your_server.msg(msg) thread.start_new_thread( run_server, () ) run_client()44这样, 一对对讲机就写好了图形界面: 用 T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宜昌市枝江市事业单位招考管理单位笔试遴选500模拟题附带答案详解
- 2025年安阳市汤阴县事业单位招考管理单位笔试遴选500模拟题附带答案详解
- 2025年安徽黄山市特种设备监督检验中心招聘6人历年管理单位笔试遴选500模拟题附带答案详解
- 2025-2030年中国染整设备行业发展趋势及投资战略决策报告
- 2025-2030年中国安防线缆整体市场供需现状及投资发展规划研究报告
- 2025-2030年中国出入境检验检疫行业市场分析报告
- 2024-2030年电动凭证装订机公司技术改造及扩产项目可行性研究报告
- 2024-2030年撰写:中国汽车车身及挂车制造项目风险评估报告
- 2024-2030年撰写:中国右旋反式丙炔菊酯项目风险评估报告
- 2024年度数据中心土地使用权购置代理合同6篇
- 背栓工艺课件
- 血流动力学监测ppt
- 消化内科诊疗指南和技术操作规范
- 检验科制度汇编
- 开题报告基于MSP430单片机的温湿度测量系统设计
- 固定技术规范-电缆保护管-MPP
- 铁路桥梁墩身施工专项方案
- 燃气-蒸汽联合循环机组详介
- 初中信息技术课程教学设计案例
- 计价格[1999]1283号_建设项目前期工作咨询收费暂行规定
- 展厅展馆中控系统解决方案
评论
0/150
提交评论