摘要:根據(jù)有效范圍作用域分為全局變量和局部變量。類型以開頭標(biāo)識類型以開頭標(biāo)識類型以進(jìn)制的字節(jié)碼表示,實(shí)際上是一個字節(jié)串,回應(yīng)了它的另一個名字。
< 返回索引頁
基本語法
Hello World
代碼注釋
關(guān)鍵字
數(shù)據(jù)類型
變量、常量
變量
變量賦值
變量命名
變量的作用域
常量
字符串與編碼
字符轉(zhuǎn)義
字符編碼
字符串操作
運(yùn)算符與表達(dá)式
運(yùn)算符
表達(dá)式
輸入輸出
總結(jié)
練習(xí)
參考:
基本語法從本章開始,我們開始學(xué)習(xí)Python的基本語法。
Hello World在上一章,我們python環(huán)境已經(jīng)安裝完畢,也選擇好了合適自己的編輯器,現(xiàn)在我們開始進(jìn)入python的編程世界。
讓我們來看一個python的簡單程序,HelloWorld。
解釋器運(yùn)行
打開系統(tǒng)終端輸入python,啟動python解釋器,錄入如下代碼,回車觀察返回值。
$ python3 Python 3.6.5 (default, Mar 30 2018, 06:42:10) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print("Hello world!")
代碼返回如下:
Hello world!
下面我們來解釋下這段代碼:
1、>>> python的交互環(huán)境的提示符
2、print python 內(nèi)置的打印方法,它會打印括號中的字符串。
代碼文件運(yùn)行
我們可以把以上代碼保存成python的腳本文件,并保存為hello.py, python的代碼文件是以py作為擴(kuò)展名的。下面我們來執(zhí)行它,在我們的系統(tǒng)終端執(zhí)行如下命令:
$python hello.py
代碼返回如下:
Hello world! 你好,世界!
到這,我們知道了如何在python 解釋器和代碼文件中運(yùn)行代碼。
定義
我們在編寫代碼的時候,往往需要添加一些說明以幫助我們來理解代碼邏輯,在代碼執(zhí)行的時候,這些說明不會被執(zhí)行。這些說明叫做注釋。Python中的注釋,使用井號、單引號或雙引號標(biāo)識,如下:
# 單行注釋 """ 我是多行注釋 我是多行注釋 """ """ 我是多行注釋 我是多行注釋 """
注釋常用場景
腳本文本的開頭,說明腳本主要功能。
代碼中,說明代碼功能。
函數(shù)和方法名(是python中的語法結(jié)構(gòu),后邊會講到)下,作為說明出現(xiàn)。
關(guān)鍵字程序設(shè)計中,預(yù)留了一些標(biāo)識符號供語言本身或系統(tǒng)使用,這些標(biāo)識符被稱為關(guān)鍵字。每個關(guān)鍵字都有自己的含義,在python中可通過以下方式查看關(guān)鍵字:
>>> import keyword >>> keyword.kwlist ["and", "as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "exec", "finally", "for", "from", "global", "if", "import", "in", "is", "lambda", "not", "or", "pass", "print", "raise", "return", "try", "while", "with", "yield"]
我們可以通過如下方法判斷字符串是否為關(guān)鍵字:
>>> keyword.iskeyword("and") True >>> keyword.iskeyword("have") False
關(guān)鍵字不可作為變量的名稱使用。
數(shù)據(jù)類型變量中儲存數(shù)據(jù)的類型可以是多種多樣的,我們把變量中存儲數(shù)據(jù)的類型叫數(shù)據(jù)類型。而python 中常用的數(shù)據(jù)類型,有這么幾種:
整型(int): Python3中可以處理任意大小的整數(shù)(Python 2.x中有int和long兩種類型的整數(shù),但這種區(qū)分對Python來說意義不大,在python中內(nèi)存分配是自動的,用戶并不關(guān)心這些細(xì)節(jié),反而給用戶無限大的使用空間更好,因此在Python 3.x中整數(shù)只有int這一種了),而且支持二進(jìn)制(如0b100,換算成十進(jìn)制是4)、八進(jìn)制(如0o100,換算成十進(jìn)制是64)、十進(jìn)制(100)和十六進(jìn)制(0x100,換算成十進(jìn)制是256)的表示法。
復(fù)數(shù)型(complex):形如3+5j,跟數(shù)學(xué)上的復(fù)數(shù)表示一樣,唯一不同的是虛部的i換成了j。
浮點(diǎn)型(float):浮點(diǎn)數(shù)也就是小數(shù),之所以稱為浮點(diǎn)數(shù),是因?yàn)榘凑湛茖W(xué)記數(shù)法表示時,一個浮點(diǎn)數(shù)的小數(shù)點(diǎn)位置是可變的,浮點(diǎn)數(shù)除了數(shù)學(xué)寫法(如123.456)之外還支持科學(xué)計數(shù)法(如1.23456e2)。
字符串型(str):字符串是以單引號或雙引號括起來的任意文本,比如"hello"和"hello",字符串還有原始字符串表示法、字節(jié)字符串表示法、Unicode字符串表示法,而且可以書寫成多行的形式(用三個單引號或三個雙引號開頭,三個單引號或三個雙引號結(jié)尾)。
布爾型(bool):布爾值只有True、False兩種值,要么是True,要么是False,在Python中,可以直接用True、False表示布爾值(請注意大小寫),也可以通過布爾運(yùn)算計算出來(例如3 < 5會產(chǎn)生布爾值True,而2 == 1會產(chǎn)生布爾值False)。python中把None、0、"" 都視為False。
空類型: None 為空類型。
各數(shù)據(jù)類型之間是可以相互轉(zhuǎn)換的,可使用Python提供的內(nèi)置函數(shù):
int():將一個數(shù)值或字符串轉(zhuǎn)換成整數(shù),可以指定進(jìn)制。
float():將一個字符串轉(zhuǎn)換成浮點(diǎn)數(shù)。
str():將指定的對象轉(zhuǎn)換成字符串形式,可以指定編碼。
另外2個字符轉(zhuǎn)化內(nèi)置函數(shù):
chr():將整數(shù)轉(zhuǎn)換成該ASCII編碼對應(yīng)的字符串(一個字符,如 chr(65) 返回為字符串 "A" )。
ord():將字符串轉(zhuǎn)換成對應(yīng)的ASCII編碼。
變量、常量 變量變量(英語:Variable,scalar),是內(nèi)存中實(shí)際存在的數(shù)據(jù)或存儲器中存儲數(shù)據(jù)的一塊內(nèi)存空間地址,變量的值可以被讀取和修改。
Python 中的變量是內(nèi)存中保存數(shù)據(jù)的地址的一個別稱。變量是沒有類型的,變量對應(yīng)的值對象是有類型的。變量的類型是跟著值對象走的。嚴(yán)格來說,類型是屬于對象的,而不是變量, 變量和對象是分離的,對象是內(nèi)存中儲存數(shù)據(jù)的實(shí)體,變量則是指向?qū)ο蟮膬?nèi)存地址。
變量賦值在Python 的語法中,變量無需聲明,可直接使用,區(qū)別于其他語言,有些語言的變量需要先聲明后使用。python中,使用像上邊代碼中的等號‘=’來表示賦值,即表示將等號右邊的數(shù)據(jù)賦值給左邊的變量,變量的類型有它存儲的數(shù)值來決定。
>>> a = 123 >>> b = "123" >>> c = True >>> print(type(a),type(b),type(c)) (, , ) >>> d, e = 1,2
變量命名知識點(diǎn):
我們可以使用內(nèi)置函數(shù) type 來查看變量的數(shù)據(jù)類型。
可同時給多個變量賦值
變量的命令是一個重要的規(guī)則,好的命名可以增加代碼的可讀性,提高代碼的可維護(hù)性。python中變量的命名有如下要求:
只能使用數(shù)據(jù)、字母和下劃線,且只能以字母或下劃線開頭。
大小寫敏感,即區(qū)分大小寫。a和A 是2個變量名。
不能使用關(guān)鍵字及系統(tǒng)預(yù)留字重復(fù)。
說明:
系統(tǒng)預(yù)留字,及系統(tǒng)的函數(shù)及模塊的名字。
除了以上這些硬性規(guī)定外,變量命名還是比較寬松的。為了更好的處理命名問題,python 社區(qū)指定了一個開發(fā)規(guī)范 PEP8。其中除了命名規(guī)范外,還描述了其他一些語法的最佳實(shí)踐。它可作為我們?nèi)蘸缶帉懘a及項(xiàng)目開發(fā)的規(guī)范使用,對我們提高代碼的質(zhì)量有很大的好處。
變量的作用域作用域,顧名思義,可以理解為在一定范圍內(nèi)起作用。映射到我們的編碼中時,便是在一定的代碼范圍內(nèi)有效。在編碼時,代碼分各種邏輯塊的,類似我們文章的段落,可以更好的理解閱讀分類。那么在這些限定的范圍內(nèi),變量的有效性是有影響的。根據(jù)有效范圍作用域分為全局變量(Local)和局部變量(Global)。全局變量 是在整個程序系統(tǒng)或文件全局中有效的變量。局部變量表示在一個代碼邏輯塊中有效的變量。全局和局部變量是相對的,如我們可以叫一個相對于文件來說的全局變量,但是在多個文件或者文件包中便成了局部變量。除了全局和局部變量,Python中還有以下作用域:
E (Enclosing) 閉包函數(shù)外的函數(shù)中
B (Built-in) 內(nèi)建作用域
作用域以 L –> E –> G –>B 的規(guī)則查找,即:在局部找不到,便會去局部外的局部找(例如閉包,稍后會講),再找不到就會去全局找,再者去內(nèi)建中找。
常量變量中存儲的數(shù)值是可以變動的,那么有沒有不變的呢?答案是有的,如數(shù)學(xué)計算使用的PI。我們經(jīng)常把代碼中,存儲不變數(shù)據(jù)的變量稱之為常量。可見,常量是一種特殊的變量。
字符串與編碼上節(jié)我們談到變量有許多的數(shù)據(jù)類型,其中字符串類型比較復(fù)雜,這里多帶帶講解下。
字符轉(zhuǎn)義字符串,故名思意,是零個或多個字符組成的有限序列,以單引號或雙引號包裹。既然是以字符組成,那么便包括單引號或雙引號自身,如下:
a = "I"m DeanWu!"
我們在執(zhí)行以上語句的時候會報錯:
>>> a = "I"m DeanWu!" File "", line 1 a = "I"m DeanWu!" ^ SyntaxError: invalid syntax
這是因?yàn)樽址虚g的單引號把字符串給截斷了,當(dāng)python解釋器執(zhí)行到該單引號后,后邊的語法便報錯了。如何解決?這便需要進(jìn)行轉(zhuǎn)義,所謂轉(zhuǎn)義,便是讓python解釋器解釋執(zhí)行的時候,被轉(zhuǎn)義的字符不在表示原先的意思,而變?yōu)椴唤忉寛?zhí)行的字符串。Python中使用 進(jìn)行轉(zhuǎn)義。上邊的語法可以寫成這樣:
a = "I"m DeanWu!"字符編碼
在計算機(jī)基礎(chǔ)部分,我們知道了計算機(jī)編碼相關(guān)知識,概括如下:
ASCII 使用1個字節(jié),只支持英文;
GB2312 使用2個字節(jié),支持6700+漢字;
GBK GB2312的升級版,支持21000+漢字;
Unicode編碼,使用2、3或4個字節(jié)表示字符;
UTF 編碼為Unicode編碼的一種可變長實(shí)現(xiàn);
計算機(jī)內(nèi)存中使用Unicode編碼處理,存儲和傳輸則使用UTF編碼。
接下來,我們看下Python中的編碼。Python2中的默認(rèn)編碼為ASCII編碼,Python3中使用的則是UTF-8編碼。可使用如下命令查看:
import sys sys.getdefaultencoding()
在Python 編程中,編碼問題往往是新手的一個困擾,我們來深入展開說下這個問題。Python2和Python3的默認(rèn)編碼是不一樣的,它們處理編碼方式也是不一樣。
Python2中的編碼
在 Python2中字符串類型有4種:str、unicode、basestring和bytes。
basestring 是一個基類(稍后會講到此概念,可暫時理解為父親或基礎(chǔ)即可),str和unicode類型在此基礎(chǔ)上構(gòu)建。
str 是Python設(shè)計之初的字符串類型,默認(rèn)使用系統(tǒng)編碼。
unicode 是了使Python支持Unicode編碼,在2.0版本之后添加的一種字符串類型。
bytes 是字節(jié)串,str本身便是一個字節(jié)串,那可認(rèn)為bytes是str的一個別稱,使用和str完全一致。
看一實(shí)例:
>>> a = "你好" # 使用系統(tǒng)編碼的str 類型 >>> type(a)>>> print a 你好 >>> a "xe4xbdxa0xe5xa5xbd" # 系統(tǒng)編碼為 utf-8的字節(jié)碼,使用了3個字節(jié)表示一個漢字; >>> ua = u"你好" # unicode 編碼 >>> type(ua) >>> print ua 你好 >>> ua u"u4f60u597d" # unicode 編碼格式的你好,對應(yīng)unicode代碼表中代碼 >>> b = b"你好" # bytes 類型的字符串 >>> type(b) >>> print b 你好 >>> b "xe4xbdxa0xe5xa5xbd" # 使用3個字節(jié)表示1個漢字,且字節(jié)碼和str類型一樣;
知識點(diǎn):
Python 解釋器默認(rèn)使用系統(tǒng)的編碼方式聲明變量。
unicode類型以u開頭標(biāo)識
bytes 類型以 b 開頭標(biāo)識
str類型以16進(jìn)制的ASCII字節(jié)碼表示,實(shí)際上是一個字節(jié)串,回應(yīng)了它的另一個名字bytes。
unicode類型以unicode字符碼表示,是真正的字符串。
str與unicode 類型之間是可以相互轉(zhuǎn)化的,通過 encode和decode 來實(shí)現(xiàn)。來看實(shí)例:
>>> a = "你好" >>> a.decode("utf-8") # decode 解碼: str類型(UTF-8) --> unicode類型(Unicode) u"u4f60u597d" # 對應(yīng)的unicode代碼 >>> ua u"u4f60u597d" >>> ua.encode("utf-8") # encode 編碼: unicode類型(Unicode) --> str類型(UTF-8) "xe4xbdxa0xe5xa5xbd" # utf-8的編碼的 str字節(jié)串 >>> a.decode("gbk") # 嘗試使用 gbk 解碼,結(jié)果出現(xiàn)亂碼 u"u6d63u72b2u30bd" >>> print a.decode("gbk") 浣犲ソ >>> a.decode("gbk").encode("gbk") # 使用 gbk 解碼,再編碼,成功還原 "xe4xbdxa0xe5xa5xbd" >>> print a.decode("gbk").encode("gbk") 你好 >>> a.decode("gbk").encode("utf-8") # 使用不同的編碼來解碼和編碼, 也出現(xiàn)亂碼 "xe6xb5xa3xe7x8axb2xe3x82xbd" >>> print a.decode("gbk").encode("utf-8") 浣犲ソ
知識點(diǎn):
使用什么編碼編碼,就需要使用什么編碼解碼,否則會出現(xiàn)亂碼。
轉(zhuǎn)為unicode類型要decode解碼。
轉(zhuǎn)為str類型要encode編碼。
區(qū)分Unicode類型和Unicode編碼,Unicode編碼是一套編碼集,內(nèi)容豐富,編碼內(nèi)容涵蓋了世界各地的語言,實(shí)現(xiàn)方式有UTF-8、UTF-16、UTF-32;Unicode類型只是python字符串的一種類型,使用Unicode編碼作為其編碼格式,可經(jīng)過各種編碼方式(UTF、GBK、ASCII)編碼成str類型字符或者叫bytes(字節(jié)序列)類型供計算機(jī)使用。
Unicode 編碼的兼容性,可作為其他編碼格式的轉(zhuǎn)碼的中間站。
上邊這些例子是直接在python解釋器中跑的代碼,而python代碼文件在執(zhí)行時,有所不同,會受到文件編碼的影響。
文件的存儲是以二進(jìn)制流的方式保存在硬盤上。當(dāng)Python文件被執(zhí)行時,這些文件會以二進(jìn)制流的方式加載到內(nèi)存中,然后按照Python的默認(rèn)編碼方式解碼成相應(yīng)的python代碼對應(yīng)的unicode編碼的字節(jié)碼來解釋執(zhí)行。在python2中,默認(rèn)編碼為ASCII碼,那么當(dāng)文件中有非ASCII碼時,這個解碼過程便會出錯。Python 為了解決這個問題,在Python 文件頭部增加了文件的編碼聲明,PEP236就是為這個問題而創(chuàng)建的改進(jìn)意見。
Python 文件格式聲明如下:
# coding:utf-8
或
# -*- coding:utf-8 -*-
來看實(shí)例 coding_utf.py:
# -*- coding:utf-8 -*- a = "你好" print(a) print(type(a)) ua = u"你好" print(ua) print(type(ua))
在命令行執(zhí)行python coding_utf.py, 返回如下:
你好你好
ok,沒有問題。來看下執(zhí)行時都做了些什么事:
1、python解釋器讀取文件頭部聲明的編碼,將其作為變量解碼時使用的編碼。
2、python讀取代碼,自動將非unicode編碼的變量解碼成unicode給計算機(jī)內(nèi)存使用。
3、python解釋器執(zhí)行代碼,打印utf-8編碼的a和unicode編碼的ua。
接下來,當(dāng)我們把文件編碼和開頭標(biāo)識改為GBK后,再次執(zhí)行:
???你好 你好
大家看到第一個你好成為亂碼,這是為什么? 根據(jù)上邊的分析,打印時,a的編碼為gbk, ua的編碼為unicode。而我終端的編碼為utf-8,對gbk的不兼容,所以導(dǎo)致亂碼。同樣的代碼,當(dāng)放到默認(rèn)gbk編碼的windows終端中,則會輸出正常。
那么有沒有辦法讓他輸出正常呢?有的,我們只要手動顯示的把它解碼成兼容的 unicode 編碼即可。
print(a.decode("gbk"))
到這里,總結(jié)以上說的問題,影響Python 字符編碼的地方主要有以下幾點(diǎn):
Python解釋器的默認(rèn)編碼,python2中默認(rèn)為ASCII。
Python源文件文件聲明編碼及保存的編碼方式。
系統(tǒng)終端使用的編碼,會影響python文件執(zhí)行時的編碼方式。
操作系統(tǒng)的編碼,會影響終端的編碼方式。
Python3中編碼
在python2中,編碼問題有2個大的問題:
使用 ASCII 作為默認(rèn)編碼方式,不能很好的支持非ASCII碼字符;
將字符串分為了str 和 unicode兩種類型,讓大家容易混淆;
Python3 對以上問題做了很好的修正。Python3 默認(rèn)編碼改為了 UTF-8,對于非ASCII碼支持更強(qiáng)大。其次,Python3 合并了str 和 unicode 類型,統(tǒng)一為 str 類型。使用 bytes類型來表示字節(jié)類型。這樣很好的區(qū)分了字符串和字節(jié)串,str即為字符串,bytes 為字節(jié)串或叫二進(jìn)制字節(jié)。
看下面的例子:
>>> a = "你好" # utf-8 編碼的str類型 >>> type(a)>>> print(a) 你好 >>> repr(a) ""你好"" >>> a # 顯示為原字符串 "你好" >>> ua = u"你好" >>> type(ua) # unicode 編碼的 str類型 >>> print(ua) 你好 >>> repr(ua) ""你好"" >>> ua # 可以看到,字符串直接顯示并沒有顯示unicode編碼 "你好" >>> a.decode("utf-8") # unicode 字符串已不能再解碼了 Traceback (most recent call last): File " ", line 1, in AttributeError: "str" object has no attribute "decode" >>> a.encode("utf-8") # 顯示為字節(jié)串 b"xe4xbdxa0xe5xa5xbd" >>> e = "Test" >>> e "Test" >>> e.encode("utf-8") # 顯示為原字符串 b"Test"
字符串操作知識點(diǎn):
1、可以看到Unicode類型的字符串類型為 str,帶不帶u 是一樣的。
2、unicode 字符串編碼成utf-8格式的字節(jié)碼,前邊帶 b 說明是bytes 字節(jié)類型。
3、在Python3中,所有unicode編碼顯示均為原字符串,非 unicode 編碼的 非ASCII碼范圍的字符 顯示均為字節(jié)串。
字符串中的運(yùn)算符
Python 中字符串可以直接使用 "+" 鏈接。
>>> a = "你好" >>> b = "世界" >>> print(a+b) 你好世界
"*2" 標(biāo)識2次重復(fù)輸出
>>> print(a*2) 你好你好
len 內(nèi)建函數(shù),可以獲取字符串的字節(jié)長度
>>> a = "你好" >>> a "xe4xbdxa0xe5xa5xbd" # utf-8 編碼,3個字節(jié)代表一個漢字。 print(len(a)) >>> e = "hello" >>> print(len(e)) 5
[] 索引,可通過下標(biāo)的方式來獲取字符串的某個字節(jié),下標(biāo)是從 0 開始的,最后一個為"字符串長度-1"或"-1"。
>>> print(a) helloworld >>> a[2] "l" >>> a[0] "h" >>> a[9] "d" >>> a[-1] "d"
[:] 切片,可使用字符串下標(biāo)來截取字符串
>>> a = "helloworld" >>> a[0:5] "hello"
> 說明:
下標(biāo)從零開始
開始可以省略,默認(rèn)為0
結(jié)束可以省略,默認(rèn)為-1
in 判斷某變量是否在字符串中。
>>> a = "helloworld" >>> "hello" in a True
格式化
有時候,我們要將多個變量組成一個我們需要的字符串來使用,這個過程叫做格式化。Python中格式化的方式有兩種,一種使用‘%’ ,一種是使用format內(nèi)建函數(shù)。
使用 % 格式化,格式化變量,依次由左向右對應(yīng)。
>>> c = "%s,%s!"%(a,b) >>> print(c) 你好,世界!
使用 %來格式化時,%s中的s叫做占位符,不同的類型需要不同的占位符,如下:
占位符 | 類型 |
---|---|
%d | 整數(shù) |
%f | 浮點(diǎn)數(shù) |
%s | 字符串 |
%x | 十六進(jìn)制整數(shù) |
使用format 格式化,格式化變量,由左向右根據(jù)大括號的序號對應(yīng)。
>>> d = "{1},{0}".format("世界","你好") >>> print(d) 你好,世界
常用方法
可使用內(nèi)建函數(shù)dir查看某對象的方法:
>>> dir(a) ["__add__", "__class__", "__contains__", "__delattr__", "__doc__", "__eq__", "__format__", "__ge__", "__getattribute__", "__getitem__", "__getnewargs__", "__getslice__", "__gt__", "__hash__", "__init__", "__le__", "__len__", "__lt__", "__mod__", "__mul__", "__ne__", "__new__", "__reduce__", "__reduce_ex__", "__repr__", "__rmod__", "__rmul__", "__setattr__", "__sizeof__", "__str__", "__subclasshook__", "_formatter_field_name_split", "_formatter_parser", "capitalize", "center", "count", "decode", "encode", "endswith", "expandtabs", "find", "format", "index", "isalnum", "isalpha", "isdigit", "islower", "isspace", "istitle", "isupper", "join", "ljust", "lower", "lstrip", "partition", "replace", "rfind", "rindex", "rjust", "rpartition", "rsplit", "rstrip", "split", "splitlines", "startswith", "strip", "swapcase", "title", "translate", "upper", "zfill"] >>>
endswith(‘’) 是否以某字符串結(jié)尾,是則返回True,否則返回False;
startswith("") 是否以某字符串開始,是則返回True,否則返回False;
split() 分隔字符串,返回一個列表(python高級數(shù)據(jù)結(jié)構(gòu),稍后講解)。
lower() 轉(zhuǎn)為小寫。
upper() 轉(zhuǎn)為大寫。
strip("") 2側(cè)去除某字符串。
lstrip("") 左側(cè)去除某字符串。
rstrip("") 右側(cè)去除某字符串。
join() 以某字符串為連接符,合并某列表。
ljust(int) 左對齊,并使用空格填充至指定長度的新字符串
rjust(int) 右對齊,并使用空格填充至指定長度的新字符串
運(yùn)算符與表達(dá)式在編程世界中的表達(dá)式和我們數(shù)學(xué)上的表達(dá)式有些類似,都是一種句法,此處意義更純粹,有運(yùn)算符和操作數(shù)組成。例如:2+3,其中像+類似的符號即為運(yùn)算符,可通過它對操作數(shù)做相應(yīng)操作。2和3 即為操作數(shù)。
運(yùn)算符運(yùn)算符,顧名思義,可以通過它對一些變量做運(yùn)算處理。此處的運(yùn)算除了簡單的四則運(yùn)算,還包括比較、賦值等復(fù)雜操作。Python中運(yùn)算符主要包括以下幾種:
算數(shù)運(yùn)算符
比較運(yùn)算符
邏輯運(yùn)算符
賦值運(yùn)算符
位運(yùn)算符
成員運(yùn)算符
身份運(yùn)算符
下面我們一一來看。
算數(shù)運(yùn)算符
算數(shù)運(yùn)算符,主要對程序中的變量做四則運(yùn)算使用。主要包含如下運(yùn)算符:
比較運(yùn)算符
比較運(yùn)算符,用來比較變量是否相等,返回置為布爾類型。主要包含以下運(yùn)算符:
注意:
python2中運(yùn)行不同類型的變量作比較,比較時會自動做類型轉(zhuǎn)化,由簡單類型向復(fù)雜類型轉(zhuǎn)變。
python3只允許同類型變量比較。
邏輯運(yùn)算符
邏輯運(yùn)算符,將變量按一定邏輯組合成一個新的表達(dá)式,該表達(dá)式返回一個布爾類型的值。常常用來作為判斷條件時間,判斷組合的新表達(dá)式是否成立。邏輯運(yùn)算符主要包含以下:
賦值運(yùn)算符
賦值運(yùn)算符,即將某個值賦給默一遍量的運(yùn)算符。主要包含如下:
注意:
//=與/= 在python2中都為取整除法
位運(yùn)算符
位運(yùn)算符,是針對二進(jìn)制數(shù)據(jù)的一種字節(jié)位的運(yùn)算,主要包含以下符號:
成員運(yùn)算符
成員運(yùn)算符,判斷某變量是否包含另一變量。主要包含以下符號:
身份運(yùn)算符
身份運(yùn)算符,判斷是否2個變量的值及引用的內(nèi)存地址是否一樣。
注意:
與比較運(yùn)算符== 比較,== 為值相等即可,內(nèi)存引用地址可不同;is則為值和內(nèi)存引用地址均相同。
運(yùn)算符優(yōu)先級
各運(yùn)算符按照優(yōu)先級由高到低的順序排列如下:
表達(dá)式前邊說過,表達(dá)式是一種句法,有運(yùn)算符和操作數(shù)組成。下面我們來看一個例子:
# -*- coding:utf-8 -*- length = 10 width = 5 area = length*width print(area)
本例子,使用表達(dá)式計算了長方形的面積。變量length表示長方形的長,變量width 表示長方形的寬,使用算數(shù)運(yùn)算符*,利用表達(dá)式進(jìn)行了乘法計算。通過賦值運(yùn)算符=將表達(dá)式的值賦值給了變量 area。這個過程中,表達(dá)式在其中起了核心邏輯的作用。這個簡單的程序也映射了我們平時的編碼過程,表達(dá)式在其中起了至關(guān)重要的作用,我們要善加利用。
輸入輸出計算機(jī)要處理任務(wù),則需要與人交互。那么python中的輸入輸出是如何實(shí)現(xiàn)的呢?
python2 中提供了輸入函數(shù) input、raw_input來輸入,函數(shù)print 來輸出。python3中raw_input函數(shù)去掉了,功能合并到input。
輸入
先來看下,python2 中raw_input。
>>> raw_input("請輸入:") >>> raw_input("請輸入:") 請輸入:123 "123" >>> raw_input("請輸入:") 請輸入:abc "abc"
可見 raw_input 返回我們輸入的數(shù)據(jù)為一個字符串返回。
再來看下 input,它除了支持字符串還支持表達(dá)式,如下:
>>> input("請輸入:") 請輸入:1+2 3 >>>
可見它輸出了表達(dá)式的值,也就是說它執(zhí)行了表達(dá)式。試想,如果這里放一個破壞我們系統(tǒng)執(zhí)行的表達(dá)式,我們系統(tǒng)便會受到安全威脅。在人們衡量后,在python3中,決定去除該函數(shù),并將原來的raw_input 改名為 input。
輸出
python2 中使用print語句來輸出,python3中則改為了 print函數(shù)。
>>> print("你好", end=",") 你好,>>> a = "世界" >>> print("你好,%s"%a) 你好,世界 >>> print("你好", "世界") 你好世界
語法說明:
end=參數(shù), 傳遞給參數(shù)的字符將追加到打印字符串結(jié)尾,當(dāng)省略時默認(rèn)為回車換行。
print 函數(shù)可傳入多個字符串來打印,當(dāng)傳入多個時,會自動合并鏈接。
print 函數(shù)常被用來在調(diào)試代碼時,打印變量使用。
總結(jié)到此,我們把Python的基本語法和數(shù)據(jù)結(jié)構(gòu)過了一遍。那我們來總結(jié)下,我們都學(xué)到了什么:
1、Python的基本語法:變量、常量、基本數(shù)據(jù)類型、字符串和編碼、運(yùn)算符與表達(dá)式;
這些只是基本語法的組成元素。在程序運(yùn)行時,可能會有多種情況,需要對這些結(jié)構(gòu)做判斷或者需要按順序讀取列表的全部元素,那么這個時候便需要邏輯處理結(jié)構(gòu)。下一章,我們來講解Python中的邏輯處理的控制流語法。
練習(xí)1、如何檢查一個字符串是否以某個字符串開頭或結(jié)尾?
"Hello".startswith("H") "Hello".endswith("o")
2、你想通過某種對齊方式來格式化字符串?
>>> text = "Hello World" >>> text.ljust(20) "Hello World " >>> text.rjust(20) " Hello World" >>> text.center(20) " Hello World " >>>
3、華氏溫度轉(zhuǎn)攝氏溫度。
""" 將華氏溫度轉(zhuǎn)換為攝氏溫度公式: F = 1.8C + 32 """ f = float(input("請輸入華氏溫度: ")) c = (f - 32) / 1.8 print("%.1f華氏度 = %.1f攝氏度" % (f, c))
4、輸入圓的半徑計算計算周長和面積。
""" 輸入半徑計算圓的周長和面積 """ import math radius = float(input("請輸入圓的半徑: ")) perimeter = 2 * math.pi * radius area = math.pi * radius * radius print("周長: %.2f" % perimeter) print("面積: %.2f" % area)
5、輸入年份判斷是不是閏年。
""" 輸入年份 如果是閏年輸出True 否則輸出False """ year = int(input("請輸入年份: ")) # 如果代碼太長寫成一行不便于閱讀 可以使用或()折行 is_leap = (year % 4 == 0 and year % 100 != 0 or year % 400 == 0) print(is_leap)參考:
https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/Day02/%E8%AF%AD%E8%A8%80%E5%85%83%E7%B4%A0.md
http://www.runoob.com/python/python-basic-syntax.html
python 之路,致那些年,我們依然沒搞明白的編碼
熟悉又陌生的字符編碼
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41928.html
摘要:布爾值布爾值和布爾代數(shù)的表示完全一致,一個布爾值只有兩種值的數(shù)據(jù)類型可以通過內(nèi)置的函數(shù)查詢,例如還可以用來判斷和的區(qū)別在于不會認(rèn)為子類是一種父類類型。會認(rèn)為子類是一種父類類型。基本功能是進(jìn)行成員關(guān)系測試和刪除重復(fù)元素。 ...
摘要:針對的初學(xué)者,從無到有的語言如何入門,主要包括了的簡介,如何下載,如何安裝,如何使用終端,等各種開發(fā)環(huán)境進(jìn)行開發(fā),中的語法和基本知識概念和邏輯,以及繼續(xù)深入學(xué)習(xí)的方法。 ...
摘要:前言羅子雄如何成為一名優(yōu)秀設(shè)計師董明偉工程師的入門和進(jìn)階董明偉基于自己實(shí)踐講的知乎為新人提供了很多實(shí)用建議,他推薦的羅子雄如何成為一名優(yōu)秀設(shè)計師的演講講的非常好,總結(jié)了設(shè)計師從入門到提高的優(yōu)秀實(shí)踐。 前言 羅子雄:如何成為一名優(yōu)秀設(shè)計師 董明偉:Python 工程師的入門和進(jìn)階 董明偉基于自己實(shí)踐講的知乎live為Python新人提供了很多實(shí)用建議,他推薦的羅子雄:如何成為一名優(yōu)秀...
摘要:語言也被稱作為膠水語言,可以混合其他如,等來編程可以把其他語言制作的各種模塊尤其是很輕松的聯(lián)結(jié)在一起。會認(rèn)為子類是一種父類類型。 最近學(xué)習(xí)了python3的語法,整理記錄一下;語法是編程的先決條件,精通語法是編好程序的必要條件; 導(dǎo)語 給我最大的感覺是:這個語言的編寫,居然不使用 { }來控制代碼塊的區(qū)域,而是使用縮進(jìn)來分割代碼塊,所以使用python語言編寫的代碼不能壓縮混淆。能夠...
摘要:本文與大家分享一些編程語言的入門書籍,其中不乏經(jīng)典。全書貫穿的主體是如何思考設(shè)計開發(fā)的方法,而具體的編程語言,只是提供一個具體場景方便介紹的媒介。入門入門容易理解而且讀起來幽默風(fēng)趣,對于編程初學(xué)者和語言新手而言是理想的書籍。 本文與大家分享一些Python編程語言的入門書籍,其中不乏經(jīng)典。我在這里分享的,大部分是這些書的英文版,如果有中文版的我也加上了。有關(guān)書籍的介紹,大部分截取自是官...
閱讀 3078·2021-11-24 09:38
閱讀 1330·2021-09-22 15:27
閱讀 2968·2021-09-10 10:51
閱讀 1504·2021-09-09 09:33
閱讀 917·2021-08-09 13:47
閱讀 2072·2019-08-30 13:05
閱讀 892·2019-08-29 15:15
閱讀 2425·2019-08-29 12:21