ParisGabriel:Python全棧工程師(0基礎到精通)教程 第十五課(函數嵌套、變數範圍)

來源:互聯網
上載者:User

標籤:定義函數   efault   代碼   匿名   字串   input   cti   module   等於   

ParisGabriel 感謝 大家的支援                                                              



                 每天堅持 一天一篇 點個訂閱吧  灰常感謝    當個死粉也闊以

 

                      Python人工智慧從入門到精通

 

 

globals()/locals()函數
    globals()返回當前全域範圍內變數的字典
    locals() 返回當前局部範圍內變數的字典
函數變數:
  函數名是變數,它在def 語句建立時綁定函數
  fa1 = fa 沒有括弧 綁定函數 fa1 = fa() 返回結果
    函數的變數名可以序列交換演算法
一個函數可以作為另一個函數的實參傳遞:
 例如:

def myinput(fn):    L = [5, 3, 1, 9, 7]    return fn(L)    print(myinput(max))    print(myinput(min))    print(myinput(sum))    print(myinput(len))

 


函數可以作為另一個函數的傳回值:
例如:

def get_op():  s = input("qing shu ru cao zuo")  if s == "zui da":    return max  elif s == "zui xiao":    return min  elif s == "he":    return sumL = [2, 3, 4, 6,5, 6, 9, 1]print(L)f = get_op()print(f(L))

 

函數的嵌套:
  函數嵌套定義是指一個函數裡用def語句來建立其他的函數

樣本:

def fn_outter():  print("fn_outter被調用")def fn_inner():  print("fn_inner被調用")  fn_inner()  fn_inner()  print("fn_outter調用結束")fn_outter()

 

Python的範圍:
    範圍也叫名字空間,是訪問變數時尋找變數的範圍空間
  python的4個範圍:
  範圍:                   英文解釋        縮寫
  局部範圍(函數內)           Local(function)        L
  外部嵌套函數範圍            Enclosing functio loc    E
  函數定義所在模組(檔案)範圍     Global(module)           G
  python內建模組範圍            Builtin(python)      B 
內含項目關聯性(內建>模組>外部嵌套函數>函數內)
變數名尋找規則:
    訪問變數時,先尋找本地變數,然後是包裹此函數外的函數內部的變數
    ,之後是全域變數,最後是內建變數
          L ---> E ---> G ---> B
    在預設情況下,變數名賦值會建立或者改變當前範圍的變數
global語句:
  告訴解釋執行器global語句聲明一個或多個變數,
  這些變數的範圍為模組層級別的範圍,也稱為全域變數
全域聲明global
  將指派陳述式操作的變數映射到模組檔案內部的範圍
  文法
    global 變數1, 變數2, ....
  說明:
    1. 全域變數如果要在函數內部被賦值,則必須經過全域聲明(否則會被認為是建立局部變數)
    2. 全域變數在函數內部不經過聲明就可以直接存取(變數已經存在並關聯一個對象)
    3. 不能先聲明局部變數,再用global聲明為全域變數,此做法不附合規則
    4. global變數列表裡的變數名不能出現在此範圍的形參列表裡

nonlocal語句:
  告訴解釋執行器,nonlocal聲明變數不是局部變數,也不是全域變數
  它是外部嵌套函數變數
  文法:
    nonlocal 變數名1,變數名2,...
  說明:
    1. nonlocal 語句只能在被嵌套的函數內部進行使用
    2. 訪問nonlocal變數將對外部嵌套函數範圍內的變數進行操作
    3. 當有兩層或兩層以上函數嵌套時,訪問nonlocal變數只對最近的一層變數進行操作
    4. nonlocal語句的變數列表裡的變數名,不能出現在此函數的參數列表中

lambda運算式(又稱匿名函數)(希臘字母:入)
  作用:
    建立一個匿名函數對象
    同def類似 但是不提供函數名
  格式:
    lambda[ 參數1, 參數...]: 運算式
  說明:
    1. lambda 只是一個運算式,它用來建立一個函數對象
    2. 當lambda運算式調用時,先執行冒號(:)後的運算式,並返回運算式的結果的參考關聯性
    3. lambda 運算式建立的函數只能包含一條運算式
    4. lambda 比函數簡單且可以隨時建立和銷毀,有利於減少程式的偶合度

  函數:
    eval () / exec() 函數
    eval(source, globals=None, local=None) 把一個字串 srouce 當成一個運算式來執行,返回運算式執行的結果
    exec(source, globals=None, locals=None) 把一個字串source 當成程式來執行

 


練習:
寫一個函數叫hello(name),部分代碼如下:
count = 0
def hello(name):
print(‘你好‘, name)
... 此處代碼省略,需要同學們自己填寫
... 此處代碼需要改變全域變數來記錄此函數曾經被調用過多少次.

hello(‘小張‘)
hello(‘小李‘)
print(‘hello 函數被調用‘, count, ‘次‘) # 2次

count = 0def hello(name):    global count    count += 1    print("hello", name)hello("name")hello("xiaoli")hello("xiaoliu")hello("xiaowei")hello("xiaozhang")

 


1. 寫一個lambda 運算式,判斷這個數的2次方+1是否能被5整除,如果能被整除返回True, 否則返回False
例:
fa = lambda x: .....
print(fa(2)) # True
print(fa(4)) # False

 

fa = lambda x: (x ** 2 + 1) % 5 == 0print(fa(2)) # Trueprint(fa(4)) # False

 

 

2. 寫一個lambda運算式,求兩個變數的最大值
例如:
def mymax(x, y):
...
mymax = lambda ...
print(mymax(100, 200)) # 200

 

def mymax(x, y):    if x > y:        return x    else:        return yprint(mymax(100, 200)) # 200mymax = lambda x, y: x if x > y else y print(mymax(100, 200)) # 200

 

 


1. 給出一個整數n,寫一個函數myfac來計算n!(n的階乘)
n! = 1 * 2 * 3 * 4 * ..... * n
如:
print(myfac(5)) # 120

def myfac(n):    x = 1    for i in range(1, n + 1):        x = x * i    return xprint(myfac(5))

2. 給出一個整數n,寫一個Function Computemyfn(n):
1 + 2**2 + 3**3 + .... + n**n的和
如:
print(myfn(10)) # ???

 

def myfu(n):    s = 0    for x in range(2, n + 1):        s += x ** x    return sprint(myfu(10))

3. 完全數:
1 + 2 + 3 = 6 (6為完全數)
1,2,3都為6的因數(因數是能被一個數x整除的整數為y,則y為x的因數)
1 x 6 = 6
2 x 3 = 6
完全數是指除自身以外的所有因數相加之和等於自身的數
求 4~5個完全數並列印出來
答案:
6
28
496
......

 

def mywqs(x):    s = 0    L = []    for i in range(1, x):        if x % i == 0:            L.append(i)    for i in L:        s += i    if s == x:        return True    else:        return Falsei = 0wqs = 0while wqs < 5:    i += 1    if mywqs(i) == True:        print(i)        wqs += 1

 

    咳咳 又到了吹NB環節
locals()、globals()
    就是一個查詢函數 以字典形式返回資訊而已
函數變數?
    你就就把它看做一個全域變數 變數綁定資料 而它綁定語句塊 就這麼簡單
什麼是範圍?
    範圍就是變數的所屬範圍 超過範圍就失效
    在別的地方一般是3個範圍 而python有4個
    內建變數 局部變數 模組全域變數
    特殊那個就是兩個函數嵌套之間的範圍(外部嵌套)
    分別都是內含項目關聯性(內建>模組>外部嵌套函數>函數內)
    內建函數 不可刪除或修改 其他範圍 不能與內建函數重名
    否則內建函數失效 只作用於當前空間自訂函數
    各範圍各不相干 同空間不可重名
global    不管在任何空間使用global都直接聲明全域變數
nonlocal   只能在被嵌套函數內部使用 多層嵌套 只會跳一層
lambda    用運算式建立一個函數 和if一樣

 

 

ParisGabriel:Python全棧工程師(0基礎到精通)教程 第十五課(函數嵌套、變數範圍)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.