Python學習12:函數的返回值和作用域

筆者:風起怨江南 出處:https://blog.csdn.net/JackMengJin 筆者原創,文章轉載需註明,如果喜歡請點贊+關注,感謝支持!

Python函數學習系列第二篇,函數返回值和作用域,函數參數相關內容請點擊=>傳送門,所有函數相關的練習我會放到Python實戰訓練裏,敬請期待。

 

目錄

函數的返回值和作用域

一、函數的返回值

1.1 return語句

1.2 return和print的區別

1.3 遇到return會終止

1.4 return語句總結

二、函數的作用域

2.1 局部變量

2.2 全局變量

2.3 作用域裏的坑

2.4 global關鍵字


 

函數的返回值和作用域

前面講了函數的定義、調用和函數參數的相關內容,本文主要說明Python函數的返回值和作用域。

一、函數的返回值

1.1 return語句

函數返回值的定義:函數裏面的return語句 + 值,表示函數的返回值,可以在調用函數之後通過變量進行接收。

不帶參數值的return語句返回None。

舉例,自定義一個相加函數,返回最後的值:

def add_plus(a,b):
    '''添加 '''
    c = a + b
    return c

如果沒有return會怎樣?

def add_plus(a,b):
    '''添加 '''
    c = a + b
def add_plus(a,b):
    '''添加 '''
    c = a + b

print(add_plus(2,6))
None

沒有return會返回None。

1.2 return和print的區別

其實區別很簡單,print()是python的一個內置函數(內置函數專題會在後面講解),作用就是打印。

而return是將函數中運行後的一個值返回,具體這個值是多少,要看return的值是誰。

def add_plus(a,b):
    '''添加 '''
    c = a + b
    print(c)

add_plus(1,8)
print(add_plus(1,8))
9
None

可以看到直接調用函數運算會得到打印值的結果,但去打印函數的返回值結果是None,更一步說明沒有return的函數返回值爲None。這也是爲什麼去獲取append時返回是None。
 

my_list1 = ['1','2']
a = my_list1.append('4')
print(a)
None

可以看到append這裏沒有返回值。

而字符串方法strip()是有返回值的,返回的是列表類型的值。

1.3 遇到return會終止

函數遇到return,就會終止運行。函數的return,相當於循環裏的break,看到就終止。

def add(a,b):
    if a > 100:
        return a + b
    elif a == 100:
        return a * b
    else:
        return a - b

print(add(120,300))
420

可以看到當函數裏有if語句時,沒有執行的return不會終止函數,直到遇到return時纔會終止,並返回值。

1.4 return語句總結

  • 函數遇到return就終止,不再執行後面的程序。
  • 函數的返回值return,函數調用以後可以通過變量接收return的值。
  • 函數的輸出數據,是由return決定。

所以對於函數來說,return語句是控制函數具體的執行,遇到return就終止函數下面的程序。

 

二、函數的作用域

一個程序的所有的變量並不是在哪個位置都可以訪問的。訪問權限決定於這個變量是在哪裏賦值的。

變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱。

可以把作用域這麼去理解:函數相當於一個盒子,盒子裏面的和盒子外面是兩個世界。通過作用域的概念可以把變量分爲兩種:

一種就是局部變量(盒子裏面的),另一種就是全局變量(盒子外面的)。

2.1 局部變量

局部變量:函數裏面的變量。

def add_plus(a,b):
    '''添加 '''
    c = a + b
    print(c)

這裏的c、a、d都在函數裏面,所以都稱爲局部變量。

2.2 全局變量

全局變量:函數外面的變量。

c = 3
def add_plus(a,b):
    '''添加 '''
    c = a + b
    print(c)

print(c)

雖然c都是c,但表示的是不一樣的。除了名字一樣,其他都不一樣。這裏打印的c就是全局變量的c。

2.3 作用域裏的坑

局部變量和全局變量獲取和修改:

  •  全局能不能獲取局部變量?         不能
  • 局部作用域能獲取全局變量嗎?  能
  • 全局能修改局部變量麼?             不能
  • 局部變量能修改全局變量麼?      不能

既然局部作用域能獲取全局變量,不能修改全局變量,那如何才能在局部變量中修改全局變量呢?

2.4 global關鍵字

globa語句就是用來局部變量修改全局變量,global就是聲明是全局變量。

c = 3
def add_plus(a,b):
    '''添加 '''
    global c
    c = c + a + b
    return c

print(c)
print(add_plus(1,2))
print(c)
3
6
6

global c 就是聲明c是全局變量,可以在函數裏修改全局變量c。

如果不加global關鍵字是不能在函數裏修改的:

UnboundLocalError: local variable 'c' referenced before assignment

global關鍵字注意事項 —— 不要輕易使用global關鍵字

其實不難理解,這是因爲當一個文件裏函數特別多的話(10個,20個或更多的函數),某個函數里加global關鍵字修改了全局變

量後,會不清楚哪個函數造成的,導致代碼維護起來很麻煩。

所以如果非要用要global關鍵字,一定要確保能夠控制它,知道在哪裏修改才行,否則最好輕易不要使用。

 


下一篇內容爲Python常用的內置函數,敬請期待。

以上是《Python學習12:Python學習12:函數的返回值和作用域》的所有內容,原創不易,轉載請註明。如果喜歡請點贊和關注,謝謝大家的支持!

想獲得免費的學習資料請添加微信公衆號——風起怨江南,非常感謝大家的關注和支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章