您好,登錄后才能下訂單哦!
這篇文章主要介紹“有哪些Python基礎知識”,在日常操作中,相信很多人在有哪些Python基礎知識問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”有哪些Python基礎知識”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
編程中,需要重復寫的功能,可以包裝成一個函數
定義函數之前,實現給一個字符串增加前綴和后綴的操作:
f1 = "f1" f2 = "f2" f1 += ".txt" f1 = "my_" + f1 f2 += ".txt" f2 = "my_" + f2 print(f1, f2) my_f1.txt my_f2.txt
定義函數之后:
def modify_name(filename): filename += ".txt" filename = "my_" + filename print(filename) modify_name("f1") modify_name("f2") my_f1.txt my_f2.txt
上述函數里面用到了參數,調用的時候需要進進行傳參數,但有時也可以沒有參數,eg:
def modify_name(): filename = "f1" filename += ".txt" filename = "my_" + filename print(filename) modify_name() my_f1.txt
一個函數也可以擁有返回值,將函數處理后,可以將想要返回的結果返回
def modify_name(filename): filename += ".txt" filename = "my_" + filename return filename new_filename = modify_name("f1") print(new_filename) my_f1.txt
調用函數時,如果函數有參數,那么需要給函數傳參,函數本來的參數叫實參,傳入的參數叫實參,參數傳遞有以下幾種方式:
def f(x, a, b, c): return a*x**2 + b*x + c*1 print(f(2, 1, 1, 0)) # 忽略參數名,需要按順序一一對應 print(f(x=2, a=1, b=1, c=0)) # 寫上參數名,按名字傳參 print(f(a=1, c=0, x=2, b=1)) # 若用參數名,可以打亂順序傳參 6 6 6
另外,對于不是一直變化的參數,可以給參數設置一個默認值,如果設置了默認值,傳參時可以不給改參數傳值,否則每個參數都要傳參成功才能調用
def f(x, a=1, b=1, c=0): return a*x**2 + b*x + c*1 print(f(2, a=2)) print(f(2)) 10 6
Tip: 設置了默認值的參數和未設置默認值的參數要分開放,也就是說不可以將未設置默認值的參數跟在設置了默認值參數的后面
全局變量(global):函數里外都能用(公用)
局部變量(local):僅在函數內使用(私用)
def modify_name(): filename = "f1.txt" # 這里就是一個局部變量 print("local filename:", filename) modify_name() print("global filename:", filename) # 這里會報錯
filename = "f1.txt" # 這里便是一個全局變量 def modify_name(): print("local filename:", filename) modify_name() print("global filename:", filename)
全局變量和局部變量沖突時,局部變量優先!!!
filename = "f1.txt" def modify_name(): filename = "f2.txt" print("local filename:", filename) modify_name() print("global filename:", filename) local filename: f2.txt global filename: f1.txt
特殊情況:允許內部來修改外部的值,必須使用global聲明,相當于提出了一個申請
filename = "f1.txt" def modify_name(): global filename # 提出申請 filename = "f2.txt" print("local filename:", filename) modify_name() print("global filename:", filename) local filename: f2.txt global filename: f2.txt
目的:為了描述一個或一類具體的物體,eg:貓的特征,動作等
使用class File
來創建一個類,注意通常約定類的名字要首字母大寫。
然后使用my_file = File()
來創建一個實例,每個實例都繼承了一個類的基本屬性
class File: def __init__(self): self.name = "f1" self.create_time = "today" my_file = File() print(my_file.name) print(my_file.create_time) f1 today
其中 self 是作為類自己的一個索引,不管你在定義類的時候,想要獲取這個類的什么屬性或功能,都可以通過self來獲取。
__init__():創建一個實例的時候,類都會自動進行一次初始化,即運行一遍__init__()函數
修改屬性的值:(但這樣修改的值,僅對當前實例有效)
my_file.name = "new_name" print(my_file.name) new_name
__init__():也可以對該函數進行傳參:
class File: def __init__(self, name, create_time="today"): self.name = name self.create_time = create_time my_file = File("my_file") print(my_file.name) print(my_file.create_time) my_file today
還可以定義更多的功能,比如重命名等
class File: def __init__(self, name, create_time="today"): self.name = name self.create_time = create_time def change_name(self, new_name): self.name = new_name my_file = File("my_file") my_file.change_name("new_name") print(my_file.name) new_name
而且類的功能也可以有返回值
class File: def __init__(self, name, create_time="today"): self.name = name self.create_time = create_time def get_info(self): return self.name + " is created at " + self.create_time my_file = File("my_file") print(my_file.get_info()) my_file is created at today
倆個類分開寫,eg:
class Video: def __init__(self, name, window_size=(1080, 720)): self.name = name self.window_size = window_size self.create_time = "today" class Text: def __init__(self, name, language="zh-cn"): self.name = name self.language = language self.create_time = "today"
可以發現,這倆個類是有共性的,比如都有name,和create_time
所以,可以編寫一個底層類,使得這倆個類繼承底層類,從而減少了類之間的共有屬性/功能的重復開發!!!
一個類可以繼承另一個類,從而使得這個類成為子類,被繼承的類為父類
子類可以繼承父類的功能/功能,而且子類還可以重定義父類的功能
class File: def __init__(self, name, create_time="today"): self.name = name self.create_time = create_time def get_info(self): return self.name + " is created at " + self.create_time class Video(File): def __init__(self, name, window_size=(1080, 720)): # 將共有屬性的設置導入File父類 super().__init__(name=name, create_time="today") self.window_size = window_size class Text(File): def __init__(self, name, language="zh-cn"): super().__init__(name=name, create_time="today") self.language = language # 也可以在子類中復用父類功能 def get_more_info(self): return self.get_info() + ", using language of " + self.language v = Video("my_video") t = Text("my_text") print(v.get_info()) # 調用父類功能 print(t.create_time) # 調用父類的屬性 print(t.language) # 調用自己的屬性 print(t.get_more_info()) # 調用自己復用父類的功能 my_video is created at today today zh-cn my_text is created at today, using language of zh-cn
私有:_一個下劃線開頭,弱隱藏,不想讓別人用,但別人在必要情況下還是可以用的
私有:__倆個下劃線開頭,強隱藏,不讓別人使用
class File: def __init__(self): self.name = "f1" self.__deleted = False # 不讓別人使用這個變量 self._type = "txt" # 不想別人使用這個變量 def delete(self): self.__force_delete() def __force_delete(self): # 不讓別人使用這個功能 self.__deleted = True return True def _soft_delete(self): # 不想讓別人使用這個功能 self.__force_delete() # 雖然是強隱藏,但是可以在內部隨便調用 return True f = File() print(f._type) # 可以拿到值,但是會有?? print(f._soft_delete()) # 可以調用,但是會有?? print(f.__deleted) # 會直接報錯 print(f.__force_delete) # 會直接報錯
定義 | 含義 |
---|---|
def __init__() | 初始化實例 |
def __repr__() | 字符串的“官方”表現形式 |
def __str__() | 字符串的“非正式”值 |
def __iter__() | 遍歷某個序列 |
def __next__() | 從迭代器中獲取下一個值 |
… | … |
Moudel主要是為一個相對比較大的工程,涉及到多個文件之間的互相調用關系。
對于一個項目來說,它需要去實現很多功能,這時候,如果可以把某一個或者某一類功能分類寫到了一個文件之中,在合并的時候,我不便不需要知道文件中的代碼具體什么,我只需要調用你給的這個文件中的功能就可以!也
就是說,作為你所給文件中的功能的使用者,我不關心你實現功能的代碼,我只關系我可以使用函數調用到你這個功能就好
# file.py def create_name(): return "new_file.txt"
eg: 比如上述file.py文件,實現了create_name的功能,然而作為這個功能的使用者,我不需要去了解這個功能所使用的代碼,我只關心如何調用使用這個功能
比如新建了一個me.py,需要在這個文件之中引用file.py中的create_name()的功能
# me.py import file print(file.create_name()) new_file.txt
或者也可以這樣調用
# me.py import file as f1 print("f1:", f1.create_name()) class File: def create_name(self): return "new_file.txt" f2 = File() print("f2:", f2.create_name()) f1: new_file.txt f2: new_file.txt
可以發現,這和類功能調用有著非常大的相似之處!!!
還有更多的引用方式:
# me.py from file import create_name print(create_name()) new_file.txt
假設file.py中還有一個函數create_time()
# me.py from file import create_name, create_time print(create_name()) print(create_time()) new_file.txt today
如何file.py中函數太多,記不清,那么可以如此引用:
# me.py # 第一種 import file print("1", file.create_name()) #第二種 from file import * print("2", create_name()) print("2", create_time())
在正規的module中,我們常會看到一個__init__.py
文件,就像class里的def __init__(self),
可以在里面寫上如何初始化你的files目錄,也可以設定目錄中各元素的關系。
# files/__init__.py from .video import get_video_size
設置好__init__.py后,就可以直接從files里import get_video_size這個屬于video.py的功能了
# me.py from files import get_video_size print(get_video_size())
但和video.py同級的text.py就無法通過import方式獲取到text.py中的功能,因為未在files/__init__.py中聲明
# me.py from files import create_name
如果不在files/__init__.py中聲明,但還想調用,則可以使用:
# me.py import files.text print(files.text.create_name) # 或者 from files import text print(text.create_name)
到此,關于“有哪些Python基礎知識”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。