python中基例_Python python从入门到实践(5) --代码复用
函數、類與代碼復用
代碼復用的思想
把代碼當成資源進行抽象。
代碼資源化:程序代碼是一種用來表達計算的"資源"
代碼抽象化:使用函數等方法對代碼賦予更高級別的定義
代碼復用:同一份代碼在需要時可以被重復使用
函數和對象是代碼復用的主要形式,對象化的抽象程度更高
模塊化設計、分而治之:模塊內部緊耦合(交流多、不可獨立);模塊之間松耦合(交流少、可獨立)
函數
函數的定義
函數實例:
def do_something():
"""這是函數注釋"""
print("Hello World!")
do_something()
def進行函數定義,接下來是函數名,括號內是參數表,隨后是:下一行進行函數體,三對引號是文檔注釋。像c_like語言一樣調用函數
使用參數的函數:
def do_something(name):
"""這是注釋"""
print("Hello "+name.title()+"!")
do_something()
這里參數沒必要指出類型
傳遞實參:函數傳遞實參的方式很多,可使用位置實參,這要求實參順序與形參順序對應,也可使用關鍵字實參,其中每個實參都由變量名和值組成;此外,還可以使用列表和字典。
位置實參:調用函數時,python會將每一個實參都關聯到函數定義的一個形參,最簡單的關聯方式是基于實參的順序,這種關聯方式被稱為位置實參
#定義函數
def describe_pet(animal_type, pet_name):
"""顯示寵物信息"""
print("\nI have a "+animal_type+" and its name is " + pet_name.title()+".")
#調用函數, 實參按照一定順序賦值給形參
describe_pet('hamster', 'harry')
describe_pet('dog','pearl')
關鍵字實參:傳遞給函數的名稱-值對,直接在是慘重將名稱和值關聯,無所謂順序
#調用函數,按照關鍵字傳遞實參
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(animal_type='dog',pet_name='pearl')
默認值:在定義函數時,添加默認值,當沒有合適的實參傳入時,將會使用默認值版本(寫法同c++),要求也與c++相同,要求帶有默認值的形參放在最后
通過給某個形參賦值空初始值'',可以實現可選參數的功能
返回值:值得注意,python沒有必要定義函數時說明有無返回值和返回值類型。返回簡單值、字典都可以;返回一個值、多個值、零個值都可以。返回多個值的時候會以元組的方式返回。
~~~ python
def get_formatted_name(first_name,last_name):
full_name= first_name + ' ' + last_name
return full_name.title()
def get_formatted_name_dic(first_name,last_name):
person = {
'first': first_name,
'last': last_name
}
return person
musician = get_formatted_name('zhao','siqi')
print(musician)
~~~
傳遞列表
def greet_users(names):
"""to greet"""
for name in names:
msg = 'Hello, ' + name.title() + '!'
print(msg)
usernames['A', 'B', 'C']
grret_users(usernames)
在函數中修改列表:列表傳遞給函數后,函數就可以對其進行修改,在函數中對列表的修改是永久性的
禁止函數修改列表:將列表的副本傳遞給函數,比如function_name(list_name[:])
傳遞未定數量的實參:
有時不知道函數需要接受多少實參,于是使用可變形參*或**其中前者創建了一個內容可變的空元組,后者創建了內容可變的空字典
def make_pizza(*topping):
print(toppings)
make_pizza('Chicken')
make_pizza("mushroom", "Chicken", "beef")
這里的*topping創建了一個空元組,并將收到的所有值都封裝到元組中
同時使用位置形參和任意數量形參:位置形參應該位于任意數量形參之前
同時使用關鍵字形參和任意數量形參:一般使用關鍵字形參和任意數量形參時都使用了空字典
def build_profile(first, last, **user_info):
profile={
'first_name': first,
'last_name': last
}
for key, value in user_info:
profile[key] = value
return profile
user_profile = build_profile('albert','einstein', location = 'German', field = 'physics')
print(user_profile)
將函數儲存在模塊中
將函數存儲在被稱為模塊的獨立文件,再將模塊導入(import)到主程序(注:模塊也是.py文件)
導入整個模塊:
import
隨后的調用函數:
modele_name.function_name(...)
導入某個函數
from import,
使用as指定別名
from import as new_name
使用as給模塊指定別名
import as
導入模塊的所有函數
from module_name import*
調用函數時不必加模塊名.
局部變量和全局變量:
(這里局部變量會在離開作用域時自動釋放)
基本數據模型,無論是否重名,局部變量與全局變量不同:
即發生了作用域和可視性的覆蓋
可以通過global關鍵字聲明全局變量
經過實驗,global聲明的變量可以在局部作用域內使用、修改,且會修改原始的全局變量。并且在函數內使用global關鍵字可以創建原來并不存在的全局變量
def func():
global num
num = 9
return num
t = func()
m = num
print(str(t))
print(str(m))
print(str(num))
# 輸出
# 9
# 9
# 9
對于組合數據類型,如果局部變量未創建,那么就會使用全局變量
lambda函數:
lambda函數是一種匿名函數,使用Lambda保留字定義,不指定函數名,函數名即為賦值的變量(類似于創建了一個函數指針,將指針賦給了某變量,隨后該變量可當作函數名正常使用),一般僅僅定義簡單的,能夠用一行表示的代碼,常常用于大型函數的函數對象使用
# 基本形式
= Lambda :
# 例子
add = Lambda x, y : x+y
函數編寫時的注意細節:
命名只使用小寫字母和下劃線
包含帶有對功能簡易說明的注釋
給形參指定默認值時等號兩側不要加空格
所有import都要放在(除了)注釋外的最前面
定義函數的代碼塊后加兩行空行與其他部分分開
函數遞歸
關鍵特征:
鏈條:計算過程中存在遞歸鏈條
基例:存在一個或多個不需要再次遞歸的基例
核心編寫方法在于分支語句對參數進行判斷,分別處理基例和鏈條
類和對象
根據約定,在python中,首字母大寫的名稱指的是類(即是命名規則,也是使用提示)
創建和使用類:
class Dog():
def __init__(self, name, age):
self.name = name
self.age = age
def sit(self):
print(self.name.title() + "is sitting")
類中的函數稱為方法,與普通函數的唯一區別在于調用的方式,通過對象.方法名(參數表)的方式調用
__init__()是一種特殊的函數(構造函數),創建實例時自動調用
形參self必不可少,且必須位于其他形參最前面,但是調用時不必傳遞實參,因為它自動指向實例本身的引用
使用類
# 已經定義好Dog類
#創建實例
my_dog = Dog("A", 3)
#訪問屬性
print("My dog's name is "+my_dog.name.title())
#調用方法
my_dog.sit()
給屬性指定默認值:在構造函數(__init__)指定這種初始值,此時不必在形參表中寫出
修改屬性的值:
通過訪問成員直接修改屬性的值
定義成員函數修改屬性的值
繼承
子類的構造函數
class Dog():
#略
class My_dog(Dog):
def __init__(self, name, age, weight):
super().__init__(name, age)
self.weight = weight
通過super()獲取父類的引用,隨后借助父類的構造函數完成構造
重寫父類的方法:在子類中定義一個與父類中同名的方法,此時會直接調用子類的同名方法
將實例用作屬性:使用代碼模擬實物時,類中的屬性和方法可能會越來越長,此時將類的一部分作為一個獨立的類提取出來,將大型類拆分成多個協同工作的小類
導入類:與導入函數的操作基本相同
Python標準庫:
Python標準庫是一組模塊,安裝的python都含有它
例題:使用collections的一個類——OrderedDict,這是一個有序字典,在保存鍵值對關系的同時保留順序
from collections import OrderedDict
favorite_languages = OrderedDict()
favorite_languages['Jen'] = 'python'
favorite_languages['Sarah'] = 'c'
favorite_languages['edward'] = 'ruby'
favorite_languages['phil'] = 'python'
for name.language in favotite_languages.items():
print(name.title() + "like " + language + ".")
類編碼風格
類名實施駝峰命名法,將每個單詞的首字母大寫,不適用下劃線,實例名和模塊名使用小寫,并在單詞之間加下劃線。
每個類在定義后使用文檔注釋描述類功能
在需要同時導入標準庫和編寫的自定義模板時,先import標準庫,空行,再import自定義庫
總結
以上是生活随笔為你收集整理的python中基例_Python python从入门到实践(5) --代码复用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql unique 锁_mysql
- 下一篇: python 装饰器有哪些_Python