if條件成立的結果 if 條件 else 條件不成立的結果 例如:html
a=20
b=10
c=a if a>b else b
print(c)
複製代碼
**全局命名空間:**建立的存儲「變量名與值的關係」的空間叫作全局命名空間 **局部命名空間:**在函數的運行中開闢的臨時的空間叫作局部命名空間 **內置命名空間:**內置命名空間中存放了python解釋器爲咱們提供的名字:input,print,str,list,tuple...它們都是咱們熟悉的,拿過來就能夠用的方法。 三種命名空間之間的加載順序和取值順序: **加載順序:**內置(程序運行前加載)-->全局(從上到下順序加載進來的)-->局部(調用的時候加載)--->內置 **取值:**在局部調用:局部命名空間--->全局命名空間--->內置命名空間 站在全局範圍找:全局----內置----局部 使用: 全局不能使用局部的 局部的能夠使用全局的python
1.命名空間和做用域是分不開的 2.做用域分爲兩種: 全局做用域: 全局命名空間與內置命名空間的名字都屬於全局範圍 在整個文件的任意位置都能被引用,全局有效 局部做用域: 局部命名空間,只能在局部範圍內生效 3.站在全局看: 使用名字的時候:若是全局有,用全局的 若是全局沒有,用內置的 4.爲何要有做用域? 爲了函數內的變量不會影響到全局 5.globals方法: 查看全局做用域的名字【print(globals())】 locals方法:查看局部做用域的名字【print(locals())】bash
在局部調用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.包 :包含了對外部函數做用域中變量的引用ui
閉包的經常使用形式:url
def hei():
x = 20
def inner():
#閉包函數
print(x)
return inner()
複製代碼
判斷閉包函數的方法:closurespa
#輸出的__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()
複製代碼
閉包獲取網絡應用code
from urllib.request import urlopen
def index(url):
def inner():
return urlopen(url).read()
return inner
u='http://www.cnblogs.com/Eva-J/articles/7156261.html#_label1'
get = index(u)
print(get())
複製代碼
做用域: 小範圍的能夠用大範圍的,可是大範圍的不能用小範圍的
若是在小範圍內,若是要用一個變量,是當前這個小範圍有的,就用本身的 若是在小範圍內沒有,就用上一級的,上一級沒有的,就用上上級的,以此類推 若是都沒有,報錯