-------------------------純手打總結右蹦,轉載請注明出處诊杆,愛您~
2.1常用內(nèi)置對象
* 對象是python語言中最基本的概念歼捐,在python中處理的一切都是對象。
* python中有許多內(nèi)置對象可供編程者使用晨汹,內(nèi)置對象可直接使用豹储,如數(shù)字、字符串淘这、列表剥扣、del等。
* 非內(nèi)置對象需要導入模塊才能使用铝穷,如正弦函數(shù)sin(x)钠怯,隨機數(shù)產(chǎn)生函數(shù)random()等。
*常用內(nèi)置對象:
2.1.1常量與變量
* 在Python中氧骤,不需要事先聲明變量名及其類型呻疹,直接賦值即可創(chuàng)建各種類型的對象變量。這一點適用于Python任意類型的對象筹陵。例如下列語句刽锤,創(chuàng)建了整型變量x,并賦值為3朦佩,以及創(chuàng)建了字符串變量x并思,并賦值為'Hello world'
>>> x=3
>>> x='Hello world'
* python屬于強類型編程語言,python解釋器會根據(jù)賦值或運算來自動推斷變量類型语稠。python還是一種動態(tài)類型語言宋彼,變量的類型也是可以隨時變化的。
* 賦值語句的執(zhí)行過程是:首先把等號右側表達式的值計算出來仙畦,然后在內(nèi)存中尋找一個位置把值存放進去输涕,最后創(chuàng)建變量并指向這個內(nèi)存地址。
* python中的變量并不直接存儲值慨畸,而是存儲了值的地址或者引用莱坎,這也是變量類型隨時可以改變的原因。
Notes:Python采用的是基于值的內(nèi)存管理方式寸士,如果為不同變量賦值為相同值(僅適用于-5至256的整數(shù)和短字符串),這個值在內(nèi)存中只有一份檐什,多個變量指向同一塊內(nèi)存地址。
*在定義變量名的時候弱卡,需要注意一下問題:
√? 變量名必須以字母或下劃線開頭乃正,但以下劃線開頭的變量在Python中有特殊含義;
√ 變量名中不能有空格以及標點符號(括號婶博、引號瓮具、逗號、斜線、反斜線搭综、冒號垢箕、句號划栓、問號等等)兑巾;
√ 不能使用關鍵字作變量名,可以導入keyword模塊后使用print(keyword.kwlist)查看所有python關鍵字忠荞;
√?變量名對英文字母的大小寫敏感蒋歌,例如student和Student是不同的變量;
√?使用Python變量前必須給它賦值委煤。
√ 不建議使用系統(tǒng)內(nèi)置的模塊名堂油、類型名或函數(shù)名以及已導入的模塊名及其成員名作變量名,這將會改變其類型和含義碧绞,可以通過dir(__builtins__)查看所有內(nèi)置板塊府框、類型和函數(shù);如下圖:
2.1.2 數(shù)字
* python支持任意大的數(shù)字讥邻,具體可以大到什么程度僅受內(nèi)存大小的限制迫靖。
* 由于精度的問題,對于實數(shù)運算可能會有一定的誤差兴使,應盡量避免在實數(shù)之間直接進行相等性測試系宜,而是應該以兩者之差的絕對值是否足夠小作為兩個實數(shù)是否相等的依據(jù)。
* 在數(shù)字的算數(shù)運算表達式求值時會進行隱式的類型轉換发魄,如果存在復數(shù)則都變成復數(shù)盹牧,如果沒有復數(shù)但是有實數(shù)就都變成實數(shù),如果都是整數(shù)則不進行類型轉換励幼。
* python內(nèi)置支持復數(shù)類型及其運算汰寓,并且形式與數(shù)學上的復數(shù)完全一致。
*? python標準庫fractions中的Fraction對象支持分數(shù)及其運算有滑。
* 標準庫 fractions和decimal中提供的Decimal類實現(xiàn)了更高精度實數(shù)的運算
2.1.3 字符串與字節(jié)串
* 在python中,沒有字符常量和變量的概念六水,只有字符串類型的常量和變量俺孙,單個字符也是字符串。使用單引號掷贾、雙引號睛榄、三單引號、三雙引號作為定界符(delimiter)來表示字符串想帅,并且不同的定界符之間可以互相嵌套场靴。
*? python3.X全面支持中文,中文和英文字母都作為一個字符對待,甚至可以使用中文作為變量名旨剥。
*? 除了支持使用加號運算符連接字符串外咧欣,python字符串還提供了大量的方法支持格式化、查找轨帜、替換魄咕、排版等操作。
* 三引號怎么打出來蚌父?哮兰??
*? 對str類型的字符串調(diào)用其encode()方法進行編碼得到bytes字節(jié)串苟弛,對bytes字節(jié)串調(diào)用其decode()方法并指定正確的編碼格式則得到str字符串角寸。
2.1.4列表升薯、元組变隔、字典懈叹、集合
2.2運算符與表達式
*? python是面向對象的編程語言,在python中一切都是對象缤削,對象由數(shù)據(jù)和行為兩部分組成窘哈,而行為主要通過方法來實現(xiàn),通過一些特殊方法的重寫僻他,可以實現(xiàn)運算符重載宵距。
*? 運算符也是表現(xiàn)對象行為的一種形式,不同類的對象支持的運算符有所不同吨拗,同一種運算符作用于不同的對象時也可能會表現(xiàn)出不同的行為满哪,這正是"多態(tài)"的體現(xiàn)。比如*在數(shù)字中表示乘號劝篷,而兩個**表示乘方哨鸭。
*? 運算符優(yōu)先級遵循的規(guī)則為:算術運算符優(yōu)先級最高(算術運算符遵循"先乘除,后加減"的基本運算原則)娇妓,其次是位運算符像鸡、成員測試運算符、關系運算符哈恰、邏輯運算符等只估。
*? 雖然python運算符有一套嚴格的優(yōu)先級規(guī)則,但是強烈建議在編寫復雜表達式時使用圓括號來明確說明其中的邏輯來提高代碼可讀性着绷。
2.2.1算術運算符
(1)+運算符除了用于算術加法以外蛔钙,還可以用于列表、元組荠医、字符串的連接吁脱,但不支持不同類型的對象之間相加或連接桑涎。
(2)*運算符除了表示算術乘法,還可用于列表兼贡、元組攻冷、字符串這幾個序列類型與整數(shù)的乘法,表示序列元素的重復遍希,生成新的序列對象等曼。字典和集合不支持與整數(shù)的相乘,因為其中的元素是不允許重復的孵班。
(3)運算符? /? 和? //??在python中分別表示算術除法和算術求整商(floor division)涉兽。
(4)%運算符可以用于整數(shù)或實數(shù)的求余數(shù)運算,還可以用于字符串格式化篙程,但是這種用法并不推薦。
(5)**運算符表示冪乘别厘,與內(nèi)置函數(shù)pow()等價:
pow(x,y[,z])冪余,(x**y)%z,[,,]表示參數(shù)z可省略虱饿。pow(3,pow(3,99),10000)結果為4587
有意思的是,當我們在python中計算pow(3,pow(3,99))如果不加第三個參數(shù)z触趴,那么這個數(shù)據(jù)是無法在普通的計算機中得到結果的氮发。因為3的3的99次方是一個非常大的數(shù),他應該超過了我們計算機普通內(nèi)存的大小冗懦,所以我們通過余數(shù)z使得在冪運算過程中它始終保持在余數(shù)范圍內(nèi)爽冕,它的運算會非常迅速.
2.2.2關系運算符
* python關系運算符最大的特點是可以連用,其含義與我們?nèi)粘5睦斫馔耆恢屡丁J褂藐P系運算符的一個最重要的前提是颈畸,操作數(shù)之間必須可比較大小。例如把一個字符串和一個數(shù)字進行大小比較是毫無意義的没讲,所以python也不支持這樣的運算眯娱。
>>> 1<3<5???????????????????? #等價于1<3and 3<5
True
>>> 1>6<math.sqrt(-9)? ? ? ?#具有惰性求值或者邏輯短路的特點
False
>>> 1<6<math.sqrt(9)? ? ? ?#還沒有導入math模塊,拋出異常
Traceback (most recent call last):
? File "<stdin>", line 1, in <module>
NameError: name 'math' is not defined
>>> import math
>>> 1<6<math.sqrt(9)
False
?>>> 'Hello'>'world' #比較字符串大小? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
False? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?>>> [1,2,3] < [1,2,4] #比較列表大小? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? True
>>> 'Hello'>3 #字符串和數(shù)字不能比較
Traceback (most recent call last):? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?File "<stdin>", line 1, in <module>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TypeError: '>' not supported between instances of 'str' and 'int'
>>> {1,2,3}<{1,2,3,4} #測試是否子集? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? True??????????????????????????????????????????????????????????????????????????????????????????????????????????
??>>> {1,2,3}=={3,2,1} #測試兩個集合是否相等????????????????????????????????????????????????
True? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
>>> {1,2,4}>{1,2,3}? ? ?#集合之間的包含測試???????????????????????????????????????????????
?False
2.2.3成員測試運算符in與同一性測試運算
*?成員測試運算符in用于成員測試爬凑,即測試一個對象是否為另一個對象的元素徙缴。
>>> 3 in[1,2,3] #測試3是否存在于列表[1,2,3]中/not in? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? True???????????????????????????????????????????????????????????????????????????????????????????????????????????
?>>> 5 in range(1,10,1) #range()是用來生成指定范圍數(shù)字的內(nèi)置函數(shù)? ? ? ??
True? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
>>> 'abc' in 'abcdefg' #子字符串測試? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
True
* 同一性測試運算符is用來測試兩個對象是否是同一個,如果是則返回True嘁信,否則返回False于样。如果兩個對象是同一個,二者具有相同的內(nèi)存地址潘靖。
>>> 3 is 3
True
>>> x=[300,300,300]
>>> x[0] is x[1] #基于值的內(nèi)存管理穿剖,同一個值在內(nèi)存中只有一份
True
>>> x=[1,2,3]
>>> y=[1,2,3]
>>> x is y #上面形式創(chuàng)建的x和y不是同一個列表對象
False
>>> x[0] is y[0]
True
2.2.4位運算符與集合運算符
* 集合的交集、并集秘豹、對稱差集等運算借助于位運算符來實現(xiàn)携御,而差集則使用減號運算符實現(xiàn)(注意,并集運算符不是加號)。
>>> {1,2,3} | {3,4,5} #并集啄刹,自動去除重復元素
{1, 2, 3, 4, 5}
>>> {1,2,3} &{3,4,5} #交集
{3}
>>> {1,2,3} ^{3,4,5} #對稱差集(集合A與集合B中所有不屬于A∩B的元素的集合)
{1, 2, 4, 5}
>>> {1,2,3}-{3,4,5}#差集
{1, 2}
練習:并集( '|' )涮坐、交集( '&' )、對稱差集( '^' )誓军、差集( '-' )袱讹。
2.2.5邏輯運算符
* 邏輯運算符and、or昵时、not常用來連接條件表達式構成更加復雜的條件表達式捷雕,并且and和or具有惰性求值或邏輯短路的特點。當連接多個表達式時只計算必須要計算的值壹甥。
* 在編寫復雜條件表達式時充分利用這個特點救巷,合理安排不同條件的先后順序,在一定程度上可以提高代碼運行速度句柠。
* 另外要注意的是浦译,運算符and和or并不一定會返回True或False,而是得到最后一個被計算的表達式的值溯职,但是運算符not一定返回True或False精盅。
>>> 3>5 and a>3 #注意,此時并沒有定義變量a
False
>>> 3>5? or? a>3? #3>5的值為False谜酒,所以需要計算后面的表達式
Traceback (most recent call last):
? File "<pyshell#15>", line 1, in <module>
? ? 3>5? or? a>3? #3>5的值為False叹俏,所以需要計算后面的表達式
NameError: name 'a' is not defined
>>> 3<5? or? a>3? #3>5的值為True,不需要計算后面的表達式
True
>>> 3 and 5? #最后一個計算的表達式的值作為整個表達式的值
5
>>> 3 and 5>2
True
>>> 3 is not 5? #not的計算結果只能是True或False之一
True
>>> not 3
False
>>> not 0
True
練習:1.根據(jù)年歷知識年份y是否為閏年的條件是下列條件之一成立僻族。
(1)這一年可被4整除粘驰,同時不能被100整除;
(2)這一年可被400整除鹰贵。
請寫出年份(y)是閏年的判斷條件晴氨。
? ? ? ? ? ? ? (y%4==0 and? y%100!=0)? or? ?(y%400==0)
驗證如下:
>>> y=1600
>>> (y%4==0 and? y%100!=0)? or? (y%400==0)
True
>>> y=1000
>>> (y%4==0 and? y%100!=0)? or? (y%400==0)
False
2.2.6 矩陣乘法運算符@
* 從Python 3.5開始增加了一個新的矩陣相乘運算符@,不過由于Python沒有內(nèi)置的矩陣類型碉输,所以該運算符常與擴展庫numpy一起使用籽前。
>>> import numpy #numpy是用于科學計算的pyhon擴展庫
>>> x=numpy.ones(3)? #ones()函數(shù)用于生成全1矩陣,參數(shù)表示矩陣大小
>>> m=numpy.eye(3)*3? #eye()函數(shù)用于生成單位矩陣
>>> print(x)
[1. 1. 1.]
>>> print(m)
[[3. 0. 0.]
[0. 3. 0.]
[0. 0. 3.]]
>>> m[0,2]=5? #設置矩陣指定位置上元素的值
>>> m[2,0]=3
>>> print(x @ m)? #矩陣相乘
[6. 3. 8.]? ? ?敷钾?枝哄??復習矩陣知識阻荒,要不然不理解怎么算的挠锥,,侨赡,
2.3Python關鍵字簡要說明
* Python關鍵字只允許用來表達特定的語義蓖租,不允許通過任何方式改變它們的含義粱侣,也不能用來做變量名、函數(shù)名或類名等標識符蓖宦。
* 在Python開發(fā)環(huán)境中導入模塊keyword之后齐婴,可以使用print(keyword.kwlist)查看所有關鍵字。
2.4常用內(nèi)置函數(shù)
Python常用內(nèi)置函數(shù)用法精要
dir(_builtins_)
使用help(函數(shù)名)可以查看某個函數(shù)的用法:
>>> help(sum)
Help on built-in function sum in module builtins:
sum(iterable, start=0, /)
? ? Return the sum of a 'start' value (default: 0) plus an iterable of numbers
? ? When the iterable is empty, return the start value.
? ? This function is intended specifically for use with numeric values and may
? ? reject non-numeric types.
2.4.1類型轉換
* list()稠茂、tuple()柠偶、dict()、set()睬关、frozenset()用來把其他類型的數(shù)據(jù)轉換成為列表诱担、元組、字典电爹、可變集合和不可變集合蔫仙,或者創(chuàng)建空列表、空元組藐不、空字典和空集合匀哄。
>>> list(range(5)) #把range對象轉換為列表
[0, 1, 2, 3, 4]
>>> tuple(_)? #一個下劃線表示上一次正確的輸出結果
(0, 1, 2, 3, 4)
>>> dict(zip('1234','abcde'))? #創(chuàng)建字典
{'1': 'a', '2': 'b', '3': 'c', '4': 'd'}
>>> set('1112234')? #創(chuàng)建可變集合,自動去除重復
{'4', '2', '3', '1'}
>>> _.add('5')
>>> _
{'2', '3', '5', '4', '1'}
>>> frozenset('1112234')? #創(chuàng)建不可變集合雏蛮,自動去除重復
frozenset({'4', '2', '3', '1'})
>>> _.add('5')? #不可變集合frozenset不支持元素添加與刪除
Traceback (most recent call last):
? File "<pyshell#46>", line 1, in <module>
? ? _.add('5')? #不可變集合frozenset不支持元素添加與刪除
AttributeError: 'frozenset' object has no attribute 'add'
2.4.2? 類型判斷
* 內(nèi)置函數(shù)type()和isinstance()可以用來判斷數(shù)據(jù)類型,常用來對函數(shù)參數(shù)進行檢查阱州,可以避免錯誤的參數(shù)類型導致函數(shù)崩潰或返回意料之外的結果挑秉。
>>> type(3) #查看3的類型
<class 'int'>
>>> type({3}) in (list,tuple,dict)? #判斷{3}是否為list,tuple或dict類型的實例
False
>>> type({3}) in (list,tuple,dict,set) #判斷{3}是否為list,tuple,dict或set的實例
True
>>> isinstance(3,int)? #判斷3是否為int類型的實例
True
>>> isinstance(3j,(int,float,complex))? #判斷3j是否為int,float或complex類型
True
2.4.3基本輸入輸出
* input()和print()是Python的基本輸入輸出函數(shù),前者用來接收用戶的鍵盤輸入苔货,后者用來把數(shù)據(jù)以指定的格式輸出到標準控制臺或指定的文件對象犀概。不論用戶輸入什么內(nèi)容,input()一律返回字符串對待夜惭,必要的時候可以使用內(nèi)置函數(shù)int()姻灶、float()或eval()對用戶輸入的內(nèi)容進行類型轉換。
>>> x=input("Please input:")
Please input:345
>>> x
'345'
>>> type(x)? ? #把用戶的輸入作為字符串對待
<class 'str'>
>>> int(x)? ? #轉換為整數(shù)
345
>>> eval(x) #類型轉換诈茧,list,tuple,dict和string相互轉化
345
>>> x=input("Please input:")
Please input:[1,2,3]
>>> x
'[1,2,3]'
>>> type(x)
<class 'str'>
>>> eval(x)
[1, 2, 3]
練習作業(yè):
1.從鍵盤輸入一個學生的語文产喉、數(shù)學、英語成績敢会,計算其總分與平均分曾沈。
>>> a=input("請輸入學生的姓名:")
請輸入學生的姓名:小紅
>>> b=input("學生"+x+"的語文成績?yōu)椋?)
學生小紅的語文成績?yōu)椋?8
>>> c=input("學生"+x+"的數(shù)學成績?yōu)椋?)
學生小紅的數(shù)學成績?yōu)椋?5
>>> d=input("學生"+x+"的英語成績?yōu)椋?)
學生小紅的英語成績?yōu)椋?4
>>> x=int(b)+int(c)+int(d)
>>> y=x/3
>>> print("您好,學生"+str(a)+"的語文鸥昏、數(shù)學、英語成績分別為:"+str(b)+"分吏垮、"+str(c)+"分障涯、"+str(d)+"分罐旗;\n三門學科總分為:"+str(x)+"分,平均分為:"+str(y)+"分")
您好唯蝶,學生小紅的語文九秀、數(shù)學、英語成績分別為:88分生棍、75分颤霎、84分;
三門學科總分為:247分涂滴,平均分為:82分
2.用戶輸入一個三位自然數(shù)友酱,計算并輸出其佰位、十位和個位上的數(shù)字柔纵。
>>> x=input("請輸入一個自然三位數(shù):")
請輸入一個自然三位數(shù):123
>>> a=int(x)//100
>>> b=(int(x)-a*100)//10
>>> c=int(x)-a*100-b*10
>>> print("你好缔杉,你所輸入的自然三位數(shù)中,百位上的數(shù)字為:"+str(a)+";十位上的數(shù)字為:"+str(b)+";個位上的數(shù)字為:"+str(c)+".")
你好搁料,你所輸入的自然三位數(shù)中或详,百位上的數(shù)字為:4;十位上的數(shù)字為:5;個位上的數(shù)字為:6.
>>>?
請輸入一個自然三位數(shù):896
>>>?
>>>?
>>>?
>>>?
你好,你所輸入的自然三位數(shù)中郭计,百位上的數(shù)字為:8;十位上的數(shù)字為:9;個位上的數(shù)字為:6.
-------------------------純手打總結霸琴,轉載請注明出處,愛您~