Task 04 變數與函式 Variables and Functions
變數 variables
變數的概念老生常談,便於理解,簡單說明即可
基本概念
- 變數是一個名字,指代它所覆蓋的資料
- 變數需要賦值,使用
=
號 - 在python中,沒有指標的概念,但也可以說每一個變數都是一個指標
a = 8 #python在變數命名是不需要提前說明變數型別(python天下第一)
print(a)
8
print(a-2)
6
- 新的值可以覆蓋舊的值
- 新的資料型別不必與舊的相同
a = True
print(a)
True
a = "振翅雲頂之上,極目星辰大海"
print(a)
振翅雲頂之上,極目星辰大海
變數命名規則
- 必須以字母或下劃線(
_
)開頭 - 命名可由字母、數字和下劃線組成
- 大小寫敏感
- 儘量避免使用保留字命名
保留字
import keyword
print(keyword.kwlist)
['False',
'None',
'True',
'__peg_parser__',
'and',
'as',
'assert',
'async',
'await',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'nonlocal',
'not',
'or',
'pass',
'raise',
'return',
'try',
'while',
'with',
'yield']
多變數命名
python支援多變數命名,方式如下
a = b = c = 6
print(f"a={a}, b={b}, c={c}")
a=6, b=6, c=6
a, b, c = 3, 6, 9
print(f"a={a}, b={b}, c={c}")
a=3, b=6, c=9
函式 Functions
函式概念
- 函式是一個程式碼塊,可以被反覆呼叫,執行功能
- 函式由兩部分組成,即
header
和body
- 函式在專案中會大量使用,完成分段式程式設計,以防部分程式碼出錯牽連整個程式
header
header用來定義函式的名稱和引數
- header以
:
結尾,並在後面跟著body
部分 - 當函式被呼叫時,括號內的引數會被提供給函式進行後續執行
- 可以提供多個引數
header具體寫法
def name(x):
pass #pass表示臨時組建函式並且不被呼叫
#python對縮排十分敏感
body
- body中包含函式的主體部分,也就是引數被傳入後執行的具體操作
- body結束後一般會用return返回值,當然並不絕對
- 縮排很重要
在這裡寫一個完整的函式作為示例
def yunding(x):
print("振翅雲頂之上,極目星辰大海")
return x
print(yunding(me))
振翅雲頂之上,極目星辰大海
me
- 用函式名呼叫函式
- 函式會返回一個值,但並不是直接列印一個值
函式的引數可以有很多個, 也可以沒有,但是數量一定要匹配
多返回值
多返回值相當於返回了一個 list
def Multi_Return_Values():
return 6,6,6
a,b,c = Multi_Return_Values()
print(f"a={a}, b={b}, c={c}")
a=6, b=6, c=6
內建函式
在python中,有一些官方內建的函式
強制型別轉換
型別轉換也是一種函式,比如將浮點數轉換為整數
a = 5.2
print(a)
5.2
int(a)
print(a)
5 #轉換為整型後沒有小數點
基本數學函式(無需呼叫math庫)
print(abs(-5)) # 絕對值
5
print(max(2,3)) # 返回最大值
3
print(min(2,3)) # 返回最小值
2
print(pow(2,10)) # 次方運算,等價於 2**10
1024
print(round(2.354, 2)) # 取最近的一個整數(並不完全是四捨五入,二進位制精度丟失) ## 保留兩位小數,用round(四捨五入表示的是二進位制小數(或者用decimal庫來避免))
2.35
變數作用域
每個變數都有自己的作用範圍,超出範圍後變數不存在,並且一定要儘量避免使用全域性變數
- 函式內定義的變數僅在函式內部作用
- 函式外定義的變數是全域性變數,如果想在函式內改變它的值需要宣告它是全域性變數
g = 100
def f(x):
global g #對變數進行宣告,否則python會假設它是區域性變數
g += 1
return x + g
print(f(5))
print(f(6))
print(g)
106
108
102
巢狀函式(遞迴)
對於巢狀函式來說,一定會先執行最內層的函式
巢狀函式運用最廣的地方就是遞迴,而遞迴是一種重要的程式設計思想,在這裡我們著重講解
遞迴的概念
遞迴(recursion)是一種演算法策略,透過函式呼叫自身來解決問題。他主要包含兩個階段
- 遞:程式不斷地呼叫自身,通常是傳入更小或更簡化的引數,直到達到 "終止條件"
- 歸:觸發"終止條件"之後,函式從最深層的遞迴函式逐層返回,並匯聚每一層的結果
遞迴函式的三個要素
- 終止條件:在觸發
終止條件
後,由遞
轉歸
- 遞迴呼叫:參考概念中的
遞
- 返回結果:參考概念中的
歸
如果實在理解不了遞迴,似乎也可以用這三個條件硬寫
思考
事實上到此為止我對於遞迴的理解也極為有限,所以說一些我對於遞迴的思考
- 遞迴是一個從上到下解決問題的過程,將原問題一直分解為更小的子問題,在遇到終止條件後逐級返回,當然這樣的思想十分反人類,所以寫的時候千萬不能多想
- 遞迴每一次呼叫自身時,系統都會為新開啟的函式分配記憶體,因此遞迴的時間效率較低,太深可能會導致棧溢位
- 尾遞迴還看不懂,先丟個連結吧
hello演算法:迭代與遞迴
終於把遞迴的筆記完善,或者說搞懂遞迴哦,已經過了ddl,程式碼風格的一定會在明寫完的()