摘要:數字和字符串,不能改變對象本身,只能改變引用的指向,稱為不可變數據對象。從開始,依次增加的值,直至等于或者大于將會輸出。該函數輸入姓名和各科的成績,輸出姓名和總共成績。表明該參數是關鍵字參數,通常來講關鍵字參數是放在函數參數列表的最后。
基礎 局部變量與全局變量
函數中使用的變量是局部的
如果在外面的變量在函數中使用,需要加global關鍵字
APPLY = 100 # 全局變量 a = None def fun(): global a # 使用之前在全局里定義的 a a = 20 # 現在的 a 是全局變量了 return a+100 print(APPLE) # 100 print("a past:", a) # None fun() print("a now:", a) # 20深拷貝與淺拷貝
id()可以顯示內存地址
=列表可以通過引用其元素,改變對象自身(in-place change)。這種對象類型,稱為可變數據對象(mutable object),詞典也是這樣的數據類型。
數字和字符串,不能改變對象本身,只能改變引用的指向,稱為不可變數據對象(immutable object)。元組(tuple),盡管可以調用引用元素,但不可以賦值,因此不能改變對象自身,所以也算是immutable object。
淺拷貝當使用淺拷貝時,python只是拷貝了最外圍的對象本身,內部的元素都只是拷貝了一個引用而已。看代碼:
>>> import copy >>> a=[1,2,3] >>> c=copy.copy(a) #拷貝了a的外圍對象本身, >>> id(c) 4383658568 >>> print(id(a)==id(c)) #id 改變 為false False >>> c[1]=22222 #此時,我去改變c的第二個值時,a不會被改變。 >>> print(a,c) [1, 2, 3] [1, 22222, 3] #a值不變,c的第二個值變了,這就是copy和‘==’的不同深拷貝
deepcopy對外圍和內部元素都進行了拷貝對象本身,而不是對象的引用。
#copy.copy() >>> a=[1,2,[3,4]] #第三個值為列表[3,4],即內部元素 >>> d=copy.copy(a) #淺拷貝a中的[3,4]內部元素的引用,非內部元素對象的本身 >>> id(a)==id(d) False >>> id(a[2])==id(d[2]) True >>> a[2][0]=3333 #改變a中內部原屬列表中的第一個值 >>> d #這時d中的列表元素也會被改變 [1, 2, [3333, 4]] #copy.deepcopy() >>> e=copy.deepcopy(a) #e為深拷貝了a >>> a[2][0]=333 #改變a中內部元素列表第一個的值 >>> e [1, 2, [3333, 4]] #因為時深拷貝,這時e中內部元素[]列表的值不會因為a中的值改變而改變例子
創建二維數組
myList = [([0] * 3) for i in range(4)] #以上會出現淺拷貝, >>> lists = [[] for i in range(3)] >>> lists[0].append(3) >>> lists[1].append(5) >>> lists[2].append(7) #避免淺拷貝if
var = var1 if condition else var2
如果 condition 的值為 True, 那么將 var1 的值賦給 var;如果為 False 則將 var2 的值賦給 var。
if condition1: true1_expressions elif condition2: true2_expressions elif condtion3: true3_expressions elif ... ... else: else_expressions
如果有多個判斷條件,那可以通過 elif 語句添加多個判斷條件,一旦某個條件為 True,那么將執行對應的 expression。
for range使用在 Python 內置了工廠函數,range 函數將會返回一個序列,總共有三種使用方法
其中 start 將會是序列的起始值,stop為結束值,但是不包括該值,類似 數學中的表達 [start, stop),左邊為閉區間,右邊為開區間。
for i in range(1, 10): print(i)
上述表達將會返回 1-9 所有整數,但不包含 10
如果省略了 start 那么將從 0 開始,相當于 range(0, stop)
step 代表的為步長,即相隔的兩個值得差值。從 start 開始,依次增加 step 的值,直至等于或者大于 stop
for i in range(0,13, 5): print(i)
將會輸出 0, 5, 10。
內置集合Python 共內置了 list、 tuple 、dict 和 set 四種基本集合,每個集合對象都能夠迭代。
迭代器和生成器 while在 Python 中集合類型有 list、 tuple 、dict 和 set 等,如果該集合對象作為 while 判斷語句, 如果集合中的元素數量為 0,那么將會返回 False, 否則返回 True。
a = range(10) while a: print(a[-1]) a = a[:len(a)-1]
上述程序將會返回 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 程序首先判斷列表是否空,如果不為空,則 打印出最后一個內容,然后使用切片操作去掉最后一個元素,并更新列表;如此重復,直至列表為空。
讀取操作和文件操作 inputvariable=input() 表示運行后,可以在屏幕中輸入一個數字,該數字會賦值給自變量。
printpython 中 print 字符串 要加""或者""
換行命令
達到 tab 對齊
open使用 open 能夠打開一個文件, open 的第一個參數為文件名和路徑 ‘my file.txt’, 第二個參數為將要以什么方式打開它, 比如 w 為可寫方式. 如果計算機沒有找到 ‘my file.txt’ 這個文件, w 方式能夠創建一個新的文件, 并命名為 my file.txt
my_file=open("my file.txt","w") #用法: open("文件名","形式"), 其中形式有"w":write;"r":read. my_file.write(text) #該語句會寫入先前定義好的 text my_file.close() #關閉文件append
open("my file.txt","a") 打開類型為 a ,a 即表示 append。
file.read()使用 file.read() 能夠讀取到文本的所有內容.
file= open("my file.txt","r") content=file.read() print(content) """" This is my first test. This is the second line. This the third line. This is appended file. """"file.readline()
如果想在文本中一行行的讀取文本, 可以使用 file.readline(), file.readline() 讀取的內容和你使用的次數有關, 使用第二次的時候, 讀取到的是文本的第二行, 并可以以此類推:
file= open("my file.txt","r") content=file.readline() # 讀取第一行 print(content) """" This is my first test. """" second_read_time=file.readline() # 讀取第二行 print(second_read_time) """ This is the second line. """file.readlines()
如果想要讀取所有行, 并可以使用像 for 一樣的迭代器迭代這些行結果, 我們可以使用file.readlines(), 將每一行的結果存儲在 list 中, 方便以后迭代。
file= open("my file.txt","r") content=file.readlines() # python_list 形式 print(content) """" ["This is my first test. ", "This is the second line. ", "This the third line. ", "This is appended file."] """" # 之后如果使用 for 來迭代輸出: for item in content: print(item) """ This is my first test. This is the second line. This the third line. This is appended file. """基礎數據結構 tuple
(tuple)
list[list]
詳細文檔
dict{dict}
詳細文檔
set 函數 默認參數函數聲明只需要在需要默認參數的地方用 = 號給定即可, 但是要注意所有的默認參數都不能出現在非默認參數的前面。
自調用如果想要在執行腳本的時候執行一些代碼,比如單元測試,可以在腳本最后加上單元測試 代碼,但是該腳本作為一個模塊對外提供功能的時候單元測試代碼也會執行,這些往往我們不想要的,我們可以把這些代碼放入腳本最后:
if __name__ == "__main__": #code_here
如果執行該腳本的時候,該 if 判斷語句將會是 True,那么內部的代碼將會執行。 如果外部調用該腳本,if 判斷語句則為 False,內部代碼將不會執行。
可變參數顧名思義,函數的可變參數是傳入的參數可以變化的,1個,2個到任意個。當然可以將這些 參數封裝成一個 list 或者 tuple 傳入,但不夠 pythonic。使用可變參數可以很好解決該問題,注意可變參數在函數定義不能出現在特定參數和默認參數前面,因為可變參數會吞噬掉這些參數。
def report(name, *grades): total_grade = 0 for grade in grades: total_grade += grade print(name, "total grade is ", total_grade)
定義了一個函數,傳入一個參數為 name, 后面的參數 *grades 使用了 * 修飾,表明該參數是一個可變參數,這是一個可迭代的對象。該函數輸入姓名和各科的成績,輸出姓名和總共成績。所以可以這樣調用函數 report("Mike", 8, 9),輸出的結果為 Mike total grade is 17, 也可以這樣調用 report("Mike", 8, 9, 10),輸出的結果為 Mike total grade is 27
關鍵字參數關鍵字參數可以傳入0個或者任意個含參數名的參數,這些參數名在函數定義中并沒有出現,這些參數在函數內部自動封裝成一個字典(dict).
def portrait(name, **kw): print("name is", name) for k,v in kw.items(): print(k, v)
定義了一個函數,傳入一個參數 name, 和關鍵字參數 kw,使用了 ** 修飾。表明該參數是關鍵字參數,通常來講關鍵字參數是放在函數參數列表的最后。如果調用參數portrait("Mike", age=24, country="China", education="bachelor") 輸出:
name is Mike age 24 country China education bachelor
通過可變參數和關鍵字參數,任何函數都可以用 universal_func(*args, **kw) 表達。
類 類變量在類中,方法外的變量,所有實例對象公用
實例變量在類方法中,一般在__init__中聲明定義,對象之間獨立
內置類屬性 保護與私有單下劃線是Protect
雙下劃線是Private
方法的默認值設置屬性的默認值, 直接在def里輸入即可,如下:
def __init__(self,name,price,height=10,width=14,weight=16):
自定義模塊 自建一個模塊這里和視頻有點差別,我自己寫了另外一個模塊,是計算五年復利本息的模塊,代碼如下:模塊寫好后保存在默認文件夾:balance.py
d=float(input("Please enter what is your initial balance: ")) p=float(input("Please input what is the interest rate (as a number): ")) d=float(d+d*(p/100)) year=1 while year<=5: d=float(d+d*p/100) print("Your new balance after year:",year,"is",d) year=year+1 print("your final year is",d)調用自己的模塊
新開一個腳本,import balance
import balance """" Please enter what is your initial balance: 50000 # 手動輸入我的本金 Please input what is the interest rate (as a number): 2.3 #手動輸入我的銀行利息 Your new balance after year: 1 is 52326.45 Your new balance after year: 2 is 53529.95834999999 Your new balance after year: 3 is 54761.14739204999 Your new balance after year: 4 is 56020.653782067144 Your new balance after year: 5 is 57309.12881905469 your final year is 57309.12881905469 """"模塊存儲路徑說明
在Mac系統中,下載的python模塊會被存儲到外部路徑site-packages,同樣,我們自己建的模塊也可以放到這個路徑,最后不會影響到自建模塊的調用。
錯誤處理 try輸出錯誤:try:, except ... as ...: 看如下代碼
try: file=open("eeee.txt","r") #會報錯的代碼 except Exception as e: # 將報錯存儲在 e 中 print(e) """ [Errno 2] No such file or directory: "eeee.txt" """
處理錯誤:會使用到循環語句。首先報錯:沒有這樣的文件No such file or directory. 然后決定是否輸入y, 輸入y以后,系統就會新建一個文件(要用寫入的類型),再次運行后,文件中就會寫入ssss
try: file=open("eeee.txt","r+") except Exception as e: print(e) response = input("do you want to create a new file:") if response=="y": file=open("eeee.txt","w") else: pass else: file.write("ssss") file.close() """ [Errno 2] No such file or directory: "eeee.txt" do you want to create a new file:y ssss #eeee.txt中會寫入"ssss"多進程和多線程 正則表達式 GUI Reference
筆記大綱參考莫煩PYTHON
淺拷貝和深拷貝參考python 引用和對象理解和Python-copy()與deepcopy()區別
list和dict參考菜鳥教程
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41393.html
摘要:貢獻者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時間,如果你一本書一本書看的話,的確要用很長時間。為了方便大家,我就把每本書的章節拆開,再按照知識點合并,手動整理了這個知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻者:飛龍版...
摘要:學習筆記七數學形態學關注的是圖像中的形狀,它提供了一些方法用于檢測形狀和改變形狀。學習筆記十一尺度不變特征變換,簡稱是圖像局部特征提取的現代方法基于區域圖像塊的分析。本文的目的是簡明扼要地說明的編碼機制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開始之前,我們先來看這樣一個提問: pyth...
摘要:請回復這個帖子并注明組織個人信息來申請加入。權限分配靈活,能者居之。數量超過個,在所有組織中排名前。網站日超過,排名的峰值為。導航歸檔社區自媒體平臺微博知乎專欄公眾號博客園簡書合作侵權,請聯系請抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...
摘要:基本結構語言中,一個頁面是由四個部分組成文檔聲明標簽對標簽對標簽對圖示文檔聲明這是一個文檔聲明,表示這是一個頁面。標簽標簽表示頁面內容的范圍。 HTML HTML ...
摘要:主頁暫時下線社區暫時下線知識庫自媒體平臺微博知乎簡書博客園合作侵權,請聯系請抄送一份到特色項目中文文檔和教程與機器學習實用指南人工智能機器學習數據科學比賽系列項目實戰教程文檔代碼視頻數據科學比賽收集平臺,,劍指,經典算法實現系列課本課本描述 【主頁】 apachecn.org 【Github】@ApacheCN 暫時下線: 社區 暫時下線: cwiki 知識庫 自媒體平臺 ...
閱讀 1768·2023-04-26 01:44
閱讀 1211·2021-11-12 10:34
閱讀 1579·2021-09-09 09:33
閱讀 1729·2019-08-30 15:44
閱讀 2893·2019-08-30 13:49
閱讀 2191·2019-08-29 15:26
閱讀 944·2019-08-26 13:30
閱讀 1409·2019-08-23 18:15