Linux系統(tǒng)與大數(shù)據(jù)應用 課件 第7章 Linux系統(tǒng)下的Python基礎_第1頁
Linux系統(tǒng)與大數(shù)據(jù)應用 課件 第7章 Linux系統(tǒng)下的Python基礎_第2頁
Linux系統(tǒng)與大數(shù)據(jù)應用 課件 第7章 Linux系統(tǒng)下的Python基礎_第3頁
Linux系統(tǒng)與大數(shù)據(jù)應用 課件 第7章 Linux系統(tǒng)下的Python基礎_第4頁
Linux系統(tǒng)與大數(shù)據(jù)應用 課件 第7章 Linux系統(tǒng)下的Python基礎_第5頁
已閱讀5頁,還剩129頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Linux系統(tǒng)與大數(shù)據(jù)應用1Linux系統(tǒng)概述第章本章內(nèi)容1.1認識Linux系統(tǒng)1.2

Linux系統(tǒng)的發(fā)展1.3Ubuntu介紹1.4Linux系統(tǒng)下大數(shù)據(jù)平臺1.5本章小結7.1Linux中的Python

Python的優(yōu)點1.簡單、易學:Python程序看上去簡單易懂,python雖然是用c語言寫的,但是它擯棄了c中非常復雜的指針,簡化了python的語法。2.面向?qū)ο螅篜ython既支持面向過程的函數(shù)編程也支持面向?qū)ο蟮某橄缶幊?。在面向過程的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構建起來的。在面向?qū)ο蟮恼Z言中,程序是由數(shù)據(jù)和功能組合而成的對象構建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強大又簡單的方式實現(xiàn)面向?qū)ο缶幊獭?.可移植性:由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺上,經(jīng)過改動使它能夠在不同平臺上工作。如果你不使用Python對系統(tǒng)依賴的特性,那么所有Python程序無需修改就可以在下述任何平臺上面運行。7.1Linux中的Python

Python的優(yōu)點4.自由、開源:Python是開放源碼軟件之一。你可以自由地發(fā)布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的自由軟件中。Python具有超高的靈活性、應用性。5.可擴展性和可嵌入性:如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然后在你的Python程序中使用它們。你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。6.豐富的庫:Python標準庫十分龐大。python有可定義的第三方庫可以使用。它可以處理各種工作,除了標準庫以外,還有許多其他高質(zhì)量的庫,如wxPython、Twisted和Python圖像庫等等。7.1Linux中的Python

Python的缺點1.運行速度慢:java和c都是編譯型語言,Python是解釋型語言。編譯型語言在程序執(zhí)行之前,有一個單獨的編譯過程,將程序翻譯成機器語言,以后執(zhí)行這個程序的時候,就不用再進行翻譯了。解釋型語言,是在運行的時候?qū)⒊绦蚍g成機器語言,所以運行速度相對于編譯型語言要慢。2.不能加密:因為Python是開源性的編程語言,所以在源代碼的保密方面有很大的問題。7.1Linux中的Python

第一個Python小程序o打開Ubuntu終端,輸入python(該Ubuntu版本為16.04,Python版本為2.7.12)o輸入print(‘helloPython’)oPrint(‘helloPython’)o輸出結果為:helloPython7.1Linux中的Python

第一個Python小程序【例7-1】定義兩個整型變量并做乘法運算:在編譯過程中,python會記住你定義、賦值的所有變量,按Ctrl+D退出后,python會釋放所有變量和命令。7.1Linux中的Python

lPython是一個python的交互式shell,比默認的pythonshell好用得多,支持變量自動補全,自動縮進,支持bashshell命令,內(nèi)置了許多很有用的功能和函數(shù)。(在Python3.0版本中Ubuntu系統(tǒng)自帶IPython,而Python2.7版本中IPython需要自行安裝,下面介紹在Python2.7版本中如何安裝IPython)。

IPython安裝

打開終端,輸入命令行sudoaptinstallpython-pip

sudoaptinstallpython-pip輸入命令行sudoaptinstallipythonsudoaptinstallipython輸入ipython進入應用界面(按Ctrl+D可以退出IPython)

lPython工具7.2.1基本數(shù)據(jù)類型計算機可以處理數(shù)值以及視頻、音頻、圖片、文字等各種各樣的數(shù)據(jù),在Python中可以直接識別的基本類型有整型、浮點型、字符串。這三種數(shù)據(jù)類型將在下面用實例進行講解。7.2.1基本數(shù)據(jù)類型基本數(shù)據(jù)類型整型:Python可以處理任意大小的整數(shù),在程序中的表示方法和數(shù)學上的寫法一模一樣,通常被稱為是整型或整數(shù),是正或負整數(shù),不帶小數(shù)點。例如:1、10、100、-1、0浮點型:浮點數(shù)也就是小數(shù),之所以稱為浮點數(shù),是因為按照科學記數(shù)法表示時,一個浮點數(shù)的小數(shù)點位置是可變的,例如:1.1、2.2.在命令中用float定義浮點型。長整型:無限大小的整數(shù),整數(shù)最后是一個大寫或小寫的L。復數(shù):復數(shù)的虛部以字母J或

j結尾

。如:2+3i字符串:字符串是以單引號或雙引號括起來的任意文本,比如'a',"b"等等。請注意,單引號或雙引號本身只是一種表示方式,不是字符串的一部分。

如果‘或“為字符串的一部分,需要輸出‘或“,需要把‘或“包含在單引號或者雙引號之內(nèi),但是需要注意不能包含相同的引號。

print(“i’magoodboy”)

輸出結果為:

i'magoodboy

如果字符串中既包含單引號又包含雙引號,需要轉義字符‘\’,如下:

print(“i\’magoodboy”)

輸出結果為:

i'magoodboy

轉義字符可以轉義很多字符,轉義字符‘\’本身也同樣需要轉義,‘\n’表示換行,‘\t’表示制表符。如下:

print(“\\\n\\”“\t\\”)

輸出結果為:

\\ \7.2.1基本數(shù)據(jù)類型轉義字符表,如表7-1所示:表7-1 轉義字符表2. Python列表序列是Python中最基本的數(shù)據(jù)結構。序列中的每個元素都分配一個數(shù)字-它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。Python有6個序列的內(nèi)置類型,但最常見的是列表和元組。序列都可以進行的操作包括索引,切片,加,乘,檢查成員。此外,Python已經(jīng)內(nèi)置確定序列的長度以及確定最大和最小的元素的方法。列表是最常用的Python數(shù)據(jù)類型,它可以作為一個方括號內(nèi)的逗號分隔值出現(xiàn)。列表的數(shù)據(jù)項不需要具有相同的類型。創(chuàng)建一個列表,只要把逗號分隔的不同的數(shù)據(jù)項使用方括號括起來即可?!纠?-2】創(chuàng)建列表list1=['python','software',1997,2000];list2=[1,2,3,4,5];list3=["a","b","c","d"];

與字符串的索引一樣,列表索引從0開始。列表可以進行截取、組合等。7.2.1基本數(shù)據(jù)類型【例7-3】訪問列表中的值:使用下標索引來訪問列表中的值list1=['python','software',1997,2000];list2=[1,2,3,4,5,6,7];print"list1[0]:",list1[0]print"list2[1:5]:",list2[1:5]

輸出結果如圖7-3所示:7.2.1基本數(shù)據(jù)類型【例7-4】更新列表list=['physics','chemistry',1997,2000];print"Valueavailableatindex2:"printlist[2];list[2]=2001;print"Newvalueavailableatindex2:"printlist[2];

輸出結果如圖7-4所示:7.2.1基本數(shù)據(jù)類型【例7-5】刪除列表元素:可以用del語句刪除列表元素list1=['physics','chemistry',1997,2000];printlist1;dellist1[2];print"Afterdeletingvalueatindex2:"printlist1;輸出結果如圖7-5所示:7.2.1基本數(shù)據(jù)類型7.2.1基本數(shù)據(jù)類型在讀取列表的元素時,例如:創(chuàng)建一個列表L=[...],L[1]讀取的是列表中第二個元素;L[2]讀取的是列表中第三個元素;L[-1]讀取的是列表中倒數(shù)第一個元素。在Python中包含以下函數(shù),如表7-2所示:表7-2python包含的函數(shù)函數(shù)作用cmp(list1,list2)比較兩個列表的元素len(list)統(tǒng)計列表元素個數(shù)max(list)返回列表元素最大值min(list)返回列表元素最小值7.2.1基本數(shù)據(jù)類型函數(shù)運行實例如圖7-3.7.2.1基本數(shù)據(jù)類型3. python元組

Python的元組與列表類似,不同之處在于元組的元素不能修改。元組使用小括號,列表使用方括號。元組創(chuàng)建很簡單,只需要在括號中添加元素,并使用逗號隔開即可。如下實例:tup1=('physics','chemistry',1997,2000);tup2=(1,2,3,4,5);tup3="a","b","c","d";

創(chuàng)建空元組tup1=();

元組中只包含一個元素時,需要在元素后面添加逗號tup1=(50,);元組與字符串類似,下標索引從0開始,可以進行截取,組合等。(1)訪問元組7.2.1基本數(shù)據(jù)類型【例7-6】元組可以使用下標索引來訪問元組中的值。tup1=('physics','chemistry',1997,2000);tup2=(1,2,3,4,5,6,7);print"tup1[0]:",tup1[0]print"tup2[1:5]:",tup2[1:5]

輸出結果如圖7-7所示:7.2.1基本數(shù)據(jù)類型(2)修改元組【例7-7】元組中的元素值是不允許修改的,但我們可以對元組進行連接組合.tup1=(12,34.56);tup2=('abc','xyz');#以下修改元組元素操作是非法的。#tup1[0]=100;#創(chuàng)建一個新的元組tup3=tup1+tup2;printtup3;

輸出結果如圖7-8所示:7.2.1基本數(shù)據(jù)類型(3)刪除元組【例7-8】元組中的元素值是不允許刪除的,但我們可以使用del語句來刪除整個元組。tup=('physics','chemistry',1997,2000);printtup;deltup;print"Afterdeletingtup:"printtup;

以上實例元組被刪除后,輸出變量會有異常信息,輸出如圖7-9所示:7.2.1基本數(shù)據(jù)類型(4)元組運算符與字符串一樣,元組之間可以使用+號和*號進行運算。這就意味著他們可以組合和復制,運算后會生成一個新的元組。元組運算符,如表7-3所示。(5)無關閉分隔符運算符結果作用len((1,2,3))3計算元素個數(shù)(1,2,3)+(4,5,6)(1,2,3,4,5,6)連接['Hi!']*4['Hi!','Hi!','Hi!','Hi!']復制3in(1,2,3)True元素是否存在forxin(1,2,3):printx,123迭代表7-3元組運算符7.2.1基本數(shù)據(jù)類型【例7-9】任意無符號的對象,以逗號隔開,默認為元組.print'abc',-4.24e93,18+6.6j,'xyz';x,y=1,2;print"Valueofx,y:",x,y;

輸出結果如圖7-10所示:7.2.1基本數(shù)據(jù)類型4. python字典字典是另一種可變?nèi)萜髂P?,且可存儲任意類型對象。字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中,格式如下所示:d={key1:value1,key2:value2}

值可以取任何數(shù)據(jù)類型,但鍵必須是不可變的,如字符串,數(shù)字或元組。7.2.1基本數(shù)據(jù)類型【例7-10】輸出打印字典中的元素。dict={'Name':'Zara','Age':7,'Class':'First'};print"dict['Name']:",dict['Name'];print"dict['Age']:",dict['Age'];

輸出結果如圖7-11所示:7.2.1基本數(shù)據(jù)類型(1)修改字典向字典添加新內(nèi)容的方法是增加新的鍵/值對,修改或刪除已有鍵/值對?!纠?-11】修改字典dict={'Name':'Zara','Age':7,'Class':'First'};dict['Age']=8;#updateexistingentrydict['School']="DPSSchool";#Addnewentryprint"dict['Age']:",dict['Age'];print"dict['School']:",dict['School'];

輸出結果如圖7-12所示: deldict['Name'];刪除是'Name'的條目;dict.clear();清空詞典所有條目;deldict;刪除詞典7.2.2流程控制語句1.分支語句在我們學習的C語言中分支語句有if...else、switch...case語句,但是在Python中,只提供if...else語句。下面為大家介紹分支語句的幾種控制語句。2.單分支寫法一:

if條件:執(zhí)行語句寫法二:

If條件:執(zhí)行語句件系統(tǒng)的組織者,也是最上級的領導者。首先手動輸入命令Is/(打開目錄)ls/7.2.2流程控制語句【例7-12】判斷指定的uid是不是root用戶uid=0ifuid==0:print("root")

輸出結果如圖7-13所示:7.2.2流程控制語句3.雙分支If條件:執(zhí)行語句else:執(zhí)行語句【例7-13】根據(jù)用戶id打印用戶身份uid=100ifuid==0:print("root")else:print("Commonuser")輸出結果如圖7-14所示7.2.2流程控制語句3.多分支If條件:執(zhí)行語句elif條件1:執(zhí)行語句elif條件2:執(zhí)行語句

elif條件n:執(zhí)行語句else:執(zhí)行語句7.2.2流程控制語句【例7-14】根據(jù)學生分數(shù)打印字母等級score=88.8level=int(score%10)iflevel>=10:print('LevelA+')eliflevel==9:print('LevelA')eliflevel==8:print('LevelB')eliflevel==7:print('LevelC')eliflevel==6:print('LevelD')else:print('LevelE')

輸出結果如圖7-15所示7.2.2流程控制語句4.循環(huán)語句Python中提供的循環(huán)語句有:while循環(huán)和for循環(huán)。需要注意的是Python中沒有do...while循環(huán)。此外,還有幾個用于控制循環(huán)執(zhí)行過程的循環(huán)控制語句:break、continue和pass。(1)while循環(huán)while條件:執(zhí)行語句(在判斷條件為true時,執(zhí)行循環(huán)體)7.2.2流程控制語句【例7-15】循環(huán)輸出數(shù)字0-9count=0whilecount<=9:print(count,end='')count+=1輸出結果如圖7-16所示:7.2.2流程控制語句

當while的判斷一直為true時,while循環(huán)體就會無限循環(huán)下去。代碼如下:whileTrue:print(‘這是死循環(huán)’)

輸出結果:這是死循環(huán)這是死循環(huán)這是死循環(huán)...

按Ctrl+C可以結束死循環(huán)。條件循環(huán)語句的的形式和雙分支語句類似,由while...else組成,語句形式如下:while條件:執(zhí)行語句else:執(zhí)行語句

else中的代碼塊會在while循環(huán)正常執(zhí)行完的情況下執(zhí)行,如果while循環(huán)被break中斷,else中的代碼塊不會被執(zhí)行。7.2.2流程控制語句(2)for循環(huán)

for臨時變量in可迭代變量

【例7-16】打印names中元素。names=['Tom','Peter','Jerry','Jack']fornameinnames:print(name)

輸出結果如圖7-17所示:7.2.2流程控制語句迭代:迭代是重復反饋過程的活動,其目的通常是為了逼近所需目標或結果。每一次對過程的重復稱為一次“迭代”,而每一次迭代得到的結果會作為下一次迭代的初始值。5.循環(huán)控制語句循環(huán)控制語句可以更改循環(huán)體中程序的執(zhí)行過程,如中斷循環(huán)、跳過本次循環(huán)。循環(huán)控制語句,如表7-4所示。循環(huán)控制語句作

用break終止整個循環(huán)continue跳過本次循環(huán),執(zhí)行下一次循環(huán)passpass語句是個空語句,只是為了保持程序結構的完整性,沒有什么特殊含義。pass語句并不是只能用于循環(huán)語句中,也可以用于分支語句中。表7-4循環(huán)控制語句7.2.2流程控制語句【例7-17】遍歷0-9范圍內(nèi)的所有數(shù)字,并通過循環(huán)控制語句打印出其中的奇數(shù)foriinrange(10):ifi%2==0:continueprint(i,end='')輸出結果如圖7-18所示:7.2.2流程控制語句【例7-18】通過循環(huán)控制語句打印一個列表中的前3個元素names=['Tom','Peter','Jerry','Jack','Lilly']foriinrange(len(names)):ifi>=3:breakprint(names[i])

輸出結果如圖7-19所示7.2.2流程控制語句6.循環(huán)嵌套循環(huán)嵌套如其字面意思,在一個循環(huán)中嵌入另一個循環(huán)。【例7-19】打印輸出九九乘法表a=1whilea<=9:i=1whilei<=a:Print(‘%d*%d=%d’%(i,a,i*a)),print(‘‘)a+=1

輸出結果為:(圖7-20)7.3Python函數(shù)函數(shù)是組織好的,可重復使用的,用來實現(xiàn)單一,或相關聯(lián)功能的代碼段。函數(shù)能提高應用的模塊性,和代碼的重復利用率。你已經(jīng)知道Python提供了許多內(nèi)建函數(shù),比如print()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。1.函數(shù)的命名規(guī)則函數(shù)名必須以下劃線或字母開頭,可以包含任意字母、數(shù)字或下劃線的組合。不能使用任何的標點符號;函數(shù)名是區(qū)分大小寫的;函數(shù)名不能是保留字。2.函數(shù)的定義關鍵字def用于創(chuàng)建用戶自定義函數(shù),函數(shù)定義就是一些可執(zhí)行的語句。defsquare(x):returnx**2函數(shù)定義的執(zhí)行會綁定當前本地命名空間中的函數(shù)名(可以將命名空間當作名字到值的一種映射,并且這種映射還可以嵌套,命名空間和范圍會在另一個教程中詳細介紹)到一個函數(shù)對象,該對象是一個對函數(shù)中可執(zhí)行代碼的包裝器。這個函數(shù)對象包含了一個對當前全局命名空間的引用,而當前命名空間指該函數(shù)調(diào)用時所使用的全局命名空間。此外,函數(shù)定義不會執(zhí)行函數(shù)體,只有在函數(shù)被調(diào)用時才會執(zhí)行函數(shù)體。7.3Python函數(shù)3.定義一個函數(shù)你可以定義一個由自己想要功能的函數(shù),以下是簡單的規(guī)則:? 函數(shù)代碼塊以def關鍵詞開頭,后接函數(shù)標識符名稱和圓括號()。? 任何傳入?yún)?shù)和自變量必須放在圓括號中間。圓括號之間可以用于定義參數(shù)。? 函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。? 函數(shù)內(nèi)容以冒號起始,并且縮進。? Return[expression]結束函數(shù),選擇性地返回一個值給調(diào)用方。不帶表達式的return相當于返回None。4.語法deffunctionname(parameters):"函數(shù)_文檔字符串"function_suitereturn[expression]默認情況下,參數(shù)值和參數(shù)名稱是按函數(shù)聲明中定義的的順序匹配起來的。以下為一個簡單的Python函數(shù),它將一個字符串作為傳入?yún)?shù),再打印到標準顯示設備上。defprintme(str):"打印傳入的字符串到標準顯示設備上"printstrreturn7.3Python函數(shù)5.函數(shù)調(diào)用定義一個函數(shù)只給了函數(shù)一個名稱,指定了函數(shù)里包含的參數(shù),和代碼塊結構。這個函數(shù)的基本結構完成以后,你可以通過另一個函數(shù)調(diào)用執(zhí)行,也可以直接從Python提示符執(zhí)行。如下實例調(diào)用了printme()函數(shù):#Functiondefinitionisheredefprintme(str):"打印任何傳入的字符串"printstr;return;

#Nowyoucancallprintmefunctionprintme("我要調(diào)用用戶自定義函數(shù)!");printme("再次調(diào)用同一函數(shù)");

以上實例輸出結果:我要調(diào)用用戶自定義函數(shù)!再次調(diào)用同一函數(shù)7.3Python函數(shù)6.按值傳遞參數(shù)和按引用傳遞參數(shù)所有參數(shù)(自變量)在Python里都是按引用傳遞。如果你在函數(shù)里修改了參數(shù),那么在調(diào)用這個函數(shù)的函數(shù)里,原始的參數(shù)也被改變了。例如:defchangeme(mylist):"修改傳入的列表"mylist.append([1,2,3,4]);print"函數(shù)內(nèi)取值:",mylistreturnmylist=[10,20,30];changeme(mylist);print"函數(shù)外取值:",mylist

傳入函數(shù)的和在末尾添加新內(nèi)容的對象用的是同一個引用。故輸出結果如下:函數(shù)內(nèi)取值:[10,20,30,[1,2,3,4]]函數(shù)外取值:[10,20,30,[1,2,3,4]]7.3Python函數(shù)7.參數(shù)以下是調(diào)用函數(shù)時可使用的正式參數(shù)類型:? 必備參數(shù)? 命名參數(shù)? 缺省參數(shù)? 不定長參數(shù)? 必備參數(shù)7.3Python函數(shù)【例7-20】printme()函數(shù)的調(diào)用必備參數(shù)須以正確的順序傳入函數(shù)。調(diào)用時的數(shù)量必須和聲明時的一樣。調(diào)用printme()函數(shù),你必須傳入一個參數(shù),不然會出現(xiàn)語法錯誤:defprintme(str):"打印任何傳入的字符串"printstr;return;printme();

輸出結果如圖7-21所示:7.3Python函數(shù)8.關鍵字參數(shù)關鍵字參數(shù)和函數(shù)調(diào)用關系緊密,函數(shù)調(diào)用使用關鍵字參數(shù)來確定傳入的參數(shù)值。使用關鍵字參數(shù)允許函數(shù)調(diào)用時參數(shù)的順序與聲明時不一致,因為Python解釋器能夠用參數(shù)名匹配參數(shù)值。7.3Python函數(shù)【例7-21】在函數(shù)printme()調(diào)用時使用參數(shù)名:defprintme(str):"打印任何傳入的字符串"printstr;return;printme(str="Mystring");

輸出結果如圖7-23所示:7.3Python函數(shù)下例能將關鍵字參數(shù)順序不重要展示得更清楚:defprintinfo(name,age):"打印任何傳入的字符串"print"Name:",name;print"Age",age;return;printinfo(age=50,name="miki");

輸出結果:Name:mikiAge50

命名參數(shù)命名參數(shù)和函數(shù)調(diào)用關系緊密,調(diào)用方用參數(shù)的命名確定傳入的參數(shù)值。你可以跳過不傳的參數(shù)或者亂序傳參,因為Python解釋器能夠用參數(shù)名匹配參數(shù)值。用命名參數(shù)調(diào)用printme()函數(shù)。7.3Python函數(shù)【例7-22】在函數(shù)printme()調(diào)用時使用參數(shù)名:defprintme(str):"打印任何傳入的字符串"printstr;return;printme(str="Mystring");

輸出結果如圖7-24所示:7.3Python函數(shù)【例7-23】將命名參數(shù)順序不重要展示得更清楚:defprintinfo(name,age):"打印任何傳入的字符串"print"Name:",name;print"Age",age;return;printinfo(age=50,name="miki");輸出結果如圖7-25所示:7.3Python函數(shù)9.缺省參數(shù)調(diào)用函數(shù)時,缺省參數(shù)的值如果沒有傳入,則被認為是默認值?!纠?-24】打印默認的age,如:defprintinfo(name,age=35):"打印任何傳入的字符串"print"Name:",name;print"Age",age;return;printinfo(age=50,name="miki");printinfo(name="miki");輸出結果如圖7-26所示:7.3Python函數(shù)10.定長參數(shù)你可能需要一個函數(shù)能處理比當初聲明時更多的參數(shù)。這些參數(shù)叫做不定長參數(shù),和上述2種參數(shù)不同,聲明時不會命名。基本語法如下:deffunctionname([formal_args,]*var_args_tuple):"函數(shù)_文檔字符串"function_suitereturn[expression]7.3Python函數(shù)【例7-25】加了星號(*)的變量名會存放所有未命名的變量參數(shù)。選擇不多傳參數(shù)也可。defprintinfo(arg1,*vartuple):"打印任何傳入的參數(shù)"print"輸出:"printarg1forvarinvartuple:printvarreturn;printinfo(10);printinfo(70,60,50);輸出結果如圖7-27所示:7.3Python函數(shù)11.匿名函數(shù)

python使用lambda來創(chuàng)建匿名函數(shù)。具體要求有以下幾點:? lambda只是一個表達式,函數(shù)體比def簡單很多。? lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。? lambda函數(shù)擁有自己的命名空間,且不能訪問自有參數(shù)列表之外或全局命名空間里的參數(shù)。? 雖然lambda函數(shù)看起來只能寫一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時不占用棧內(nèi)存從而增加運行效率。12.語法

lambda函數(shù)的語法只包含一個語句,如下:lambda[arg1[,arg2,argn]]:expression7.3Python函數(shù)

【例7-26】lambda函數(shù)sum=lambdaarg1,arg2:arg1+arg2;print"Valueoftotal:",sum(10,20)print"Valueoftotal:",sum(20,20)

輸出結果如圖7-28所示:7.3Python函數(shù)13.return語句

return語句[表達式]退出函數(shù),選擇性地向調(diào)用方返回一個表達式。不帶參數(shù)值的return語句返回None。之前的例子都沒有示范如何返回數(shù)值.【例7-27】return語句defsum(arg1,arg2):total=arg1+arg2print"Insidethefunction:",totalreturntotal;total=sum(10,20);print"Outsidethefunction:",total輸出結果如圖7-29所示7.3Python函數(shù)14.變量作用域一個程序的所有的變量并不是在哪個位置都可以訪問的。訪問權限決定于這個變量是在哪里賦值的。變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱。兩種最基本的變量作用域為:全局變量、局部變量。15.變量和局部變量定義在函數(shù)內(nèi)部的變量擁有一個局部作用域,定義在函數(shù)外的擁有全局作用域。局部變量只能在其被聲明的函數(shù)內(nèi)部訪問,而全局變量可以在整個程序范圍內(nèi)訪問。調(diào)用函數(shù)時,所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中。7.3Python函數(shù)【例7-28】變量和局部變量defsum(arg1,arg2):total=arg1+arg2;#total在這里是局部變量.print"Insidethefunctionlocaltotal:",totalreturntotal;sum(10,20);print"Outsidethefunctionglobaltotal:",total輸出結果如圖7-30所示:7.4Python類和對象Python中的類和對象也有自己的概念,在Python中類就是指種類的意思,例如水中魚類,魚類就分為很多種,類中具體的事物又成為某一個對象,我們通常會把具有相同屬性和方法的對象歸為一類,類是對象的抽象化,那么對象又是類的實例化。類,可以提高將現(xiàn)實關系變成虛擬的邏輯關系的效率,這是由對象的共同特性產(chǎn)生。對象,是不同的事物,如男人和蘋果。但是男人和蘋果,都有體積、重量等共同特性,所以由這些特性可以合成一個類(也說,抽象成一個類),對象是面向?qū)ο缶幊痰暮诵模谑褂脤ο蟮倪^程中,為了將具有共同特征和行為的一組對象抽象定義,提出了另外一個新的概念——類,這就說明了類與對象的關系。7.4.1面向?qū)ο驪ython本來就是一種為面向?qū)ο蠖O計的語言,所以我們利用Python來創(chuàng)建類和對象是比較容易的,下面就讓我們先了解一下面向?qū)ο螅豪纾篈同學報道登記信息B同學報道登記信息C同學報道登記信息A同學做自我介紹B同學做自我介紹C同學做自我介紹7.4.1面向?qū)ο蟆纠?-29】面向?qū)ο螅簊tu_a={"name":"A","age":21,"gender":1,"hometown":"河北"}stu_b={"name":"B","age":22,"gender":0,"hometown":"山東"}stu_c={"name":"C","age":20,"gender":1,"hometown":"安徽"}defstu_intro(stu):"""自我介紹"""forkey,valueinstu.items():print("key=%s,value=%d"%(key,value))stu_intro(stu_a)stu_intro(stu_b)stu_intro(stu_c)7.4.1面向?qū)ο竺嫦蜻^程:根據(jù)業(yè)務邏輯從上到下寫代碼,面向過程是一種以過程為中心的編程思想?!懊嫦蜻^程”也可稱之為“面向記錄”編程思想,他們不支持豐富的“面向?qū)ο蟆碧匦裕ū热缋^承、多態(tài)),并且它們不允許混合持久化狀態(tài)和域邏輯。就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依次調(diào)用就可以了。面向?qū)ο螅簩?shù)據(jù)與函數(shù)綁定到一起,進行封裝,這樣能夠更快速的開發(fā)程序,減少了重復代碼的重寫過程。例如:解決菜鳥買電腦的故事第一種方式:1)在網(wǎng)上查找資料2)根據(jù)自己預算和需求定電腦的型號MacBook15頂配1W83)去市場找到蘋果店各種店無法甄別真假隨便找了一家4)找到業(yè)務員,業(yè)務員推薦了另外一款配置更高價格便宜也是蘋果系統(tǒng)1W5)砍價30分鐘付款99996)成交,回去之后發(fā)現(xiàn)各種問題第二種方式:1)找一個靠譜的電腦高手

2)給錢交易7.4.1面向?qū)ο竺嫦驅(qū)ο蠛兔嫦蜻^程都是解決問題的一種思路而已,用面向?qū)ο蟮乃季S解決問題的重點就是,當遇到一個需求的時候不用自己去實現(xiàn),如果自己一步步實現(xiàn)那就是面向過程、應該找一個專門做這個事的人來做,所以第一種方式就是面向過程而第二種方式就是面向?qū)ο?,由此可以看出面向?qū)ο笫腔诿嫦蜻^程的一種方法。面向?qū)ο缶幊讨两襁€沒有統(tǒng)一的概念我這里把它定義為:按人們認識客觀世界的系統(tǒng)思維方式,采用基于對象(實體)的概念建立模型,模擬客觀世界分析、設計、實現(xiàn)軟件的辦法。面向?qū)ο缶幊淌且环N解決軟件復用的設計和編程方法。這種方法把軟件系統(tǒng)中相近相似的操作邏輯和操作應用數(shù)據(jù)、狀態(tài),以類的型式描述出來,以對象實例的形式在軟件系統(tǒng)中復用,以達到提高軟件開發(fā)效率的作用。7.4.2類和對象面向?qū)ο蟮木幊逃袃蓚€重要的概念就是:類和對象,對象是面向?qū)ο缶幊痰暮诵?,在使用對象的過程中,是為了將具有共同特征和行為的一組對象抽象定義,那么我們提出了另外一個新的概念——類。

1.類和對象:Python中類的構成:類(Class)由3個部分構成:類的名稱:類名類的屬性:一組數(shù)據(jù)類的方法:允許對進行操作的方法(行為)

例如:人類設計,只關心3樣東西:事物名稱(類名):人(Person)屬性:身高(height)、年齡(age)方法(行為/功能):跑(run)、打架(fight)

對于類的定義:Class類名:方法列表;7.4.2類和對象【例7-30】定義一個car類:#定義類classCar:#方法defgetCarInfo(self):print('車輪子個數(shù):%d,顏色%s'%(self.wheelNum,self.color))defmove(self):print("車正在移動...")

在python中我們可以根據(jù)已經(jīng)定義的類進行定義對象,創(chuàng)建對象的格式:對象名=類名()7.4.2類和對象【例7-31】創(chuàng)建demo對象:創(chuàng)建對象demo:#定義類classCar://告訴Python我們會在這個位置定義一個類

#移動

defmove(self):print('車在奔跑...')//定義的方法

#鳴笛

deftoot(self):print("車在鳴笛...嘟嘟..")#創(chuàng)建一個對象,并用變量BMW來保存它的引用BMW=Car()BMW.color='黑色'//給對象添加屬性BMW.wheelNum=4#輪子數(shù)量BMW.move()//調(diào)用對象的方法BMW.toot()print(BMW.color)print(BMW.wheelNum)7.4.2類和對象BMW=Car(),這樣就產(chǎn)生了一個Car的實例對象,此時也可以通過實例對象BMW來訪問屬性或者方法。第一次使用BMW.color='黑色'表示給BMW這個對象添加屬性,如果后面再次出現(xiàn)BMW.color=xxx表示對屬性進行修改。BMW是一個對象,它擁有屬性(數(shù)據(jù))和方法(函數(shù))。當創(chuàng)建一個對象時,就是用一個模子,來制造一個實物。7.4.3構造函數(shù)在上一節(jié)的demo中,我們已經(jīng)給BMW這個對象添加了2個屬性,wheelNum(車的輪胎數(shù)量)以及color(車的顏色),試想如果再次創(chuàng)建一個對象的話,肯定也需要進行添加屬性,顯然這樣做很費時間,那么有沒有辦法能夠在創(chuàng)建對象的時候,就順便把車這個對象的屬性給設置呢?答案是我們將要利用__init__()方法,def__init__比較特殊而且大部分書中稱為初始化函數(shù),我們也更加習慣地稱之為構造函數(shù),所謂初始化就是讓我們所創(chuàng)建的類有一個基本的面貌,不是那么的空。而它的作用就是在python實例化的時候,要給參數(shù)進行賦值,當我們把這種參數(shù)傳遞進去之后就會變?yōu)轭惡蛯嵗囊粋€屬性。7.4.3構造函數(shù)1.構造函數(shù)的定義及使用:(1)__init__方法的使用方法:使用方式:def類名:#初始化函數(shù),用來完成一些默認的設定

def__init__():Pass7.4.3構造函數(shù)

【例7-32】__init__()方法的調(diào)用:#定義汽車類classCar:def__init__(self):self.wheelNum=4self.color='藍色'defmove(self):print('車在跑,目標:夏威夷')#創(chuàng)建對象BMW=Car()print('車的顏色為:%s'%BMW.color)print('車輪胎數(shù)量為:%d'%BMW.wheelNum)

運行結果如圖7-31所示:7.4.3構造函數(shù)當創(chuàng)建Car對象后,在沒有調(diào)用__init__()方法的前提下,BMW就默認擁有了2個屬性wheelNum和color,原因是__init__()方法是在創(chuàng)建對象后,就立刻被默認調(diào)用,__init__()方法,在創(chuàng)建一個對象時默認被調(diào)用,不需要手動調(diào)用,__init__(self)中,默認有1個參數(shù)名字為self,如果在創(chuàng)建對象時傳遞了2個實參,那么__init__(self)中出了self作為第一個形參外還需要2個形參,例如__init__(self,x,y)__init__(self)中的self參數(shù),不需要開發(fā)者傳遞,python解釋器會自動把當前的對象引用傳遞進去7.4.3構造函數(shù)(2)【例7-33】定義__str__()方法:classCar:def__init__(self,newWheelNum,newColor):self.wheelNum=newWheelNumself.color=newColordef__str__(self):msg="嘿。。。我的顏色是"+self.color+"我有"+int(self.wheelNum)+"

個輪胎..."returnmsgdefmove(self):print('車在跑,目標:夏威夷')BMW=Car(4,"白色")print(BMW)運行結果如圖7-32所示:7.4.3構造函數(shù)圖7-32定義__str__()方法當使用print輸出對象的時候,只要自己定義了__str__(self)方法,那么就會打印從在這個方法中return的數(shù)據(jù)。下面我們來了解一下類與實例的關系:類提供默認行為,是實例的工廠,所謂工廠就是用同一個模子做出很多的產(chǎn)品,所以我們所定義的類就是那個模子,實例就是具體的產(chǎn)品,所以,實例是程序處理的實際對象。

2.Self的作用:首先明確self只有在類中才會有,獨立定義的函數(shù)或者方法是不會含有self的,盡管當我們調(diào)用的時候不用向self中傳遞參數(shù),那么有一點我們應該了解在python中self不是必須有的,也不是python中的關鍵字,類中的函數(shù),第一個參數(shù)就是self,classPerson:def_init_(self,name):=namedefsayhello(self):print'Mynameis:',p=Person('Bill')printp根據(jù)這個例子我們應該了解到self是指向Person中的實例p的。7.4.3構造函數(shù)【例7-34】self的作用:#classAnimal://定義一個類#方法def__init__(self,name):=namedefprintName(self):print('名字為:%s'%)#定義一個函數(shù)defmyPrint(animal):animal.printName()dog1=Animal('西西')myPrint(dog1)dog2=Animal('北北')myPrint(dog2)運行結果如圖7-33所示:7.4.3構造函數(shù)

3.保護對象和私有對象:下面我們要來了解一下保護對象的屬性:如果有一個對象,當需要對其進行修改屬性時,有2種方法:對象名.屬性名=數(shù)據(jù)>直接修改對象名.方法名()>間接修改為了更好的保存屬性安全,即不能隨意修改,一般的處理方式為? 將屬性定義為私有屬性? 添加一個可以調(diào)用的方法,供調(diào)用7.4.3構造函數(shù)

【例7-35】保護對象的屬性:classPeople(object):def__init__(self,name):self.__name=namedefgetName(self):returnself.__namedefsetName(self,newName):iflen(newName)>=5:self.__name=newNameelse:print("error:名字長度需要大于或者等于5")xiaoming=People("dongGe")print(xiaoming.__name)運行結果如圖7-34所示:7.4.3構造函數(shù)【例7-36】私有對象的屬性:classPeople(object):def__init__(self,name):self.__name=namedefgetName(self):returnself.__namedefsetName(self,newName):iflen(newName)>=5:self.__name=newNameelse:print("error:名字長度需要大于或者等于5")7.4.3構造函數(shù)xiaoming=People("liu")xiaoming.setNam("wanger")print(xiaoming.getName())exiaoming.setName("lisi")print(xiaoming.getName())運行結果如圖7-35所示:由于Python中沒有像C++中public和private這些關鍵字來區(qū)別公有屬性和私有屬性,它是以屬性命名方式來區(qū)分,如果在屬性名前面加了2個下劃線'__',則表明該屬性是私有屬性,否則為公有屬性(方法也是一樣,方法名前面加了2個下劃線的話表示該方法是私有的,否則為公有的)。7.4.3構造函數(shù)

【例7-37】__del__()方法:importtimeclassAnimal(object):#初始化方法

#創(chuàng)建完對象后會自動被調(diào)用

def__init__(self,name):print('__init__方法被調(diào)用')self.__name=name#析構方法

#當對象被刪除時,會自動被調(diào)用

def__del__(self):print("__del__方法被調(diào)用")print("%s對象馬上被刪掉了..."%self.__name)7.4.3構造函數(shù)#創(chuàng)建對象dog=Animal("某個")#刪除對象deldogcat=Animal("那個")cat2=catcat3=catprint("馬上刪除cat對象")delcatprint("馬上刪除cat2對象")delcat2print("馬上刪除cat3對象")delcat3print("程序2秒鐘后結束")time.sleep(2)運行結果如圖7-36所示:7.4.3構造函數(shù)當有某一個變量保存了對象的引用時,此對象的引用計數(shù)就會加1。當使用del刪除變量指向的對象時,如果對象的引用計數(shù)不會1,比如3,那么此時只會讓這個引用計數(shù)減1,即變?yōu)?,當再次調(diào)用del時,變?yōu)?,如果再調(diào)用1次del,此時會真的把對象進行刪除。7.4.4繼承1.繼承的介紹以及單繼承首先我們了解一下什么是繼承,生活中在現(xiàn)實生活中,繼承一般指的是子女繼承父輩的財產(chǎn),在我們的現(xiàn)實生活中,“繼承”就是要意味著一個人要從另一個人那里得到一些東西,總之,“繼承”之后,那么在那個所繼承的方面,就會省一些力氣,如果這個優(yōu)勢體現(xiàn)在代碼上,就會提高程序的運行效率。繼承是面向軟件技術的一種概念。如果一個類別A“繼承自”另一個類B,就把這個A稱為“B的子類別”,而把B稱為“A的父類別”,可以B是A的超類。所以繼承就可以使得子類具有父類的各種屬性和方法,當子類繼承父類的同時也可以同時定義自己的屬性和方法,那么當然也可以重寫某些屬性和方法,由于繼承會繼承父類的屬性和方法,所以可以實現(xiàn)代碼的重用,可以高效的實現(xiàn)代碼的繼承,提高代碼的運行效率。單繼承的定義方式:class子類(父類)7.4.4繼承

【例7-38】繼承的定義:classPreson:#父類defspeak(self)print“Iloveyou.”defsetHeight(self,n)self.length=ndefbreast(self,n)print”Mybreastis:”,nclassGirl(Person):#繼承的定義defselfHeight(self)7.4.4繼承print“theheightis:1.70m”If__name__==”__main__”:cang=Girl()cang.selfHeight()cang.speak()cang.breast(90)運行結果如圖7-37所示:7.4.4繼承首先定義一個類Person,在類中又定義了三種方法,但是在這個類中并沒有定義初始化函數(shù),然后我們緊接著又定義了Girl類,這個類名的后面括號中是上一個類的類名,這是說明Girl繼承了Person類,所以Girl是Person類的子類,那么Person類也即是Girl類的父類。既然已經(jīng)繼承Person類,那么Girl就會擁有Person中的屬性和方法,但是,如果Girl中有和Person中一樣的方法,那么父類中的同一個方法將會被遮蓋,那么這就叫做方法的重寫。雖然在Girl類中沒有speak方法,但是由于繼承的原因,在子類中也能進行調(diào)用。7.4.4繼承繼承的注意事項:classAnimal(object):def__init__(self,name='動物',color='白色'):self.__name=nameself.color=colordef__test(self):print(self.__name)print(self.color)deftest(self):print(self.__name)print(self.color)7.4.4繼承classDog(Animal):defdogTest1(self):#print(self.__name)#能訪問到父類的私有屬性

print(self.color)defdogTest2(self):#self.__test()#不能訪問父類中的私有方法

self.test()A=Animal()#print(A.__name)#程序出現(xiàn)異常,不能訪問私有屬性print(A.color)#A.__test()#程序出現(xiàn)異常,不能訪問私有方法A.test()print("分割線")D=Dog(name="小花狗",color="黃色")D.dogTest1()D.dogTest2()? 私有的屬性,不能通過對象直接訪問,但是可以通過方法訪問? 私有的方法,不能通過對象直接訪問? 私有的屬性、方法,不會被子類繼承,也不能被訪問? 一般情況下,私有的屬性、方法都是不對外公布的,往往用來做內(nèi)部的事情,起到安全的作用。7.4.4繼承2.多繼承Python中多繼承的格式如下:#定義一個父類classA:defprintA(self):print('A')#定義一個父類classB:defprintB(self):print('B')#定義一個子類,繼承自A、BclassC(A,B):defprintC(self):print('C')obj_C=C()obj_C.printA()obj_C.printB()7.4.4繼承2.多繼承Python中多繼承的格式如下:#定義一個父類classA:defprintA(self):

【例7-39】多繼承的順序:classP1(object):deffoo(self):print'p1-foo'classP2(object):deffoo(self):print'p2-foo'defbar(self):print'p2-bar'classC1(P1,P2):passclassC2(P1,P2):defbar(self):print'C2-bar'classD(C1,C2):passif__name__=='__main__':printD.__mro__#只有新式類有__mro__屬性,告訴查找順序是怎樣的

d=D()d.foo()d.bar()print('A')#定義一個父類classB:defprintB(self):print('B')#定義一個子類,繼承自A、BclassC(A,B):defprintC(self):print('C')obj_C=C()obj_C.printA()obj_C.printB()7.4.4繼承從我們的運行結果中能夠看出:實例d調(diào)用foo()時,搜索順序是D=>C1=>C2=>P1實例d調(diào)用bar()時,搜索順序是D=>C1=>C2總結:新式類的搜索方式是采用“廣度優(yōu)先”的方式去查找屬性7.5文件的操作1.什么是文件文件,是電腦中非常重要的東西,在Python中它也是一種類型的對象,它包括文本的、圖片的、音頻的、視頻的等等,還有很多相關的擴展名。其實我們在linux中的操作,都是被保存在文件中,所以,文件在我們的操作系統(tǒng)中能夠起到至關重要的作用,能夠幫助我們儲存一切有用的東西,并且不會丟失。7.5文件的操作2.文件的操作

(1)打開文件在python,使用open函數(shù),可以打開一個已經(jīng)存在的文件,或者創(chuàng)建一個新文件open(文件名,訪問模式)示例如下:f=open('test.txt','w')訪問模式說明,如表7-5所示:7.5文件的操作從表中我們不難看出,如果在不同文件下打開文件,可以進行相關的讀寫。那么,如果當我們什么模式都不寫的時候,那么將會啟動默認的r形式,通過只讀的方式打開文件。f=open(“130.txt”)f<openfile‘130.txt’,mode‘r’at0x7530230>f=open(“130.txt”,”r”)f<openfile‘130.txt’,mode‘r’at0xb750a700>7.5文件的操作我們可以通過這種方式來查看當前打開的文件是采用什么模式的,如果我們不寫“r”,那么就能認為是只讀方式了?!皐”:以寫方式打開文件,可以向文件中繼續(xù)寫進去東西,如果文件是存在的,那么將原文件清空,再次寫入新的內(nèi)容即可。131.txt是我們原來就建立好的,并且還在里面加上一句話:Thisisafilefp=open(“131.txt”)forlineinfp#原來這個文件中的內(nèi)容...printline...Thisisafilefp=open(“131.txt”,”w”)#這時候再看看這歌文件,里面是否有內(nèi)容fp.white(“Mynameisqiwsir.\nMywebsiteisqiwsir.github.io”)#再查看內(nèi)容fp.close()7.5文件的操作查看文件內(nèi)容:$cat131.txt#cat是linux下顯示文件內(nèi)容的命令,這里就是要顯示131.txt內(nèi)容MynameisqiwsirMywebsiteisqiwsir.github.io

“a”:以追加模式打開文件(即一打開文件,文件指針將會自動的轉移到文件的末尾),如果該文件不存在那么就立即創(chuàng)建。fp=open(“131.txt”,”a”)fp.write(“\nAha,Ilikeprogram\n”)#想文件中追加fp.close()#這條語句是用來關閉文件的,當我們寫完文件的時候就要及時地將文件關閉。7.5文件的操作

查看文件內(nèi)容:$cat131.txtMynameisqiwsirMywebsiteisqiwsir.github.ioAha,Ilikeprogram

(2)關閉文件close()

示例如下:#新建一個文件,文件名為:test.txtf=open('test.txt','w')#關閉這個文件f.close()7.5文件的操作3.文件的讀寫

(1)寫數(shù)據(jù)(write)

使用write()可以完成向文件寫入數(shù)據(jù)

【例7-40】寫數(shù)據(jù)的格式:demo:f=open('test.txt','w')f.write('helloworld,iamhere!')f.close()運行結果如圖7-40所示:7.5文件的操作(2)讀數(shù)據(jù)(read)

使用read(num)可以從文件中讀取數(shù)據(jù),num表示要從文件中讀取的數(shù)據(jù)的長度(單位是字節(jié)),如果沒有傳入num,那么就表示讀取文件中所有的數(shù)據(jù)7.5文件的操作【例7-41】讀取數(shù)據(jù):f=open('test.txt','r')content=f.read(5)print(content)print("-"*30)content=f.read()print(content)f.close()運行結果如圖7-41所示:7.5文件的操作(3)讀數(shù)據(jù)(readlines)就像read沒有參數(shù)時一樣,readlines可以按照行的方式把整個文件中的內(nèi)容進行一次性讀取,并且返回的是一個列表,其中每一行的數(shù)據(jù)為一個元素【例7-42】readlines#coding=utf-8f=open('test.txt','r')content=f.rea

溫馨提示

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

評論

0/150

提交評論