1 5 2 Python函式巢狀及作用域

2021-09-11 15:01:58 字數 3781 閱讀 3031

if條件成立的結果 if 條件 else 條件不成立的結果 例如:

a=20

b=10

c=a if a>b else b

print(c)

複製**

**全域性命名空間:**建立的儲存「變數名與值的關係」的空間叫做全域性命名空間 **區域性命名空間:**在函式的執行中開闢的臨時的空間叫做區域性命名空間 **內建命名空間:**內建命名空間中存放了python直譯器為我們提供的名字:input,print,str,list,tuple...它們都是我們熟悉的,拿過來就可以用的方法。三種命名空間之間的載入順序和取值順序:**載入順序:**內建(程式執行前載入)-->全域性(從上到下順序載入進來的)-->區域性(呼叫的時候載入)--->內建 **取值:**在區域性呼叫:區域性命名空間--->全域性命名空間--->內建命名空間 站在全域性範圍找:全域性----內建----區域性使用:全域性不能使用區域性的 區域性的可以使用全域性的

1.命名空間和作用域是分不開的 2.作用域分為兩種:全域性作用域:全域性命名空間與內建命名空間的名字都屬於全域性範圍 在整個檔案的任意位置都能被引用,全域性有效區域性作用域:區域性命名空間,只能在區域性範圍內生效3.站在全域性看:使用名字的時候:如果全域性有,用全域性的 如果全域性沒有,用內建的4.為什麼要有作用域?為了函式內的變數不會影響到全域性5.globals方法:檢視全域性作用域的名字【print(globals())】 locals方法:檢視區域性作用域的名字【print(locals())】

在區域性呼叫locals()和globals()

def func():

a = 12

b = 20

print(locals())

print(globals())

func()

複製**

global關鍵字:強制轉換為全域性變數

x=1

def foo():

global x #強制轉換x為全域性變數

x=10000000000

print(x)

foo()

print(x)

複製**

nonlocal讓內部函式中的變數在上一層函式中生效,外部必須有

x = 1

def f1():

x = 2

def f2():

## x=3

def f3():

## global x#修改全域性的

nonlocal x ## 修改區域性的(當用nonlocal時,修改x=3為x=100000000,當x=3不存在時,修改x=2為100000000 )

## 必須在函式內部

x = 10000000000

f3()

print('f2內的列印', x)

f2()

print('f1內的列印', x)

f1()

print(x)

複製**

def animal():

def tiger():

print('nark')

print('eat')

tiger()

animal()

複製**

x=1

def heihei():

x='h'

def inner():

x='il'

def inner2():

print(x)

inner2()

inner()

heihei()

複製**

def func():

print('func')

print(func)#指向了函式的記憶體位址

複製**

def func():

print('func')

def func2(f):

f()print('func2')

func2(func)

複製**

def func():

def func2():

print('func2')

return func2

f2=func()

f2()

複製**

def f1(x):

print(x)

return

'123'

def f2():

ret = f1('s') #f2呼叫f1函式

print(ret)

f2()

複製**

def func():

def func2():

return

'a'return func2 #函式名作為返回值

func2=func()

print(func2())

複製**

閉包:1.閉 :內部的函式    2.包 :包含了對外部函式作用域中變數的引用

閉包的常用形式:

def hei():

x = 20

def inner():

#閉包函式

print(x)

return inner()

複製**

判斷閉包函式的方法:closure

#輸出的__closure__有cell元素 :是閉包函式

def func():

name = 'eva'

def inner():

print(name)

print(inner.__closure__)

return inner

f = func()

f()複製**

#輸出的__closure__為none :不是閉包函式

name = 'egon'

def func2():

def inner():

print(name)

print(inner.__closure__)

return inner

f2 = func2()

f2()

複製**

閉包獲取網路應用

from urllib.request import urlopen

def index(url):

def inner():

return urlopen(url).read()

return inner

u=''

get = index(u)

print(get())

複製**

作用域:小範圍的可以用大範圍的,但是大範圍的不能用小範圍的

如果在小範圍內,如果要用乙個變數,是當前這個小範圍有的,就用自己的 如果在小範圍內沒有,就用上一級的,上一級沒有的,就用上上級的,以此類推 如果都沒有,報錯

python 函式巢狀及作用域

函式可以巢狀嗎?當然可以 我們可以看到,外部函式outer func 的函式體中巢狀了乙個函式inner func 並且outer func 體中 還呼叫了內部函式inner func 所以每當呼叫outer func 的時候,都會呼叫一次inner func 我 們來看一下列印結果 我們可以看到,...

python巢狀函式

也叫內部函式 巢狀函式裡面兩個重要的概念 變數作用域和函式閉包 1.變數作用域 內部函式可以直接讀取訪問外部函式變數,但是不能修改 訪問規則是從內到外函式逐級尋找變數 usr bin env python def outer a i a 1 def inner j i 1 def innest pr...

python 函式巢狀

1 函式的巢狀呼叫 def my max x,y if x y return x else return y def my max4 a,b,c,d x my max a,b y my max c,d print my max x,y max 4 my max4 1,5,6,0 2 函式的巢狀定義1...