Python函數編程——返回值與做用域

Python函數編程——返回值與做用域

1、返回值

函數外部的代碼要想獲取函數的執行結果,就能夠在函數裏用return語句把結果返回。python

def stu_register(name, age, course='PY' ,country='CN'):
    print("----註冊學生信息------")
    print("姓名:", name)
    print("age:", age)
    print("國籍:", country)
    print("課程:", course)
    if age > 22:
        return False
    else:
        return True
registriation_status = stu_register("王山炮",22,course="PY全棧開發",country='JP')
if registriation_status:
    print("註冊成功")
else:
    print("too old to be a student.")

注意:編程

  • 函數在執行過程當中只要遇到return語句,就會中止執行並返回結果,so 也能夠理解爲 return 語句表明着函數的結束。
  • 若是未在函數中指定return,那這個函數的返回值爲None。

2、全局與局部變量

name = "Alex Li"
def change_name():
    name = "金角大王,一個有Tesla的高級屌絲"
    print("after change", name)
change_name()
print("在外面看看name改了麼?",name)

輸出app

after change 金角大王,一個有Tesla的高級屌絲
在外面看看name改了麼? Alex Li

爲何在函數內部改了name的值後, 在外面print的時候卻沒有改呢? 由於這兩個name根本不是一回事。函數

  • 在函數中定義的變量稱爲局部變量,在程序的一開始定義的變量稱爲全局變量。
  • 全局變量做用域(即有效範圍)是整個程序,局部變量做用域是定義該變量的函數。
  • 變量的查找順序是局部變量>全局變量
  • 當全局變量與局部變量同名時,在定義局部變量的函數內,局部變量起做用;在其它地方全局變量起做用。
  • 在函數裏是不能直接修改全局變量的。

就是想在函數裏修改全局變量怎麼辦?學習

name = "Alex Li"
def change_name():
    global name #聲明一個全局變量
    name = "Alex 又名金角大王,愛生活、愛自由、愛姑娘"
    print("after change", name)
change_name()
print("在外面看看name改了麼?", name)

global name的做用就是要在函數裏聲明全局變量name ,意味着最上面的name = 「Alex Li」即便不寫,程序最後面的print也能夠打印namecode

3、傳遞列表、字典、集合產生的現象

d = {"name":"Alex","age":26,"hobbie":"大保健"}
l = ["Rebeeca","Katrina","Rachel"]
def change_data(info,girls):
    info["hobbie"] = "學習"
    girls.append("XiaoYun")
change_data(d,l)
print(d,l)

執行結果{‘name’: ‘Alex’, ‘age’: 26, ‘hobbie’: ‘學習’} [‘Rebeeca’, ‘Katrina’, ‘Rachel’, ‘XiaoYun’]blog

不是說不能在函數裏改全局變量麼,怎麼改了呀?內存

根據上圖咱們能看出, 程序只是把d這個dict的內存地址傳給了change_data函數,把dict比做魚缸,裏面的k,v比做缸裏裝的魚。如今只是把魚缸丟給了函數,這個魚缸自己你不能改,可是裏面的魚能夠。 至關於只是傳了一個對這個的引用關係給到函數的形參。這樣是爲了減小內存的浪費,由於若是這個dict比較大,傳一次到函數裏就要copy一份新的值的話,效率過低了。作用域

相關文章
相關標籤/搜索