1. 程式人生 > 其它 >函式基礎操作2

函式基礎操作2

目錄
注:函式必須先定義後呼叫
函式的語法結構
def 函式名(引數1, 引數2):
'''函式註釋'''
函式程式碼體
return 返回值

一.名稱空間

1.名稱空間的定義:存放變數名與變數值繫結關係的地方
2.名稱空間分為三大類
2.1內建名稱空間:
python直譯器定義好的
2.2全域性名稱空間:
在py檔案中編寫的程式碼執行產生的名字都會存到全域性名稱空間內
neme = 'thn'   # name 變數名存入
dae fun():   # 未被呼叫的函式名fun 存入 
  pass
for i in range(5) #for迴圈裡 i 變數名 存入
2.3區域性名稱空間
函式體程式碼執行時產生的都是區域性名稱空間
def fun():
  name = 'thn'   # neme 存入
"""
注:都是存活週期的
1.內建名稱空間
python直譯器執行 產生
python直譯器關閉 銷燬
2.全域性名稱空間
py檔案開始執行 產生
py檔案執行結束 銷燬
3.區域性名稱空間
函式體程式碼開始執行 產生
函式體程式碼執行結束 銷燬
"""

二.名字的查詢順序

怎樣查詢名字呢?
1.在查詢名字的時候要認知自己在哪個空間(內建 全域性 區域性)
1.1在區域性也就是底層
'區域性名稱空間 >>> 全域性名稱空間 >>> 內建名稱空間'
1.2在全域性
全域性名稱空間 >>> 內建名稱空間
實驗讓三個名稱空間中都有同一個名稱
len = 全域性

def fun():
  print(' ')
fun()
print(len) = 區域性 
# 呼叫函式區域性空間

三.作用域

作用域就是名稱空間可以作用的範圍
1.置名稱空間
程式任意階段任意位置均可使用(全域性有效)
2.全域性名稱空間
程式任意階段任意位置均可使用(全域性有效)
3.區域性名稱空間	
一般情況下只在各自區域性名稱空間中有效(區域性有效)
'也可以通過其他方法打破這個規則'

四.global與nonlocal關鍵字

1.glonal關鍵字:區域性修改全域性不可改變型別
x = 111
def index():
x = 222  # 並不是在修改全域性的x 而是在區域性名稱空間中建立了一個新的x
如果需要修改
global x
x = 666
index()
print(x) # 結果是666 如果修改的話是需要用到關鍵字global
1.1如果區域性名稱空間巢狀的情況下 內層如果想要修改外層
資料是不可變型別
需要使用關鍵字nonlocal
資料是可變型別(區域性名稱巢狀 內層修改)
不需要使用關鍵字nonlocal
def index():
    x = 111  # 在index的區域性產生一個x=111
    l1 = [11, 22, 33]
    def f1():
    l1.append(44)
    index()
結果是:  l1 = [11, 22, 33,44]

五.函式名的多種用法

1.函式名可以當做變數名進行賦值
def index():
  print('from function index')
index()
結果:'from function index'
2.也可以指向函式體程式碼
res = index
print(res)
res() 
結果:from function index
3.函式名還可以當成函式的實參
def index():
    print('from index')
def func(a):
    print('from func')
    print(a)
    a()
func(index)
結果:
from func
<function index at 0x00000000025CC400>
from index
4.還可以當函式的返回值
def func():
    print('from func')
    return func
func()
結果:from func
5.可以作為容器型別(列表:元組:字典等)的元素
def index():
    print('from index')
l1 = [11, 22, 33, 44, index]
print(l1)
結果:
[11, 22, 33, 44, <function index at 0x00000000025CC400>]

六.函式的鑲嵌

x = 111
def f1():
    x = 222
    def f2():
        x = 333
        def f3()
            x = 444 
            print(x)
        f3()
    f2()
f1()
結果是:444   由上往下呼叫 由下往上查