1. 程式人生 > >python筆記4

python筆記4

app port func imp form max sum {} 函數定義 賦值

參數
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,

{‘s‘:3,‘d‘:4,‘k‘:5,‘y‘:2})
這個時候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