Task 04 變數與函式 Variables and Functions

江离111發表於2024-12-05

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

函式概念

  • 函式是一個程式碼塊,可以被反覆呼叫,執行功能
  • 函式由兩部分組成,即 headerbody
  • 函式在專案中會大量使用,完成分段式程式設計,以防部分程式碼出錯牽連整個程式

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,程式碼風格的一定會在明寫完的()

相關文章