Python函數學習——作用域與嵌套函數


全局與局部變量

  • 在函數中定義的變量稱為局部變量,在程序的一開始定義的變量稱為全局變量。
  • 全局變量作用域是整個程序,局部變量作用域是定義該變量的函數。
  • 當全局變量與局部變量同名時,在定義局部變量的函數內,局部變量起作用;在其它地方全局變量起作用。
name = "Alex Li"   # 全局變量

def change_name(name):  
    print("before change:",name) # 函數內部變量從內向外找,如果內部不存在,會找上一層
    # 輸出
    # before change: Alex Li
    name = "金角大王,一個有Tesla的男人" #局部變量
    print("after change", name)
    # 輸出
    # after change 金角大王,一個有Tesla的男人

change_name(name)

print("在外面看看name改了么?",name)  # 默認局部變量不能修改全局變量的值
# 輸出
# 在外面看看name改了么? Alex Li

不用傳name 值到函數里,也可以在函數里調用外面的變量

name = "Alex Li"

def change_name():
    name = "金角大王,一個有Tesla的男人"
    print("after change", name)
    # 輸出
    # after change 金角大王,一個有Tesla的男人

change_name()

print("在外面看看name改了么?", name )
# 輸出
# 在外面看看name改了么? Alex Li

 

作用域

Python中函數就是一個作用域,局部變量放置在其作用域中。

如何在函數里修改全局變量?global

name = "Alex Li"
def change_name():
    global name # 聲明全局變量
    name = "Alex 又名 金角大王,路飛學城講師"
    print("after change", name)
    # 輸出
    # after change Alex 又名 金角大王,路飛學城講師

change_name()

print("在外面看看name改了么?", name)

"""
global name的作用就是要在函數里聲明全局變量name ,意味着最上面的name = "Alex Li"即使不寫,程序最后面的print也可以打印name
"""
在實踐中global一般情況下最好不要使用,在多人協作時容易產生錯誤

嵌套函數

在函數里面還可以定義函數,可以嵌套多層,執行需要被調用

name = "Alex"
def change_name():
    name = "Alex2"

    def change_name2():
        name = "Alex3"
        print("第3層打印", name)

    change_name2()  # 調用內層函數 
    # 輸出
    # 第3層打印 Alex3
    print("第2層打印", name)
    # 輸出
    # 第2層打印 Alex2


change_name()
print("最外層打印", name)
# 輸出
# 最外層打印 Alex

嵌套函數舉例1

嵌套函數舉例2

嵌套函數舉例3

 

嵌套函數舉例4

 

 嵌套函數舉例5

 

  嵌套函數舉例6

高階函數

變量可以指向函數,函數的參數能接收變量,那么一個函數就可以接收另一個函數作為參數,這種函數就稱之為高階函數。

變量可以指向函數

以Python內置的求絕對值的函數abs()為例,調用該函數用以下代碼

>>> abs(-1)
1
但是,如果只寫abs呢?
>>> abs
<built-in function abs>

如果把函數本身賦值給變量呢?

>>> f = abs
>>> f
<built-in function abs>

總結:函數本身也可以賦值給變量,即:變量可以指向函數

驗證:

f = abs
print(f(-10))
# 輸出10

 

傳入函數

既然變量可以指向函數,函數的參數能接收變量,那么一個函數就可以接收另一個函數作為參數,這種函數就稱之為高階函數。

一個最簡單的高階函數:

def add(x, y, f):  # 高階函數
    return f(x) + f(y)

"""
當我們調用add(-5, 6, abs)時,參數x,y和f分別接收-5,6和abs,根據函數定義,我們可以推導計算過程為:
x = -5
y = 6
f = abs
f(x) + f(y) ==> abs(-5) + abs(6) ==> 11
"""
print(add(-5, 6, abs))
# 輸出11

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM