版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1Python2Python 基礎(chǔ)篇 -Life Is Short You Need PythonPython 簡介Python是一種開源的 、解析性的,面向?qū)ο蟮木幊陶Z言。 Python使用一種優(yōu)雅的語法,可讀性強(qiáng) Python支持類和多層繼承等的面向?qū)ο缶幊碳夹g(shù)。 Python可運(yùn)行在多種計(jì)算機(jī)平臺和操作系統(tǒng)中,如unix,windows,MacOS,OS/2等等3使用python安裝python, 請參閱:運(yùn)行python腳本:交互式運(yùn)行(在Windows平臺下有GUI界面)執(zhí)行python腳本文件在Linux/UNIX環(huán)境下運(yùn)行程序 。在python頭部加一行:#! /usr/loca
2、l/bin/pythonchmod +x my./my (當(dāng)然也可以直接以python myfile 方式執(zhí)行)4快速開始簡單語句print “hello world” 計(jì)算器1+1格式化字符串print The total is %0.2f %56.35985注釋 和 模塊注釋# 我是注釋“”“ 我的注釋 ”“”模塊import syssys.exit()6Python的數(shù)據(jù)類型變量的定義。在python中,變量的類型是由賦給它的數(shù)值定義的。q = 7 #q其為數(shù)值型變量q = “Seven” #q為字符串型變量基本數(shù)據(jù)類型:字符串,整數(shù),浮點(diǎn)數(shù),虛數(shù),布爾型。集合類型:列表(List),元
3、組(Tuple),字典(Dictionary或Hash)7Python的數(shù)據(jù)類型列表(List)List的定義。aList = 23 或者 bList = 1,2,3List的使用。可以像c語言中數(shù)據(jù)一樣引用list中的元素。print bList1 List常用操作:append, del, + ,*, len(list)0 * 58Python的數(shù)據(jù)類型:列表(方法)列表對象支持的方法(演示)append(x)count(x) :X在List中的個數(shù)extend(L)Index(x)insert(i,x)pop(x)remove(x) reverse() sort()9Python的數(shù)據(jù)類
4、型:元組(Tuple)Tuple的定義aTuple = (1, 3, 5)print aTuple元組可以用方括號括起下標(biāo)做索引元組一旦創(chuàng)建就不能改變 列表大部分操作同樣適用于元組10Python的數(shù)據(jù)類型:字典(Hash)字典是一個用大括號括起來的鍵值對,字典元素分為兩部份,鍵(key)和值。字典是python中唯一內(nèi)置映射數(shù)據(jù)類型。通過指定的鍵從字典訪問值。字典的使用:a = a:aa, b:bbac=cca.has_key(a)11Python的數(shù)據(jù)類型:字典(常用方法)字典的常用方法(演示):has_key(x) keys() values() items() clear() copy
5、() update(x) get(x,y)12Python 控制語句 ifPython支持三種不同的控制結(jié)構(gòu):if,for和while,不支持C語言中的switch語句。(1)if 語句的用法:if EXPRESSION1: STATEMENT1elif EXPRESSION2:STATEMENT2else: STATEMENT313Python 控制語句 forfor語句的用法:mylist = for statementfor word in mylist:print wordelse: #最終執(zhí)行 print End list14Python 控制語句 whilewhile語句的用法:a
6、 = 0while a 5: a = a + 1 print aelse:print as value is five15Python 循環(huán)中的控制語句break: 終止當(dāng)前循環(huán)continue: 終止本次循環(huán)pass: 什么事都不錯16Python 函數(shù)函數(shù)定義:def function_name(arg1,arg2,.):statementreturn value函數(shù)名:函數(shù)名必須以下劃線或字母下劃線或字母開頭,可以包含任意字母、數(shù)字或下劃線的組合。不能使用任何的標(biāo)點(diǎn)符號;函數(shù)名是區(qū)分大小寫的。函數(shù)名不能是保留字。17Python 函數(shù)作用域Python使用名稱空間的概念存儲對象,這個名稱
7、空間就是對象作用的區(qū)域, 不同對象存在于不同的作用域。不同對象的作用域規(guī)則不同對象的作用域規(guī)則:每個模塊都有自已的全局作用域。函數(shù)定義的對象屬局部作用域,只在函數(shù)內(nèi)有效,不會影響全局作用域中的對象。賦值對象屬局部作用域,除非使用global關(guān)鍵字進(jìn)行聲明。LGB規(guī)則大多數(shù)名字引用在三個作用域中查找:先局部(Local),次之全局(Global),再次之內(nèi)置(Build-in)。若仍然找不到這個變量名,則引發(fā)NameError異常. 18Python 函數(shù)參數(shù)函數(shù)的參數(shù)分類:默認(rèn)參數(shù):def function(ARG=VALUE)元組參數(shù):def function(*ARG)字典參數(shù):def f
8、unction(*ARG)一些規(guī)則:默認(rèn)值必須在非默認(rèn)參數(shù)之后;在單個函數(shù)定義中,只能使用一個tuple參數(shù)(*ARG)和一個字典參數(shù)(*ARG)。tuple參數(shù)必須在連接參數(shù)和默認(rèn)參數(shù)之后。字典參數(shù)必須在最后定義。19內(nèi)置特殊函數(shù)apply() 函數(shù)apply(func , args , kwargs ) 函數(shù)用于當(dāng)函數(shù)參數(shù)已經(jīng)存在于一個元組或字典中,間接地調(diào)用函數(shù). args是一個包含將要提供給函數(shù)的按位置傳遞的參數(shù)的元組. 如果省略了args,任何參數(shù)都不會被傳遞. kwargs是一個包含關(guān)鍵字參數(shù)的字典. foo(3,“x”, name=Dave, id=12345) apply(fo
9、o, (3,“x”), name: Dave, id: 12345 ) lambda操作符 lambda args: expression args是一個用逗號分隔的參數(shù), expressin是一個調(diào)用這些參數(shù)的表達(dá)式 20map(), zip(), reduce(), 和filter()t = map(func, s ) . 即ti = func(si). 需要注意的是, func函數(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,
10、sn) ? t3 = map(None, s1,s2,sn) ?zipls = zip(s1 , s2 , ., sn ) :ziplsi = (s1i , s2i , ., sni ). zip()函數(shù)取決于最短序列.reduce(func , s )函數(shù)從一個序列收集信息,然后只返回一個值(例如求和,最大值,等). b = reduce(sum, 1,2,3,4,) # b = (1+2)+3)+4) = 10 filter(func ,s)是個序列過慮器,使用func()函數(shù)來過濾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 )函數(shù)將字符串str當(dāng)成有效Python表達(dá)式來求值,并返回計(jì)算結(jié)果。 同樣地, exec語句將字符串str當(dāng)成有效Python代碼來執(zhí)行.提供給exec的代碼的名稱空間和exec語句的名稱空間相同. 最后,exec ,globals ,locals )函數(shù)可以用來執(zhí)行一個文件,看下面的例子: eval(3+4) 7 exec a=100 a 100 execfile(rc:test.py) hello,world! 24eval(),exec,execfile()名字空間默認(rèn)eval(),exec,execfi
13、le()所運(yùn)行的代碼都位于當(dāng)前的名字空間中。eval(), exec,和 execfile()函數(shù)也可接受一個或兩個可選字典參數(shù)作為代碼執(zhí)行的全局名字空間和局部名字空間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()則是內(nèi)建函數(shù). 25compile(str , ,kind )函數(shù)compile()將一個字符串編譯為字節(jié)代碼, str是將要被編譯的字符串, 是定義該字符串變量的文件, kind參數(shù)指定了代碼被編譯的類型 single指單個語句, exec指多個語句, eval指一個表達(dá)式. 返回一個代碼對象,該對象也可以被傳遞給eval()函數(shù)和exec語句來執(zhí)行 預(yù)編譯, 可以有效提高程序的執(zhí)行效率 26遞歸Python對遞歸函數(shù)調(diào)用的次數(shù)作了限制.函數(shù) sys.getrecursionlimit()返回當(dāng)前允許的最大
15、遞歸次數(shù),而函數(shù)sys.setrecursionlimit()可以改變該函數(shù)的返回值.默認(rèn)的最大遞歸次數(shù)為1000.當(dāng)一個函數(shù)遞歸次數(shù)超過最大遞歸次數(shù)時(shí),就會引發(fā)RuntimeError異常. 27Python 模塊模塊:可把一個復(fù)雜的程序按功能分開,分別存放到不同文件中,使程序更容易維護(hù)和管理。Python中的模塊是以.py結(jié)尾的Python代碼文件。 通過import命令輸入,如: import sys(和c中include語句似乎相似)該import語句共執(zhí)行三步操作: 創(chuàng)建新的名稱空間(namespace),該名稱空間中擁有輸入模塊中定義的所有對象; 執(zhí)行模塊中的代碼; 創(chuàng)建該名稱空間
16、的變量名。28Python 模塊import的使用:import as ftpfrom import FTP29Python腳本與模塊python腳本和模塊都是一個以.py結(jié)束的文件,那程序是如何判斷一個.py文件是作為腳本還是模塊呢?關(guān)鍵是一個名為_name_的變量,如果它的值是_main_,則是作為腳本直接運(yùn)行,否則是做為模塊運(yùn)行的。if _name_ = “_main_”:main()30Python 包(package)我們可以把幾個功能相近的模塊組成一個Python包,存放到一個目錄結(jié)構(gòu)中,通過輸入包的路徑來調(diào)用對對象。例子: / 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): #對象構(gòu)造函數(shù),初始化類 1 = name1 def show(self,name2): #在類中定義一個方法show() print h
18、ello world print name1:,1 print name2:,name2調(diào)用調(diào)用obj = test(這是傳遞給name1的值) #生成test類的實(shí)例對象print obj.desc #調(diào)用類中的desc屬性obj.show(這是傳遞給name2的值) #調(diào)用類中的show()方法32面向?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_
19、函數(shù):每次生成類的時(shí)候都會執(zhí)行的, self 指向類對象自身。記住, 類函數(shù)(或者叫做方法) 它的第一個參數(shù) “self” 不要忘記寫了foo_obj = Foo(Im A, Im B) foo_obj.show_a() foo_obj.b = Hello world! foo_obj.show_b()33 命名規(guī)范類的首字母首字母大寫, 沒有特別原因不要在前面加 “T” 或者 “C” 什么的函數(shù)和變量盡量全小寫盡量全小寫, 單詞間下劃線python命名規(guī)范(約定)命名規(guī)范(約定):類里面 “單下劃線” 開始的成員變量叫做保護(hù)變量保護(hù)變量, 意思是只有類對象和子類對象自己能訪問到這些變量; 而
20、 雙下劃線 開始的是私有成員私有成員, 意思是只有類對象自己能訪問, 連子類對象也不能訪問到這個數(shù)據(jù)。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 # 哼哼, 等著報(bào)錯吧, # # 只有 foo 自己 才可以 看見 _a fool_obj.set_a(Im A) print fool_obj.ge
21、t_a()35閑言碎語 Java:把對象里面的成員保護(hù)起來,程序員似乎養(yǎng)成了習(xí)慣。 “隱藏實(shí)現(xiàn)” ? python真正 隱藏實(shí)現(xiàn) 的方法, 就是重定義等號運(yùn)算符用直接操作成員變量的方法來做 (用等號代替函數(shù))真正漂亮、收放自如的程序敢于暴露自己的實(shí)現(xiàn)細(xì)節(jié), 用最輕量級的方法來做事情輕量級的方法通常會很巧妙, 但不會很復(fù)雜。36繼承class Bar(Fool): def _init_(self, a, b, c, d): Fool._init_(self, a, b) # 調(diào)用父類初始化 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_ 函數(shù), 把 a、b、c、d 這些成員都創(chuàng)建出來, 或者直接調(diào)用父類的 _init_ 函數(shù)來完成這件事情, 并且我們通常是這樣做的。38簡單的網(wǎng)絡(luò)通信及即時(shí)聊天網(wǎng)絡(luò)編程。不妨做一個即時(shí)聊天工具吧,
23、 不過這次的程序很簡陋, 只能說是一個網(wǎng)絡(luò)對講機(jī)罷了。from SimpleXMLRPCServer import SimpleXMLRPCServer def foo():return Hello world! server = SimpleXMLRPCServer( (localhost, 8000) ) server.register_function(foo) server.serve_forever() 用 IE 來訪問 看看我們得到了什么? 是一個出錯頁面, 不錯, 這表示我們的服務(wù)器工作正常, 只是訪問的方法不對而已。39客戶機(jī)程序?qū)?yīng)的客戶機(jī)程序 from xmlrpclib
24、import ServerProxy server = ServerProxy() print server.foo()服務(wù)器返回了 Hello world!。這里 localhost 是指本機(jī), 8000 是端口, 我們通常會指定大于 1024 的端口號。 localhost 我們通常會用域名 (機(jī)器名) 或 IP 來代替, 而端口號是任意的。 下面, 該傳些東西了。比如發(fā)送一句話到服務(wù)器上去顯示出來。40 服務(wù)端程序服務(wù)端程序from SimpleXMLRPCServer import SimpleXMLRPCServer def msg(s): print s return True s
25、erver = SimpleXMLRPCServer( (localhost, 8000) ) server.register_function(msg) server.serve_forever() 對應(yīng)的客戶機(jī)程序:對應(yīng)的客戶機(jī)程序: from xmlrpclib import ServerProxy server = ServerProxy() while True: msg = raw_input() server.msg(msg)41開個玩笑, 一個即時(shí)通信工具已經(jīng)寫好了。兩臺機(jī)器互相知道 IP 或者機(jī)器名, 協(xié)商好端口號。然后打開一個服務(wù)器、將客戶機(jī)指向?qū)Ψ降姆?wù)器就可以了。 那么
26、怎么將客戶端和服務(wù)器合并在一起呢? 因?yàn)檎{(diào)用 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這樣, 一對對講機(jī)就寫好了圖形界面: 用 T
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022幼兒園大班社會領(lǐng)域教學(xué)方案10篇
- 玻璃纖維薄片項(xiàng)目年終總結(jié)報(bào)告
- 民兵應(yīng)急分隊(duì)組織實(shí)施應(yīng)急演練
- 石河子大學(xué)《市場調(diào)查與預(yù)測實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《建筑設(shè)計(jì)》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《復(fù)變函數(shù)與積分變換》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《最優(yōu)控制》2022-2023學(xué)年期末試卷
- 沈陽理工大學(xué)《室內(nèi)設(shè)計(jì)原理》2021-2022學(xué)年第一學(xué)期期末試卷
- 釀酒機(jī)器行業(yè)分析研究報(bào)告
- 糖糖尿病足的護(hù)理
- 2024江蘇省沿海開發(fā)集團(tuán)限公司招聘23人高頻難、易錯點(diǎn)500題模擬試題附帶答案詳解
- 2024年計(jì)算機(jī)二級WPS考試題庫380題(含答案)
- 22G101三維彩色立體圖集
- 大學(xué)生安全文化智慧樹知到期末考試答案章節(jié)答案2024年中南大學(xué)
- 建筑施工安全生產(chǎn)治本攻堅(jiān)三年行動方案(2024-2026年)
- 人教版小學(xué)英語單詞表(完整版)
- DL-T 1476-2023 電力安全工器具預(yù)防性試驗(yàn)規(guī)程
- 國家開放大學(xué)《心理健康教育》形考任務(wù)1-9參考答案
- MOOC 法理學(xué)-西南政法大學(xué) 中國大學(xué)慕課答案
- 《短視頻拍攝與制作》課件-3短視頻拍攝的三大技巧
- 【川教版】《生命 生態(tài) 安全》四上第11課《預(yù)防流感》課件
評論
0/150
提交評論