Python—②Python基礎

Python—②Python基礎

<<<CSDN排版不美觀,想看排版美觀的進Python—②Python基礎>>>

1、Python基礎

①註釋
註釋作用:
1、添加註釋,增強可讀性,方便自己一段時間之後或者其他人快速讀懂代碼
2、調試代碼,當代碼出現問題,先不要刪除掉,而是註釋掉
單行註釋(行註釋):需要註釋的內容前面加 #,不過爲了保證良好的可讀性,建議# 後面添加一個空格,然後再編寫相應的註釋,如果你#後面不加空格就寫註釋了,PyCharm會在你的註釋下方畫波浪線;還建議註釋儘量添加在這行代碼後面,不過需注意,爲了保持可讀性,代碼和#中間留兩個空格
例如:print(“世界 你好!”) # 第一個Python程序
可以利用智能代碼格式化,PyCharm快捷鍵爲Ctrl+Alt+L,會幫你快速格式化代碼,調整成爲規範格式;不過一般建議自己修改一下快捷鍵,因爲其他很多軟件快捷鍵也是這個,會起衝突。我本人改成了Ctrl+1。
多行註釋(塊註釋):如果編寫的註釋信息很多,一行無法顯示,就可以使用多行註釋,以連續的三個引號(單引號和雙引號都可以)開始,並同樣以三個引號結束,中間的內容即多行註釋的內容
註釋的代碼不會運行

關於代碼規範:
PEP(Python Enhancement Proposals)Python增強建議書
PEP 8 ,PEP第八篇文檔專門針對 Python的代碼格式 給出了建議
谷歌有對應的中文文檔:https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/
谷歌對應的中文文檔:https://www.python.org/dev/peps/pep-0008/
一定要注意編碼的規範,因爲這是合格的程序員的必要條件之一

②算術運算符
運算符 描述 實例

  • 加 30+30=60
  • 減 60-30=30
  • 乘 3030=900
    / 除 15/4=3.75
    // 取整數 返回除法的整數部分(商) 9//2 結果爲4
    % 取餘數 返回除法的餘數 9%2=1
    ** 冪 即次方,2**3=8
    擴展:
    符號還可以用於字符串,計算結果就是字符串重複指定次數的結果
    例如:
    print("-" * 12) 和 print("------------") 效果相同

算術運算符優先級
運算符有優先級,優先級越高的先執行,低的後執行,同級運算符遵從從左到右的順序,不過()優先級別最高,因此可以通過()調整優先級。
詳細如下:
運算符 描述
** 冪(高優先級)

  • / % // 乘 除 求餘 取整(中優先級)
    • 加 減(低優先級)
      2+6*6=38

③程序執行原理
CPU(中央處理器,負責處理數據、計算)、內存(臨時存儲數據)、硬盤(永久存儲數據)
安裝的程序存儲在硬盤中,執行的程序保存在內存中,所以當程序需要執行時,首先要被加載到內存中,CPU再執行內存中的代碼
Python程序執行原理
操作系統首先會讓CPU把Python解釋器的程序複製到內存中
Python解釋器會根據語法規則,從上到下讓CPU翻譯Python程序中的代碼
CPU負責執行翻譯完成的代碼

④變量
1、變量的定義:
Python中,每個變量使用前都必須賦值,變量賦值後該變量纔會被創建
= 賦值號
格式:變量名 = 值

變量的類型可以在debug的Variables中看得到
可以在調試中看到的四種類型:
int 整數、float 浮點數、str 字符串、bool 布爾(真true 假false)
在Python中不需要指定數據類型,Python會根據 = 右側的值,自動推導出變量中存儲數據的類型

數據類型可以分爲數字型和非數字型
數字型:整型(int)、浮點型(float)、布爾型(bool)、複數型(complex)
其中複數型主要用於科學計算,例如:平面場問題、波動問題、電感電容等問題

非數字型:字符串、列表、元組、字典
提示:在Python2.x中,整數根據保存數值的長度分爲:整數(int)和長整數(long),Python3.x版本只有int

type(變量名字) 可以查看該變量的類型

數字型變量可以直接計算,布爾類型中true爲1,false對應的數字爲0
Python中,字符串之間可以使用 + 拼接成新的字符串
字符串變量 可以和整數使用 * 重複拼接成相同的字符串
提示:數字型變量和字符串之間不能進行其他計算

按標準是這樣分的:
Python3 中有六個標準的數據類型:Number(數字)、String(字符串)、List(列表)、Tuple(元組)、Set(集合)、Dictionary(字典)

⑤輸入輸出
print(x) 輸出x
type(x) 查看x類型
輸入:input函數從鍵盤等待用戶的輸入
字符串變量 = input(“提示信息:”)
字符串變量=int(input(“提示信息:”)) >>> 直接將輸入的字符串類型轉化成爲int型
字符串變量=float(input(“提示信息:”)) >>> 直接將輸入的字符串類型轉化成爲float型

類型轉換函數
int(x) 將x轉換爲一個整數
float(x) 將x轉換爲一個浮點數
str(x) 將x轉換爲一個字符串
注意:如果可以減少變量,儘量減少變量,因爲變量都會佔用空間

格式化操作符
如果需要文字和變量同時輸出,就需要用到格式化操作符
包含 % 的字符串被稱爲格式化字符串
格式化字符 含義
%s 字符串
%d 有符號十進制整數,%06d表示輸出的整數顯示位數,不足的地方使用0補全
%f 浮點數,%.02f表示小數點後只顯示兩位
%% 輸出%,百分號
語法格式:
print(“格式化字符串” % 變量1)
print(“格式化字符串” % (變量1,變量2…))
百分數輸出
print(“百分數爲 %.2f%%” % (x*100))

⑥標識符和關鍵字
關鍵字定義:Python內部已經使用的標識符,已經具有特定的功能和含義
關鍵字比如:import、input、print等等
代碼:
import keyword
print(keyword.kwlist)
可以看到關鍵字有哪些

標識符定義:標識符基本可以理解爲變量名和函數名
標識符由字母、下劃線和數字組成
標識符規則:1、標識符不能以數字開頭2、標識符不能與關鍵字重名

注意:Python中標識符區分大小寫的
命名規則:
1、爲了保證代碼格式,= 的左右應該各保留一個空格
2、如果變量名由兩個及多個單詞組成,可以按照以下方式命名(這也是Python開發者吉多推薦的):
a、每個單詞都使用小寫字母
b、單詞與單詞之間使用_下劃線連接
c、例如:first_name、last_name等等

其他編程語言還有一種命名方式:駝峯命名法
如果變量名由兩個及多個單詞組成,駝峯命名法:
小駝峯命名方式:第一個單詞以小寫字母開始,後序單詞的首字母大寫,例如:firstNmae,lastName
大駝峯命名方式:每個單詞的首字母都採用大寫字母,例如:FirstName、LastName

⑦分支結構
if判斷結構:
if 判斷條件:
條件成立時,執行的代碼

注意:代碼縮進爲一個 Tab 鍵,或者4個空格,不過Python強烈建議用4個空格,在Python中Tab和空格是不同的

關係(比較運算符)
運算符 描述
== 兩邊操作數是否相等,相等則條件成立返回true,否則返回else
!= 檢查兩邊的操作數的值是否不相等,不相等則條件成立返回true,否則返回else

檢查左操作數的值是否大於右操作數的值,左操作數大於右操作數則條件成立返回true,否則返回else
< 檢查左操作數的值是否小於右操作數的值,左操作數小於右操作數則條件成立返回true,否則返回else
= 檢查左操作數的值是否大於或等於右操作數的值,左操作數大於或等於右操作數則條件成立返回true,否則返回else
<= 檢查左操作數的值是否小於或等於右操作數的值,左操作數小於或等於右操作數則條件成立返回true,否則返回else
Python2.x中判斷不等於還可以使用<>運算符,Python3.x不支持<>表示不等於,數據庫mysql推薦使用<>而不是!=
注意:Python if語句以及縮進部分是一個完整的代碼塊,所以縮進在Python中尤爲重要
在PyCharm中,行數附近會有 開始標記 和 結束標記 方便看到if代碼塊的開始和結束
if、else判斷結構:
if 判斷條件:
條件成立時,執行的代碼

else:
條件不成立時,執行的代碼

注意縮進,四個空格,if和else各自縮進的部分共同是一個完整的代碼塊
而且當你鼠標放在放在if代碼塊中的時候,PyCharm可以看到當前代碼塊屬於的if或者else,點擊一下可以跳轉到目標if或else

多組if、else判斷結構:
if 條件1:
條件1成立時,執行的代碼

elif 條件2:
條件2成立時,執行的代碼

elif 條件3:
條件3成立時,執行的代碼

else:
以上條件都不成立時,執行的代碼

提示:elif是else if的縮寫

if判嵌結構:
if 判斷條件:
條件成立時,執行的代碼

if 判斷條件:
條件成立時,執行的代碼

else:
條件不成立時,執行的代碼

else:
條件不成立時,執行的代碼

PyCharm縮進提示:PyCharm可以使用Tab統一進行縮進,選中需要縮進的代碼,然後按下Tab鍵,就會統一縮進成相同的格式。按住Shift+Tab,可以統一減少縮進。

if如果後面無內容,可以輸入 pass
比如
if a>b:
pass
⑦邏輯運算符
邏輯運算符用來連接兩個表達式
運算符 邏輯表達式 描述
and x and y 布爾"與",如果 x 爲 False,x and y 返回 False,否則它返回 y 的計算值
or x or y 布爾"或",如果 x 是非 0,它返回 x 的值,否則它返回 y 的計算值
not not x 布爾"非",如果 x 爲 True,返回 False ;如果 x 爲 False,它返回 True
簡而言之:
and,需要x和y都爲真,結果才爲真,否則爲假
or,需要x或y其中一個爲真,結果就爲真,否則爲假
not,x爲真,結果爲假;x爲假,y爲真

⑧導入模塊簡介
例如,在Python想使用隨機數,首先需要導入隨機數的模塊———即工具包
import random
導入模塊後,可以直接在模塊名稱後 敲一個 . ,然後按 Tab鍵 ,會提示該模塊中包含的所有函數
random.randint(a,b) , 返回a - b中直接之間的整數,包含a和b,注意:a必須小於b
提示:將import導入包的語句寫最前面,方便後面使用,也更符合格式規範要求

⑨循環
程序三大流程:順序、分支、循環
while 判斷條件:
循環執行語句

在編程中,一個靠自身控制無法終止的程序稱爲“死循環”
注意循環條件,避免死循環,死循環即

常見的技術方法有兩種:
自然計數法:從1開始,更符合人類習慣
程序計數法:從0開始,更符合計算機這邊的情況
因爲希望在編寫程序,除非特別的需求,否則循環的計數都從0開始

break和continue
break,當執行到break時,退出整個循環
continue,當執行到continue時,不執行後面的代碼,進行下一次循環

print函數高級:
默認情況下,print函數輸出後會在內容末尾增加換行,如果不希望增加換行,可以在print函數輸出的內容後面增加, end=""
print() 爲換行
print("\n") 爲換兩行
練習1:
打印如下內容:
*
**




代碼:
row=1
while row<=5:
print("*" * row)
row+=1

轉義字符:
所有的ASCII碼都可以用“\”加數字(一般是8進制數字)來表示。而C中定義了一些字母前加""來表示常見的那些不能顯示的ASCII字符,如\0,\t,\n等,就稱爲轉義字符。
\n,換行(LF) ,將當前位置移到下一行開頭
\t,是水平製表(HT) ,跳到下一個TAB位置
',代表一個單引號(撇號)字符
",代表一個雙引號字符

⑩賦值運算符
運算符 描述 實例
= 簡單的賦值運算符 c = a + b 將 a + b 的運算結果賦值爲 c
+= 加法賦值運算符 c += a 等效於 c = c + a
-= 減法賦值運算符 c -= a 等效於 c = c - a
*= 乘法賦值運算符 c *= a 等效於 c = c * a
/= 除法賦值運算符 c /= a 等效於 c = c / a
%= 取模賦值運算符 c %= a 等效於 c = c % a
**= 冪賦值運算符 c **= a 等效於 c = c ** a
//= 取整除賦值運算符 c //= a 等效於 c = c // a

⑪函數
函數就是將具有獨立功能的代碼封裝成爲一個小模塊,方便下次使用時不必重新再把代碼寫一遍,提高了代碼的複用性
格式:
def 函數名():
函數代碼

其中def是英文define的縮寫, 定義 的意思
函數名稱 應該能夠表達 函數封裝代碼 的功能,方便後序的調用,即名字取得有意義並且易懂
函數名稱的命名應該符合 標識符的命名規則:
名稱可由字母、數字和下劃線組成
不能以數字開頭並且不能和關鍵字重名

注意:
1、定義好的函數在調用時纔會執行的
2、函數調用不能寫在函數調用的上方,否則回報錯 NameError:name ‘函數名’ is not defined

提示一下:
PyCharm Debug中 F8 Step Over,單步執行,會把函數調用看做一步執行
PyCharm Debug中 F7 Step Into,單步執行,會進入函數內部,執行函數內部一行一行代碼

函數的文本註釋
在開發中,給函數增加註釋,可以增進函數的可閱讀性
一般給函數增加註釋,會定義在函數名字的下一行,使用 連續的三對引號 ,引號中間爲對函數的文字說明
待會在調用函數時,按 Ctrl + q ,會顯示函數的註釋說明
添加註釋的時候也可以 選擇 Insert documentation string stub ,
一定要養成給函數添加文檔註釋的習慣

函數參數
def 函數名(參數一,參數二,…):
函數代碼

待會調用函數的時候將參數傳進去即可

形參和實參
形參:定義函數時,小括號中的參數,是用來接收參數用的,在函數內部作爲變量使用
實參:調用函數時,小括號中的參數,是用來把數據傳遞到函數內部的

函數返回值
有時候在調用函數時,希望返回給調用者一個返回值,這時候就需要返回值,函數裏用return關鍵字來返回,調用者調用該函數,就會產生這個return後的值
注意:return表示返回,後續的語句都不會執行,相當於無效
提示:函數也支持嵌套調用

⑫模塊
模塊暫時可以理解成工具包,需要使用就需要使用import導入該模塊;每一個以py爲後綴名的Python源代碼文件都是一個模塊;在模塊中可以定義全局變量、函數 都是模塊能夠提供給外界直接使用的工具
導入後可以通過 模塊.函數 或者 模塊.變量 來調用
提示:模塊名,及py的文件名,也是標識符,也最好遵守PEP8的規則
以上有點類似調用JAVA類中的成員變量和方法
⑬pyc
pyc 是一種二進制文件,是由py文件經過編譯後生成的文件,py文件變成pyc文件後,加載的速度有所提高,而且pyc是一種跨 平臺的字節碼,是由python的虛擬機來執行的,這個是類似於JAVA虛擬機JVM的概念。
c是compiled 編譯的 意思
pycache 目錄可以看到是 Python解釋器 將模塊的源碼轉換成字節碼文件

⑭高級變量
前面有講過:
實際數據類型分爲數字型和非數字型
數字型:整型(int)、浮點型(float)、布爾型(bool)、複數型(complex)
其中複數型主要用於科學計算,例如:平面場問題、波動問題、電感電容等問題
非數字型:字符串、列表、元組、字典
提示:在Python2.x中,整數根據保存數值的長度分爲:整數(int)和長整數(long),Python3.x版本只有int

在Python中,所有非數字型變量都支持以下特點:
1、都是一個序列sequence,

(1)列表
List列表是Python使用最頻繁的數據類型,相當於Java中的數組
專門用於存儲一組信息;用[ ]定義,數據之間用 , 分割;列表的索引從0開始
比如如下代碼:
nums=[9,8,7,6,5,4,3,2,1,0]
print(nums[0])
結果爲 9
注意:nums[10]會報錯>>>IndexError: list index out of range,因爲超過了索引範圍;其他類似操作都會發生超出索引範圍錯誤

創建空列表
列表名=[]

列表常用方法:
列表.index(數據) >>> 查看該數據在該列表的索引 (如果數據不在列表中,將會報錯 ValueError: 數據 is not in list)
增加:
列表.insert(索引,數據) >>> 在指定位置插入數據
列表.append(數據) >>> 在末尾追加數據
列表.extend(列表2) >>> 將列表2的數據追加到列表
修改:
列表[索引]=數據 >>> 修改指定索引的數據
刪除:
del 列表[索引] >>> 刪除指定索引數據 (del關鍵字是將變量從內存中刪除,最好使用列表提供的方法)
列表.remove[數據] >>> 刪除第一個出現的指定數據 (如數據不在列表中報錯:ValueError: list.remove(x): x not in list)
列表.pop >>> 刪除末尾數據
列表.pop(索引) >>> 刪除指定索引數據
列表.clear >>> 清空列表
統計:
len(列表) >>> 列表長度
列表.count(數據) >>> 數據在列表中出現的次數
排序:
列表.sort() >>> 升序排列
列表.sort(reverse=True) >>> 降序排列
列表.reverse() >>> 逆序、反轉

循環遍歷:
遍歷是指沿着某條搜索路線,依次對樹中每個結點均做一次且僅做一次訪問;即從頭到尾一次從列表中訪問數據
迭代是重複反饋過程的活動,其目的通常是爲了逼近所需目標或結果。每一次對過程的重複稱爲一次“迭代”,而每一次迭代得到的結果會作爲下一次迭代的初始值

for 實現迭代遍歷:
for 循環內部使用的變量 in 列表:
循環內部針對列表元素進行操作

這個 “循環內部使用的變量” ,當每一次循環過程中,數據都會保存在該變量中

應用場景:
儘管Python的列表中可以存儲不同類型的數據
但是在開發中,更多的是:
1、存儲相同類型的數據
2、通過迭代遍歷,在循環體內部,針對列表中的每一項元素,執行相同的操作

(2)元組
元組(Tuple)與列表類似,不同之處在於元組中的元素不能修改,且元組用()定義
注意:當元組只有一個元素時,該元組類型( type(元組) )就是該元素類型
所以只包含一個元素時,需要在元素後面添加 , 逗號

方法:
元組[索引] >>> 取索引值
元組.count(數據) >>> 查看元組某個元素出現的次數
元組.index(數據) >>> 查看元組該數據的索引

循環遍歷:
for 循環內部使用的變量 in 元組:
循環內部針對列表元素進行操作

應用場景:
1、元組中的元素數據類型一般不同,除非能夠確定元組中的數據類型,否則一般不對元素進行循環遍歷
2、函數的參數和發回執,一個函數可以接收任意多個參數或者一次返回多個數據
3、格式字符串,格式化字符串後面的()本質上就是一個元組
例如: print(“Hello World”),括號內的就是元組
4、保護列表數據不被修改,以保護數據安全,例如將列表的數據轉換成元組數據

元組和列表之間的轉換:
1、用 list 函數可以將元組轉換成列表
new_list=list(元組)
2、用 tuple 函數可以將元組轉換成列表
new_tuple=tuple(列表)

⑮字典
字典Dictionary 是除列表以外Python之中最靈活的數據類型
字典與列表的區別:
列表是有序的對象集合;字典是無序的對象集合
字典用{}定義
字典使用 鍵值對 存儲數據,鍵值對之間用 , 分隔;鍵 key 是索引,值 value 是數據;鍵和值之間使用:分割;鍵必須是唯一的;值可以取任何數據類型,但 鍵 只能使用字符串、數字或元組
字典通常用於:描述一個 對象 的相關信息
有時候輸出的時候順序可能和定義不一致,因爲字典順序本身就是無序的
儘量每一個鍵值對佔一行,格式顯得一目瞭然
字典常用方法:
增加與修改:
字典名[“鍵名”]=數據 >>> 增加數據或者修改數據(如果鍵名已存在,將會對原來的值進行修改)
字典名.setdefault(鍵,值) >>> 新增數據 (如果key存在,將不會修改數據;如果key不存在,則新增鍵值對)
取值:
字典名[“鍵名”] >>> 鍵名的值 (如果鍵名不存在,將會報錯)
字典名.get(“鍵名”) >>> 鍵名的值 (如果鍵名不存在,不會報錯,會顯示None)
刪除:
字典名.pop(“鍵名”) >>> 刪除指定鍵值對 (如果鍵名不存在,將會報錯)
del 字典[“鍵名”] >>> 刪除指定鍵值對 (如果鍵名不存在,將會報錯)
統計鍵值對的數量:
len(字典名)
合併字典:
字典名.update(新字典名)(如果舊字典中已經有新字典中的鍵值對存在,新鍵值對將會覆蓋舊字典數據)
清空字典:
字典名.clear()

循環遍歷字典
for 循環內部使用的’key的變量’ in 字典
print("%s:%s" % (key的變量,字典名[key變量]))

提示:在實際開發中,由於字典中每一個鍵值對保存數據的類型都不同,所以針對字典的循環遍歷需求並不是很多
更多使用是:將多個字典一個列表中,再進行遍歷,進行相同的處理
⑯字符串
字符串就是一串字符,是編程語言中表示文本的數據類型
Python可以使用 單引號’’ 或者 雙引號"" 定義字符串
例如:輸出 你叫什麼"名字"
print(‘你叫什麼"名字"’)
需要這樣,但是也可以 ’ 或者 "
同樣字符串也可以通過索引獲取,索引也是從0開始:
str=“Pyhton”
for x in str:
print(x)
str[2]結果爲 h

字符串常用方法:
先熟悉一下下列轉義字符
\n 換行 >>> 將當前位置移到下一行開頭
\r 回車 >>> 將當前位置移到本行開頭
\t 水平製表 >>> (跳到下一個TAB位置)
\ >>> 代表一個反斜線字符’’’
’ >>> 代表一個單引號(撇號)字符
" >>> 代表一個雙引號字符
? >>> 代表一個問號

字符串長度:len(字符串)
統計一個子字符串在該字符串出現的次數:字符串.count(“子字符串”)(如果字符串不存在,將會返回0)
查找子字符串第一次出現的位置:字符串.index(“子字符串”)(如果字符串不存在,將會報錯)
1、判斷類型:
string.isspace() >>> 如果string只包含空白字符,則返回 True(空白字符包括空格、回車、換行、水平製表符等)
string.isalnum() >>> 如果string至少有一個字符並且所有字符都是字母或數字則返回 True(小數不算;能判斷大小寫中文數字)
string.isalpha() >>> 如果string至少有一個字符並且所有字符都是字母則返回 True(小數不算;能判斷大小寫中文數字)
string.isdecimal() >>> 如果string只包含數字則返回True,全角數字 ( 小數不算)
string.isdigit() >>> 如果string只包含數字則返回True,全角數字、①、\u00b2 (小數不算)
string.isnumeric() >>> 如果string只包含數字則返回True,全角數字、漢字數字 (小數不算;能判斷大小寫中文數字)
string.istitle() >>> 如果string是標題化的(每個單詞的首字母大寫)則返回 True (以空格區分單詞 )
string.islower() >>> 如果string中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫)字符都是小寫,則返回 True
string.isupper() >>> 如果string中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫)字符都是大寫,則返回 True

2、查找和替換:
string.startswith(str) >>> 檢查字符串是否以str開頭,是則返回 True
string.endswith(str) >>> 檢查字符串是否以str結尾,是則返回 True
string.find(str,start=0,end=len(string)) >>> 檢查str是否包含在string中,如果start和end指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回-1(是返回要查找的字符串在該字符串首次出現的索引值 )
string.rfind(str,start=0,end=len(string)) >>> 類似於 find()函數,不過不同的是從右邊開始查找(返回要查找的字符串在該字符串首次出現的索引值,索引值也是從左邊按0開始)
string.index(str,strar=0,end=len(string)) >>> 類似 find()函數,只不過如果str不在string會報錯
string.rindex(str,strar=0,end=len(string)) >>> 類似 index()函數,不同的是從右邊開始查找
string.replace(old_str,new_str,num=string.count(old)) >>> 把string中的old_str替換成new_str,如果num指定,則替換不超過num次(原字符串沒有被替換,而是函數返回一個新的字符串 )

3、大小寫轉換:
string.capitalize() >>> 把字符串的第一個字符大寫
string.title() >>> 把字符串每個單詞的首字母大寫
string.lower() >>> 轉換string中所有大寫字符爲小寫
string.upper() >>> 轉換string中的小寫字母爲大寫
string.swapcase() >>> 翻轉string的大小寫

4、文本對齊:
string.ljust(width,fillchar) >>> 返回一個原字符串左對齊,並使用fillchar填充至長度width的新字符串,fillchar默認爲空格
string.rjust(width,fillchar) >>> 返回一個原字符串右對齊,並使用fillchar填充至長度width的新字符串,fillchar默認爲空格
string.center(width,fillchar) >>> 返回一個原字符串居中,並使用fillchar填充至長度width的新字符串,fillchar默認爲空格

5、去除空白字符:
string.lstrip() >>> 截掉string左邊(開始)的空白字符
string.rstrip() >>> 截掉string右邊(末尾)的空白字符
string.strip() >>> 截掉string左右兩邊的空白字符

6、拆分和連接:
string.partition(str) >>> 把字符串string分成一個3元素的元組(str前面,str,str後面)
string.rpartition(str) >>> 類似於partition()函數,不過是從右邊開始查找
string.split(str="",num) >>> 以str爲分隔符切片string,如果num有指定值,則僅分隔num+1個子字符串,str默認包含 ‘\r’ , ‘\t’ ,’\n’ 和空格
string.splitlines() >>> 按照行( ‘\r’ 、’\n’ 、 ‘\r\n’ )分隔,返回一個包含各行作爲元素的列表
string.join(seq) >>> 以string作爲分隔符,將seq中所有的元素(的字符串表示)合併爲一個新的字符串

字符串切片
切片用於 字符串、列表、元組
切片使用 索引值 來限定範圍,從一個大的字符串中切出小的字符串
列表和元組都是有序的集合,都能夠通過索引值獲取對應的數據
字典是一個無序的集合,是使用 鍵值對 保存數據的
字符串[開始索引:結束索引:步長]
注意幾點:
1、指定的區間屬於左閉右開,即包含開始索引不包含結束索引
2、從頭開始,開始索引 數字可以省略,冒號不能省略
3、到末尾結束,結束索引可以省略,冒號不能省略
4、步長默認爲1,如果連續切片,數字和冒號都可以省略(原字符串沒有被替換,而是函數返回一個新的字符串;步長不能爲0;如果將字符串反轉,步長可以取-1,字符串[::-1],即可將字符串反轉 )
↑↑↑↑↑↑↑↑↑↑↑↑↑
字符串、列表、元組都支持切片,語法同上
↓↓↓↓↓↓↓↓↓↓↓↓↓
⑰公共方法
Python內置函數
len(item) >>> 計算容器中的元素個數
del(item) >>> 刪除變量(del有兩種: 1、del 列表[x] 2、del(列表[x]) 效果相同)
max(item) >>> 返回容器中元素的最大值(如果是字典,只針對key比較)
min(item) >>> 返回容器中元素的最小值(如果是字典,只針對key比較)
cmp(item1,item2) >>> 比較兩個值 (字典不可以比較;python3.x已經取消com函數)
字符串比較符合以下規則: “0”<“A”<“a”,其實比較的是ASCII 碼值

高級數據類型公共使用的運算符

  • [1,2,3]+[2,3,4] 結果爲 [1,2,3,2,3,4] 作用爲合併,支持字符串、列表、元組(注意append和+的區別,例如 [1,2,3]+[2,3,4]和 [1,2,3].append[2,3,4])

  • [“HH”]*4 結果爲 [‘HH’, ‘HH’, ‘HH’, ‘HH’] 作用爲重複,支持字符串、列表、元組
    in >>> 1 in(1,2,3) 結果爲True 作用是判斷元素是否存在,支持字符串、列表、元組、字典
    (in在對 字典 進行操作時,判斷的是字典的鍵)
    not in >>> 4 not in(1,2,3) 結果爲True 作用是判斷元素是否不存在,支持字符串、列表、元組、字典

、>=、==、<、<= >>> (1,2,3)<(2,2,3) 結果爲True,元素比較,支持字符串、列表、元組
in 和 not in 被稱爲 成員運算符
使用 in 針對列表判斷,避免使用 or 。拼接複雜的邏輯條件,有時候不把用戶的輸入轉化爲int,這樣可以避免如果用戶轉換的不是數字,導致程序報錯

完整的for循環語法
for 變量 in 集合:
循環體代碼
else:
沒有通過break退出循環,循環結束後,會執行的代碼
應用:
在 迭代遍歷 嵌套的數據類型,當 循環遍歷 時,找到該值則break,如果沒找到,則else可以起作用。

⑱補充
1、TODO註釋
TODO註釋 #後面跟上空格,再跟上TODO,再跟上空格;用來標記需要去做的工作
格式: # TODO(作者/郵箱) 顯示系統菜單

2、PyCharm重命名變量名:
右鍵該變量,然後點擊Refactor

3、開發記得每個函數下面添加註釋:
在PyCharm中,可以把鼠標放在需要添加註釋的函數中,然後出現黃色小燈泡,然後點擊Insert documentation string stub

4、Linux 上的 Shebang 符號(#!)
#!叫做”Shebang”或者”Sha-bang”
shebang通常在Unix系統腳本中的 第一行開頭 使用,用來指明 執行這個腳本文件 的解釋程序
如果腳本文件中沒有#!這一行,那麼它執行時會默認用當前Shell去解釋這個腳本(即:$SHELL環境變量)
#! /usr/bin/xxx 寫第一行,將會用該xxx去執行此腳本

5、變量進階
id() 函數 可以查看變量中保存數據所在的內存地址
變量和數據都保存在內存中
在Python中,函數的參數傳遞以及返回值都是靠引用傳遞的
變量和數據分開存儲,數據保存在內存,變量中保存着數據在內存地址,變量記錄數據的地址,即引用
如果變量已經被定義,當給一個變量賦值時,本質是修改了數據的引用
例如
x=100
打印 id(x) 和 id(100) 地址將會一樣

6、可變和不可變類型
不可變類型,內存中的數據不允許被修改:
數字類型:int、bool、float、complex、long(2.x版本支持)
字符串str
元組tuple
可變數據類型,內存中的數據可以被修改:
列表 list
字典 dict(字典的key只能使用不可變類型的數據)
可變類型的數據變化,是通過 方法 實現的

7、哈希(hash)
Pyhton中內置有一個名字爲 hash(o) 的函數,可以接收一個不可變類型的數據作爲參數,返回結果是一個整數
哈希是一種算法,作用爲提取數據的特徵碼,唯一性
設置字典的鍵值對時,會首先對key進行hash已決定如何在內存中保存字典的數據,以方便後續對字典的操作:增、刪、改、查
即:
鍵值對的 鍵key 必須是不可變類型數據,鍵值對的 值value 可以是任意類型的數據

8、全局變量和局部變量
局部變量是在 函數內部 定義的變量,只能在函數內部使用
全局變量是在 函數外部定義的變量,所有函數都可以使用這個變量
提示:一般不推薦使用全局變量,因爲可變範圍太大,而且生命週期太長,導致程序不好維護

局部變量的生命週期: 就是指變量從創建到被系統回收的過程;局部變量在函數執行時纔會被創建;函數執行結束後,局部變量被系統回收;局部變量在生命週期內,可以用來存儲函數內部臨時使用到的數據;不同函數,可以定義相同的名字的局部變量,彼此不會有影響

全局變量和局部變量的執行順序:函數執行時,需要處理變量時會,首先查找 函數內部 是否存在指定名稱的局部變量,如果有,直接使用;如果沒有,則查找函數外部是否存在指定名稱的全局變量,有則使用全局變量;如果還沒有,則報錯

全局變量注意事項:
1、全局變量是在函數外部定義的變量,所有函數內部都可以使用這個變量
2、函數內部,可以通過全局變量的引用獲取值,但是不可以直接修改全局變量的引用(使用賦值語句修改全局變量的值)
3、如果需要在函數內部修改全局變量的值,需要使用 global 關鍵字
4、爲了保證所有函數都能夠正確使用全局變量,應該將 全局變量定義在函數的上方
最好代碼結構依次如下:
shebang
import 模塊
全局變量
函數定義
執行代碼
5、全局變量命名,爲了避免和局部變量混淆,所以在定義全局變量,一遍增加g_或者gl_或者global_的前綴

9、函數返回值
函數返回值就是當該函數執行完後,return後可以跟返回結果,該值返回給調用函數的一方,調用函數的一方,同時也可以使用變量接收函數的返回結果

函數返回多個結果解決辦法:
def 函數名:

return (元組)
可以用這種方式,但是這種在PyCharm中會在下面畫波浪線,解決辦法如下:
def 函數名:

return 值一、值二
Python會將這些值放入元組中,return返回的是一個tuple
接收的時候可以: 變量一、變量二 = 函數名
這樣,該函數會將返回的元組的值一賦值給變量一,值二賦值給變量二 (注意事項:元組的長度需要和變量個數相等)

交換a,b兩者值的方法:
(1)引入第三者變量:
c=a
a=b
b=c
(2)不引入第三者變量:
a=a+b
b=a-b
a=a-b
(3)利用位運算符並且也不引入第三者變量:
a=a^b
b=a^b
a=a^b
(4)Python獨有並且不引入第三者變量
a,b=(b,a)
改進: a,b=b,a(注意事項:b,a也是元組)

10、函數參數
不可變和可變參數
無論是可變類型的參數還是不可變類型的參數,在函數內部,針對傳入的形式參數使用 賦值語句 ,不會修改到外部的實參變量的值,可以看全局變量和局部變量存在的地址不同,然後去分析

如果是可變類型的參數,在函數內部 使用了 append() 等等方法修改了列表或字典 ,將會影響到全局變量的值
注意:在Python中,列表變量使用 += 本質上是在執行列表變量的 extend() 方法,不會修改變量的引用

11、缺省參數
定義函數時,可以給某個參數指定一個默認值,具有默認值的參數就叫 缺省參數,缺省即默認
函數的缺省參數,將常見的值設置爲參數的缺省值,從而簡化函數的調用

指定函數的缺省值
列表.sort() >>> 從小到大排列
列表.sort(reverse=True) >>> 從大到小排序
在定義函數時,參數先默認賦一個值,該值就是缺省值;如果後期有傳新值,將會覆蓋該值
缺省參數需要使用 最常見的值 作爲默認值,如果一個參數的值不能確定,則不應該設置默認值,具體的數值由調用函數時傳遞
注意:
1、缺省參數的定義位置:必須保證 帶有默認值的缺省參數在參數列表的末尾(並且最好帶上參數名字,比如 列表.sort(Reserve=True) 而不是 列表.sort(True) )
2、調用帶有多個缺省參數的函數時,如果有多個缺省參數,需要制定參數名,這樣解釋器才能知道參數與傳入值的對應關係
3、多值參數:有時候需要一個函數能夠處理的參數個數是不確定的,這個時候,就可以使用多值參數,Python中有兩種多值參數:
一、參數名前增加一個 * 可以接收元組,一般命名爲:*args,存放元組參數
二、參數名前增加兩個 * 可以接收字典,一般命名爲:**kwargs,存放字典參數
args是arguments的縮寫,參數的意思。Java也是這樣的命名。
kw是keyword的縮寫,kwargs可以記憶 鍵值對參數
一般 多值參數 的應用會出現在網絡上一些民間開發者開發的框架中,瞭解一下有利於讀懂他們寫的代碼

12、元組和字典的拆包
在調用帶有多值參數的函數時,如果希望將一個元組變量直接傳遞給args或者將一個字典變量直接傳遞給kwargs,就可以使用拆包,簡化參數的傳遞,拆包的方式是
一、在元組變量前,增加一個 *
二、在字典變量前,增加兩個 **

13、函數的遞歸
函數調用自身的編程技巧稱爲遞歸
特點:函數在內部中調用自己
代碼特點:遞歸過程中,代碼相同,但是傳入參數值不同;當參數滿足某一個條件時,函數就不再執行,如果不設計條件將會出現死循環

比如求 1到num的和,用遞歸的算法:
def sum(num):
‘’‘累加遞歸’’’
if num==1:
return 1
return num+sum(num-1)
print(sum(100))
用遞歸的方法遍歷整個文件目錄結構,會非常簡單

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章