1. 程式人生 > 實用技巧 >Grid 佈局小心得

Grid 佈局小心得

一、函式的定義

函式是指將一組語句的集合通過一個名字(函式名)封裝起來,想要執行這個函式,只需要呼叫函式名即可

特性:
  • 減少重複程式碼
  • 使程式變得可擴充套件
  • 使程式變得易維護

二、函式的引數

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) #變數前面要加兩個*

三、函式的返回值

作用:

  1. 返回函式執行結果,如果沒有設定,預設返回None
  2. 終止函式執行,函式遇到return終止函式
def stu_register(**args):
    print("傳送報警給:" ,args)
    return 1


status=stu_register(names='zhangsan',age="22")
print(status) #返回函式返回值

四、變數的作用域

全域性變數和區域性變數

  1. 在函式中定義的變數叫區域性變數,在程式中一開始定義的變數叫全域性變數

  2. 全域性變數作用域整個程式,區域性變數作用域是定義該變數的函式

  3. 當全域性變數與區域性變數同名是,在定義區域性變數的函式內,區域性變數起作用,其他地方全域性變數起作用

  4. 同級的區域性變數不能互相呼叫

  5. 想要函式裡邊的變數設定成全域性變數,可用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)