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...