Python培訓(xùn)(課堂PPT)_第1頁
Python培訓(xùn)(課堂PPT)_第2頁
Python培訓(xùn)(課堂PPT)_第3頁
Python培訓(xùn)(課堂PPT)_第4頁
Python培訓(xùn)(課堂PPT)_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1Python培訓(xùn)培訓(xùn)Python基本語法與編程基本語法與編程2目標目標使用使用 Python.3Python 基礎(chǔ)篇基礎(chǔ)篇 -Life Is Short You Need PythonPython 簡介簡介Python是一種開源的是一種開源的 、解析、解析性的,面向?qū)ο蟮木幊陶Z言。性的,面向?qū)ο蟮木幊陶Z言。 Python使用一種優(yōu)雅的語法,可讀性強使用一種優(yōu)雅的語法,可讀性強 Python支持類和多層繼承等的面向?qū)ο缶幊讨С诸惡投鄬永^承等的面向?qū)ο缶幊碳夹g(shù)。技術(shù)。 Python可運行在多種計算機平臺和操作系統(tǒng)可運行在多種計算機平臺和操作系統(tǒng)中,如中,如unix,windows,MacOS,O

2、S/2等等等等4使用使用python安裝安裝python, 請參閱請參閱:運行運行python腳本腳本:交互式運行交互式運行(在在Windows平臺下有平臺下有GUI界面)界面)執(zhí)行執(zhí)行python腳本文件腳本文件在在Linux/UNIX環(huán)境下運行程序環(huán)境下運行程序 。在在python頭部加一行:頭部加一行:#! /usr/local/bin/pythonchmod +x myfile.py./myfile.py (當(dāng)然也可以直接以當(dāng)然也可以直接以python myfile 方式執(zhí)行方式執(zhí)行)5快速開始簡單語句快速開始簡單語句print “hello w

3、orld” 計算器計算器1+1格式化字符串格式化字符串print The total is %0.2f %56.35986注釋注釋 和和 模塊模塊注釋注釋# 我是注釋我是注釋“”“”“ 我的注釋我的注釋 ”“”“”模塊模塊import syssys.exit()7Python的數(shù)據(jù)類型的數(shù)據(jù)類型變量的定義。在變量的定義。在python中,變量的類型是由中,變量的類型是由賦給它的數(shù)值定義的。賦給它的數(shù)值定義的。q = 7 #q其為數(shù)值型變量其為數(shù)值型變量q = “Seven” #q為字符串型變量為字符串型變量基本數(shù)據(jù)類型基本數(shù)據(jù)類型:字符串,整數(shù),浮點數(shù),虛數(shù),字符串,整數(shù),浮點數(shù),虛數(shù),布爾型

4、。布爾型。集合類型:列表(集合類型:列表(List),元組(元組(Tuple),字典字典(Dictionary或或Hash)8Python的數(shù)據(jù)類型的數(shù)據(jù)類型列表(列表(List)List的定義。的定義。aList = 23 或者或者 bList = 1,2,3List的使用。可以像的使用??梢韵馽語言中數(shù)據(jù)一樣引用語言中數(shù)據(jù)一樣引用list中的元素。中的元素。print bList1 List常用操作:常用操作:append, del, + ,*, len(list)0 * 59Python的數(shù)據(jù)類型的數(shù)據(jù)類型:列表(方法列表(方法)列表對象支持的方法列表對象支持的方法(演示)演示)appe

5、nd(x)count(x) :X在在List中的個數(shù)中的個數(shù)extend(L)Index(x)insert(i,x)pop(x)remove(x) reverse() sort()10Python的數(shù)據(jù)類型的數(shù)據(jù)類型:元組(元組(Tuple)Tuple的定義的定義aTuple = (1, 3, 5)print aTuple元組可以用方括號括起下標做索引元組可以用方括號括起下標做索引元組一旦創(chuàng)建就不能改變元組一旦創(chuàng)建就不能改變 列表大部分操作同樣適用于元組列表大部分操作同樣適用于元組11Python的數(shù)據(jù)類型的數(shù)據(jù)類型:字典(字典(Hash)字典是一個用大括號括起來的鍵值對,字典元字典是一個用大

6、括號括起來的鍵值對,字典元素分為兩部份,鍵素分為兩部份,鍵(key)和值。和值。字典是字典是python中唯一內(nèi)置映射數(shù)據(jù)類型。通中唯一內(nèi)置映射數(shù)據(jù)類型。通過指定的鍵從字典訪問值。過指定的鍵從字典訪問值。字典的使用字典的使用:a = a:aa, b:bbac=cca.has_key(a)12Python的數(shù)據(jù)類型的數(shù)據(jù)類型:字典(常用方法字典(常用方法)字典的常用方法(演示):字典的常用方法(演示):has_key(x) keys() values() items() clear() copy() update(x) get(x,y)13Python 控制語句控制語句 ifPython支持三種

7、不同的控制結(jié)構(gòu):支持三種不同的控制結(jié)構(gòu):if,for和和while,不支持,不支持C語言中的語言中的switch語句。語句。(1)if 語句的用法:語句的用法:if EXPRESSION1: STATEMENT1elif EXPRESSION2:STATEMENT2else: STATEMENT314Python 控制語句控制語句 forfor語句的用法:語句的用法:mylist = for statementfor word in mylist:print wordelse: #最終執(zhí)行最終執(zhí)行 print End list15Python 控制語句控制語句 whilewhile語句的用法:

8、語句的用法:a = 0while a 5: a = a + 1 print aelse:print as value is five16Python 循環(huán)中的控制語句循環(huán)中的控制語句break: 終止當(dāng)前循環(huán)終止當(dāng)前循環(huán)continue: 終止本次循環(huán)終止本次循環(huán)pass: 什么事都不錯什么事都不錯17Python 函數(shù)函數(shù)函數(shù)定義:函數(shù)定義:def function_name(arg1,arg2,.):statementreturn value函數(shù)名:函數(shù)名:函數(shù)名必須以下劃線或字母開頭,可以包含任意函數(shù)名必須以下劃線或字母開頭,可以包含任意字母、數(shù)字或下劃線的組合。不能使用任何的標字母、數(shù)

9、字或下劃線的組合。不能使用任何的標點符號;點符號;函數(shù)名是區(qū)分大小寫的。函數(shù)名是區(qū)分大小寫的。函數(shù)名不能是保留字。函數(shù)名不能是保留字。18Python 函數(shù)作用域函數(shù)作用域Python使用名稱空間的概念存儲對象,這個名稱空間就使用名稱空間的概念存儲對象,這個名稱空間就是對象作用的區(qū)域,是對象作用的區(qū)域, 不同對象存在于不同的作用域。不同對象存在于不同的作用域。不同對象的作用域規(guī)則:不同對象的作用域規(guī)則:每個模塊都有自已的全局作用域。每個模塊都有自已的全局作用域。函數(shù)定義的對象屬局部作用域,只在函數(shù)內(nèi)有效,不會影函數(shù)定義的對象屬局部作用域,只在函數(shù)內(nèi)有效,不會影響全局作用域中的對象。響全局作用域

10、中的對象。賦值對象屬局部作用域,除非使用賦值對象屬局部作用域,除非使用global關(guān)鍵字進行聲關(guān)鍵字進行聲明。明。LGB規(guī)則規(guī)則大多數(shù)名字引用在三個作用域中查找:先局部大多數(shù)名字引用在三個作用域中查找:先局部(Local),次之全局次之全局(Global),再次之內(nèi)置,再次之內(nèi)置(Build-in)。若仍然找。若仍然找不到這個變量名不到這個變量名,則引發(fā)則引發(fā)NameError異常異常. 19Python 函數(shù)參數(shù)函數(shù)參數(shù)函數(shù)的參數(shù)分類:函數(shù)的參數(shù)分類:默認參數(shù):默認參數(shù):def function(ARG=VALUE)元組參數(shù):元組參數(shù):def function(*ARG)字典參數(shù):字典參數(shù):

11、def function(*ARG)一些規(guī)則:一些規(guī)則:默認值必須在非默認參數(shù)之后;默認值必須在非默認參數(shù)之后;在單個函數(shù)定義中,只能使用一個在單個函數(shù)定義中,只能使用一個tuple參數(shù)(參數(shù)(*ARG)和一個字典參數(shù)()和一個字典參數(shù)(*ARG)。)。tuple參數(shù)必須在連接參數(shù)和默認參數(shù)之后。參數(shù)必須在連接參數(shù)和默認參數(shù)之后。字典參數(shù)必須在最后定義。字典參數(shù)必須在最后定義。20內(nèi)置特殊函數(shù)內(nèi)置特殊函數(shù)apply() 函數(shù)函數(shù)apply(func , args , kwargs ) 函數(shù)用于當(dāng)函數(shù)參數(shù)已經(jīng)存在于一個元組或字典函數(shù)用于當(dāng)函數(shù)參數(shù)已經(jīng)存在于一個元組或字典中,間接中,間接地地調(diào)用函

12、數(shù)調(diào)用函數(shù). args是一個包含將要提供是一個包含將要提供給函數(shù)的按位置傳遞的參數(shù)的元組給函數(shù)的按位置傳遞的參數(shù)的元組. 如果省略了如果省略了args,任何參數(shù)都不會被傳遞任何參數(shù)都不會被傳遞. kwargs是一個是一個包含關(guān)鍵字參數(shù)的字典包含關(guān)鍵字參數(shù)的字典. foo(3,“x”, name=Dave, id=12345) apply(foo, (3,“x”), name: Dave, id: 12345 ) lambda操作符操作符 lambda args: expression args是一個用逗號分隔的參數(shù)是一個用逗號分隔的參數(shù), expressin是一是一個調(diào)用這些參數(shù)的表達式個調(diào)用

13、這些參數(shù)的表達式 21map(), zip(), reduce(), 和和filter()t = map(func, s ) . 即即ti = func(si). 需要注意的是需要注意的是, func函數(shù)必須有且只有一個參數(shù)函數(shù)必須有且只有一個參數(shù) 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()函數(shù)取決于最短序列函數(shù)取決于最短序列.reduce(func , s )函數(shù)從一個序列收集信息函數(shù)從一個序列收集信息,然后只返回一個值然后只返回一個值(例如例如求和求和,最大值最大值,等等). b = reduce(sum, 1,2,3,4,) # b = (1+2)+3)+4) = 10 filter(func ,s)是個序列過慮器,使用是個序列過慮器,使用func()函數(shù)來過濾函數(shù)來過濾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 )函數(shù)將字符串函數(shù)將字符串str當(dāng)成有效當(dāng)成有效Python表達式來求值,并返回計算結(jié)果。表達式來求值,并返回計算結(jié)果。 同樣地同樣地, exec語句將字符串語句將字符串str當(dāng)成有效當(dāng)成有效Python代碼來執(zhí)行代碼來執(zhí)行.提供給提供給exec的代碼的名稱空間和的代碼的名稱空間和exec語句的名稱空間相同語句的名稱空間相同. 最后,最后,execfile(filename ,globals ,locals )函數(shù)可以用函數(shù)可以用來執(zhí)行一個文件來執(zhí)行一個文件,看下面的例子看下面的例子: eval(3+4) 7 exec a=100 a 100 exe

17、cfile(rc:test.py) hello,world! 25eval(),exec,execfile()名字空間名字空間默認默認eval(),exec,execfile()所運行的代碼都位于當(dāng)前的所運行的代碼都位于當(dāng)前的名字空間中。名字空間中。eval(), exec,和和 execfile()函數(shù)也可接受函數(shù)也可接受一個或兩個可選字典參數(shù)作為代碼執(zhí)行的全局名字空一個或兩個可選字典參數(shù)作為代碼執(zhí)行的全局名字空間和局部名字空間間和局部名字空間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()則是內(nèi)建函數(shù)則是內(nèi)建函數(shù). 26compile(str ,filename ,kind )函數(shù)函數(shù)compile()將一個字符串編譯為字節(jié)代碼將一個字符串編譯為字節(jié)代碼,

19、str是將要被編譯的字符串是將要被編譯的字符串,filename是定義該字符串變量的文件,是定義該字符串變量的文件,kind參數(shù)指定了代碼被編譯的類型參數(shù)指定了代碼被編譯的類型single指單個語句指單個語句, exec指多個語句指多個語句, eval指一個表達式指一個表達式. 返回一個代碼對象,該對象也可以被傳遞給返回一個代碼對象,該對象也可以被傳遞給eval()函函數(shù)和數(shù)和exec語句來執(zhí)行語句來執(zhí)行 預(yù)編譯預(yù)編譯, 可以有效提高程序的執(zhí)行效率可以有效提高程序的執(zhí)行效率 27遞歸遞歸Python對遞歸函數(shù)調(diào)用的次數(shù)作了限制對遞歸函數(shù)調(diào)用的次數(shù)作了限制.函數(shù)函數(shù) sys.getrecursi

20、onlimit()返回當(dāng)前允許的最返回當(dāng)前允許的最大遞歸次數(shù)大遞歸次數(shù),而函數(shù)而函數(shù)sys.setrecursionlimit()可以改變該函數(shù)的可以改變該函數(shù)的返回值返回值.默認的最大遞歸次數(shù)為默認的最大遞歸次數(shù)為1000.當(dāng)一個函數(shù)遞歸次數(shù)超當(dāng)一個函數(shù)遞歸次數(shù)超過最大遞歸次數(shù)時過最大遞歸次數(shù)時,就會引發(fā)就會引發(fā)RuntimeError異常異常. 28Python 模塊模塊模塊:可把一個復(fù)雜的程序按功能分開,分別存放到不同模塊:可把一個復(fù)雜的程序按功能分開,分別存放到不同文件中,使程序更容易維護和管理。文件中,使程序更容易維護和管理。Python中的模塊是以中的模塊是以.py結(jié)尾的結(jié)尾的Py

21、thon代碼文件。代碼文件。 通過通過import命令輸入,如:命令輸入,如: import sys(和(和c中中include語句似乎相似語句似乎相似)該該import語句共執(zhí)行三步操作:語句共執(zhí)行三步操作:創(chuàng)建新的名稱空間(創(chuàng)建新的名稱空間(namespace),該名稱空間中),該名稱空間中擁有輸入模塊中定義的所有對象;擁有輸入模塊中定義的所有對象;執(zhí)行模塊中的代碼;執(zhí)行模塊中的代碼;創(chuàng)建該名稱空間的變量名。創(chuàng)建該名稱空間的變量名。29Python 模塊模塊import的使用的使用:import ftplib as ftpfrom ftplib import FTP30Python腳本與模

22、塊腳本與模塊python腳本和模塊都是一個以腳本和模塊都是一個以.py結(jié)束的文件,那程結(jié)束的文件,那程序是如何判斷一個序是如何判斷一個.py文件是作為腳本還是模塊呢?文件是作為腳本還是模塊呢?關(guān)鍵是一個名為關(guān)鍵是一個名為_name_的變量,如果它的值是的變量,如果它的值是_main_,則是作為腳本直接運行,否則是做為模,則是作為腳本直接運行,否則是做為模塊運行的。塊運行的。if _name_ = “_main_”:main()31Python 包包(package)我們可以把幾個功能相近的模塊組成一個我們可以把幾個功能相近的模塊組成一個Python包,存包,存放到一個目錄結(jié)構(gòu)中,通過輸入包的路

23、徑來調(diào)用對對象。放到一個目錄結(jié)構(gòu)中,通過輸入包的路徑來調(diào)用對對象。例子:例子: / WebDesign _init_.py design.py draw.py其中其中_init_.py是包的初始化文件,可以為空,但是是包的初始化文件,可以為空,但是必不可少的。必不可少的??梢砸韵铝蟹绞揭每梢砸韵铝蟹绞揭胐esign模塊:模塊:import WebDesign.design32Python 類類簡單例子簡單例子#!/usr/bin/python#-*- encoding:utf-8 -*-class test: #定義一個定義一個test類類 desc = 這是一個測試類。這是一個測試類。

24、#在類中定義一個屬性在類中定義一個屬性desc def _init_(self,name1): #對象構(gòu)造函數(shù),初始化類對象構(gòu)造函數(shù),初始化類 1 = name1 def show(self,name2): #在類中定義一個方法在類中定義一個方法show() print hello world print name1:,1 print name2:,name2調(diào)用調(diào)用obj = test(這是傳遞給這是傳遞給name1的值的值) #生成生成test類的實例對象類的實例對象print obj.desc #調(diào)用類中的調(diào)用類中的desc屬性屬性obj.show(這

25、是傳遞給這是傳遞給name2的值的值) #調(diào)用類中的調(diào)用類中的show()方法方法33面向?qū)ο缶幊蹋ɑ趯ο螅┟嫦驅(qū)ο缶幊蹋ɑ趯ο螅?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_ 函數(shù):每次生成類的時候都會執(zhí)行的函數(shù):每次生成類的時候都會執(zhí)行的, self 指向類對象自身。指向類對象自身。記住記住, 類函數(shù)類函數(shù)(或者叫做方法或者叫做方法) 它的第一個參數(shù)它的第一個參數(shù) “self” 不要

26、忘記寫了不要忘記寫了foo_obj = Foo(Im A, Im B) foo_obj.show_a() foo_obj.b = Hello world! foo_obj.show_b()34 命名規(guī)范命名規(guī)范類的首字母大寫類的首字母大寫, 沒有特別原因不要在前面加沒有特別原因不要在前面加 “T” 或者或者 “C” 什么的什么的函數(shù)和變量盡量全小寫函數(shù)和變量盡量全小寫, 單詞間下劃線單詞間下劃線python命名規(guī)范(約定):命名規(guī)范(約定):類里面類里面 “單下劃線單下劃線” 開始的成員變量叫做保護變量開始的成員變量叫做保護變量, 意意思是只有類對象和子類對象自己能訪問到這些變量思是只有類對象

27、和子類對象自己能訪問到這些變量; 而而 雙下劃線雙下劃線 開始的是私有成員開始的是私有成員, 意思是只有類對象自意思是只有類對象自己能訪問己能訪問, 連子類對象也不能訪問到這個數(shù)據(jù)。連子類對象也不能訪問到這個數(shù)據(jù)。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:把對象里面的成員保護起來:把對象里面的成員保護起來,程序員似乎養(yǎng)成了習(xí)程序員似乎養(yǎng)成了習(xí)慣。慣。 “隱藏實現(xiàn)隱藏實現(xiàn)” ? python真正真正 隱藏實現(xiàn)隱藏實現(xiàn) 的方法的方法, 就是重定義等號運算符就是重定義等號運算符用直接操作成員變量的方法來做用直接操作成員變量的方法來做 (用等號代替函數(shù)用等號代替函數(shù))真正漂亮、收放自如的程序敢于暴露自己的實現(xiàn)細節(jié)真正漂亮、收放自如的程

29、序敢于暴露自己的實現(xiàn)細節(jié), 用用最輕量級的方法來做事情最輕量級的方法來做事情輕量級的方法輕量級的方法通常會很巧妙通常會很巧妙, 但不會很復(fù)雜。但不會很復(fù)雜。37繼承繼承class Bar(Fool): def _init_(self, a, b, c, d): Fool._init_(self, a, b) # 調(diào)用父類初始化調(diào)用父類初始化 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_ 函數(shù)函數(shù), 把把 a、b、c、d 這些成員都這些成員都創(chuàng)建出來創(chuàng)建出來, 或者直接調(diào)用父類的或者直接調(diào)用父類的 _init_ 函數(shù)來完成函數(shù)來完成這件事情這件事情, 并且我們通常是這樣做的。并且我們通常是這樣做的。39簡單的網(wǎng)絡(luò)通信及即時聊天簡單的

31、網(wǎng)絡(luò)通信及即時聊天網(wǎng)絡(luò)編程。不妨做一個即時聊天工具吧網(wǎng)絡(luò)編程。不妨做一個即時聊天工具吧, 不過這次的程序很簡陋不過這次的程序很簡陋, 只只能說是一個網(wǎng)絡(luò)對講機罷了。能說是一個網(wǎng)絡(luò)對講機罷了。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 看看我們得到了什么看看我們得到了什么? 是是一個出錯頁面一個出錯頁面, 不錯不錯, 這表示我們的服務(wù)器工作正常這表示我們的服務(wù)器工作正常, 只是訪問的方法只是訪問的方法不對而已。不對而已。40客戶機程序客戶機程序?qū)?yīng)的客戶機程序?qū)?yīng)的客戶機程序 from xmlrpclib import ServerProxy server = ServerProxy(http:/localhost:8000) print server.foo()服務(wù)器返回了服務(wù)器返回了 Hello world!。這里。這里 localhost 是指是指本機本機, 8000 是端口是端口, 我們通常會指

33、定大于我們通常會指定大于 1024 的端口號。的端口號。 localhost 我們通常會用域名我們通常會用域名 (機器名機器名) 或或 IP 來代替來代替, 而端口號是任意的。而端口號是任意的。 下面下面, 該傳些東西了。比如發(fā)送一句話到服務(wù)器上去顯示該傳些東西了。比如發(fā)送一句話到服務(wù)器上去顯示出來。出來。41 服務(wù)端程序服務(wù)端程序from SimpleXMLRPCServer import SimpleXMLRPCServer def msg(s): print s return True server = SimpleXMLRPCServer( (localhost, 8000) ) se

34、rver.register_function(msg) server.serve_forever() 對應(yīng)的客戶機程序:對應(yīng)的客戶機程序: from xmlrpclib import ServerProxy server = ServerProxy(http:/localhost:8000) while True: msg = raw_input() server.msg(msg)42開個玩笑開個玩笑, 一個即時通信工具已經(jīng)寫好了。兩一個即時通信工具已經(jīng)寫好了。兩臺機器互相知道臺機器互相知道 IP 或者機器名或者機器名, 協(xié)商好端口協(xié)商好端口號。然后打開一個服務(wù)器、將客戶機指向?qū)Ψ教?。然后打開

35、一個服務(wù)器、將客戶機指向?qū)Ψ降姆?wù)器就可以了。的服務(wù)器就可以了。 那么怎么將客戶端和服務(wù)器合并在一起呢那么怎么將客戶端和服務(wù)器合并在一起呢? 因為調(diào)用因為調(diào)用 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) 然后把剛才的網(wǎng)絡(luò)部分加上去。然后把剛才的網(wǎng)絡(luò)部分加上去。46 import thread from SimpleXMLRPCSe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論