python筆記4
參數
1 默認參數只在賦值階段被賦值,之後變更不會影響
2 可變長度的參數
1 接受溢出的位置實參 * ,元組存成形式 然後賦值給* 後面的變量名
1 在位置實參中用
2 在實參中用
def foo(x,y,z):
print(x,y)
print(z)
foo (1,2,*(12,34,5,6,7)) #返回(12, 34, 5, 6, 7)
foo (1,2,(12,34,5,6,7)) #返回((12, 34, 5, 6, 7),)
2 接受dict,給位置實參,並復制給變量名kwargs
def test_kwargs(x,y,z):
print(z)
test_kwargs(1,s=3,d=4,k=5,y=2)
s = 3,d=4,k=5被 kwargs接收
實參賦值
3 def test_kwargs(x,y,z):
print(z)
test_kwargs(1,
這個時候z只接受 s d k 不接受 y
函數嵌套
def t():
def t2():
return
namespaces 名稱空間
存放名字與值得綁定關系
名稱空間的分類
內置名稱空間
py自帶的名字 len max sum
創建
銷毀 關閉而銷毀
全局名稱空間
全局級別的名字
局部名稱空間
存放函數內部的名字
函數執行時候被創建
名稱空間定位
len = 10
def f1()
len=111
def f2()
f2()
len(1000)
f1()
名稱空間在定義時候定的
作用域 域=範圍
全局範圍 內置名稱空間的名字 全局名稱空間中的
特點 全局有效,全局存活
局部範圍 局部名稱空間的
locals 局部
globals 全局
def f1():
x = 10
def f2():
nonlocal x ###聲明x是當前函數外層的變量 強調
x = 11
f2()
print(x)
f1() ##x = 11
x=111
def f1():
x = 10
def f2():
global x ##查找全局變量
x = 11
f2()
print(x)
f1()
1、作用域即範圍
- 全局範圍(內置名稱空間與全局名稱空間屬於該範圍):全局存活,全局有效
- 局部範圍(局部名稱空間屬於該範圍):臨時存活,局部有效
2、作用域關系是在函數定義階段就已經固定的,與函數的調用位置無關,如下
x=1
def f1():
def f2():
print(x)
return f2
x=100
def f3(func):
x=2
func()
x=10000
f3(f1())
3、查看作用域:globals(),locals()
LEGB 代表名字查找順序: locals -> enclosing function -> globals -> builtins
locals 是函數內的名字空間,包括局部變量和形參
enclosing 外部嵌套函數的名字空間(閉包中常見)
globals 全局變量,函數定義所在模塊的名字空間
builtins 內置模塊的名字空間
閉包函數的應用
def outter():
x = 1
def func():
print(x)
return func
f = outter()
def func_f():
x = 111
print("func_f")
f()
func_f() ##結果x =1
裝飾器
import time
def timmer(func):
def wrapper(args,kwargs):
start_time = time.time()
res = func(*args,**kwargs)
stop_time = time.time()
print("run time is {}".format(stop_time-start_time))
return res
return wrapper
@timmer
def foo():
time.sleep(3)
print("from foo")
timmer(foo())
python筆記4