Grid 佈局小心得
阿新 • • 發佈:2020-07-26
一、函式的定義
函式是指將一組語句的集合通過一個名字(函式名)封裝起來,想要執行這個函式,只需要呼叫函式名即可
特性:
- 減少重複程式碼
- 使程式變得可擴充套件
- 使程式變得易維護
二、函式的引數
2.1、形參和實引數
- 形參,呼叫時才會存在的值
- 實慘,實際存在的值
def calculate(x,y): #形參,呼叫時才會存在的值
res=(x*y)
return res #返回值,返回res的值
n=calculate(5,3) #實慘,實際存在的值
print(n) #列印
2.2、預設引數
定義:當不輸入引數值會有一個預設的值,預設引數要放到最後
def stu_register(names,age,course,country='CN'): # 這裡country='CN'就是預設引數 print("學員資訊表".center(50,'%')) print("姓名:",names) print("年齡:",age) print("國家:",country) print("課程:",course) stu_register("王二","22","linux")
2.3、 關鍵引數
定義: 正常情況下,給函式傳引數要安裝順序,不想按順序可以用關鍵引數,只需要指定引數名即可,(指定了引數名的就叫關鍵引數),但是要求是關鍵引數必須放在位置引數(以位置順序確定對應的引數)之後
def stu_register(names,age,course,country='CN'): print("學員資訊表".center(50,'%')) print("姓名:",names) print("年齡:",age) print("國家:",country) print("課程:",course) stu_register("王二",age="22",course="linux") # 這裡age="22",course="linux"就是關鍵引數
2.4、非固定引數
定義:如你的函式在傳入引數時不確定需要傳入多少個引數,就可以使用非固定引數
# 通過元組形式傳遞 def sed_alert(*args): for u in args: print('傳送報警給',u) sed_alert('老劉','老王','老李') #同時把'老劉','老王','老李傳遞給args # 通過列表形式傳遞 def sed_alert(*args): for u in args: print('傳送報警給',u) sed_alert(*['老劉','老王','老李']) # 通過列表進行傳遞,列表前面要加一個* # 字典形式(通過k,value的方式傳遞) def stu_register(**args): print("傳送報警給:" ,args) stu_register(names='zhangsan',age="22") # 通過變數的方式傳遞 def stu_register(**args): print("傳送報警給:" ,args) d = {'zhangsan':22,'lisi':23} stu_register(**d) #變數前面要加兩個*
三、函式的返回值
作用:
- 返回函式執行結果,如果沒有設定,預設返回None
- 終止函式執行,函式遇到return終止函式
def stu_register(**args):
print("傳送報警給:" ,args)
return 1
status=stu_register(names='zhangsan',age="22")
print(status) #返回函式返回值
四、變數的作用域
全域性變數和區域性變數
-
在函式中定義的變數叫區域性變數,在程式中一開始定義的變數叫全域性變數
-
全域性變數作用域整個程式,區域性變數作用域是定義該變數的函式
-
當全域性變數與區域性變數同名是,在定義區域性變數的函式內,區域性變數起作用,其他地方全域性變數起作用
-
同級的區域性變數不能互相呼叫
-
想要函式裡邊的變數設定成全域性變數,可用global進行設定
globvar = 0
def set_globvar_to_one():
global globvar # 使用 global 宣告全域性變數
globvar = 1
def print_globvar():
globvar = 2
print(globvar) # 沒有使用 global
set_globvar_to_one()
print (globvar) # 輸出 1
print_globvar() # 輸出 1,函式內的 globvar 已經是全域性變數
五、特殊函式
5.1、巢狀函式
定義:巢狀函式顧名思義就是在函式裡邊再巢狀一層函式
def fun1():
print('第一層函式')
def fun2():
print('第二層函式')
fun2()
fun1()
提示:在巢狀函式裡邊呼叫變數是從裡往外依次呼叫,意思就是如果需要呼叫的變數在當前層沒有就會去外層去呼叫,依次內推
5.2、匿名函式
匿名函式最大的作用就是節約程式碼量,看著高大上,通常配合其他知識點一起使用比如三元運算
# 與三元運算結合
def calc(x,y):
if x<y:
return x*y
else:
return x/y
func=lambda x,y:x*y if x < y else x/y #將上邊的程式碼轉換成匿名函式
print(func(3,5))
# 與map結合
data=list(range(10))
print(data)
def f2(n):
return n*n
print(list(map(lambda x:x*x,data)))
5.3、高階函式
定義:變數可以指向函式,函式的引數可以接收變數,那麼一個函式就可以接收另一個函式作為引數,這種函式稱之為高階函式
只需要滿足一下任意一個條件,即是高階函式
-
接收一個或多個函式作為輸入
-
return返回另一個函式
def get_abs(n): return int(str(n).strip("-")) #將負數改成正數 def add(x,y,f): return f(x) + f(y) print(add(-5,-10,get_abs)) # 呼叫get_abs函式,將get_abs傳遞給變數f
5.4、遞迴函式
定義:一個函式可以呼叫其他函式,如果一個函式呼叫自己本身,這個函式就稱為遞迴函式
- 在預設情況下Python最多能遞迴1000次,(這樣設計師是為了防止被記憶體被撐死)可以通過sys.setrecursionlimit(1500)進行修改
- 遞迴實現過程是先一層一層的進,然後在一層一層的出來
- 必須有一個明確的條件結束,要不然就是一個死迴圈了
- 每次進入更深層次,問題規模都應該有所減少
- 遞迴執行效率不高,遞迴層次過多會導致站溢位
# 計算4的階乘 4x3x2x1
def calc(n):
if n==1:
return 1
return n* calc(n-1)
print(calc(4))
# 列印數字從1-100
def fun(n):
if n==101:
return 1
print(n)
fun(n+1)
fun(1)