[Python學習筆記][第五章Python函數設計與使用]

2016/1/29學習內容

第四章 Python函數設計與使用

以前的幾頁忘記保存了 很傷心python

變量做用域

-一個變量已在函數外定義,若是在函數內須要修改這個變量的值,並將這個賦值結果反映到函數以外,能夠在函數內用global聲明這個變量爲全局變量,明確聲明要使用已定義的同名全局變量markdown

-在函數內部直接使用global關鍵詞將一個變量聲明爲全局變量,即便在函數外沒有定義該全局變量,在調用這個函數以後,將自動增長新的全局變量dom

def demo():
    global a;
    a=3;
    demo();
    print(a)

#函數

也能夠這麼理解:在函數內若是隻引用某個變量的值而沒有爲其賦新值,該變量爲(隱式的)全局變量,若是在變量內任意位置有爲變量賦新值的操做,該變量即被認爲(隱式的)局部變量,除非使用關鍵詞global進行聲明。學習

還有這種先斬後奏的用法

>設計

a=10;
def demo():
    a=666  
    print(a)
    global a;
demo();
print(a)

實際工程中若是須要在同一個程序的不一樣模塊之間共享全局變量的話,能夠編寫一個專門的模塊來實現這一目的code

lambda表達式

labmda表達式能夠用來聲明匿名函數,即沒有函數名字的臨時使用的小函數對象

重要用法…..sorted中作key

f=lambda x,y,z: x+y+z;
print(f(1,2,3))
#6
g=lambda x,y=2,z=3:x+y+z #含有默認值參數
print(g(1))
#6
print(g(x=2,z=4,y=6))   #關鍵參數
#12
#歸根到底函數也是一種變量
#因此lambda 和 普通函數均可以放到 list 中
#lambda 也能調用其餘函數
L=[lambda x : x**2,lambda x : x**3]
import random
data=[1,2,10,100,1000,10000];
random.shuffle(data)
print(data)
#[10, 10000, 1000, 1, 2, 100]
data.sort(key=lambda x:x)
print(data)
#[1, 2, 10, 100, 1000, 10000]
data.sort(key=lambda x:-x)
print(data)
#[10000, 1000, 100, 10, 2, 1]
def demo(x):
    return x
data.sort(key=demo)     #既然lambda算子能夠,那麼函數也能夠,道理上二者等價 果真
print(data)
#[1, 2, 10, 100, 1000, 10000]

函數高級用法

map(),reduce(),filter()

詳情已經瞭解不少了作用域

用yield語句的函數來建立生成器

def f():
    a,b=1,1
    while True:
        yield a
        a , b = b,a+b;
a=f()
for i in range(10):
    print(a.__next__(),end= ' ' )
#1 1 2 3 5 8 13 21 34 55
print()
a=f()
for i in f():
    if i > 1000:
        break;
    else :
        print(i,end=' ')
#1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

使用dis模塊的功能能夠查看函數的字節碼指令

函數嵌套定義與可調用對象

在Python中,函數時能夠嵌套定義的。另外,任何包含call()方法的類的對象都是能夠調用的.it

def linear(a,b):
    def result(x):
        return  a*x+b
    return result
a=linear(1,2)
print(a(2))
#4

class linear2:
    def __init__(self,a,b):
        self.a,self.b=a,b
    def __call__(self,x):
        return self.a*x+self.b
taxes=linear2(0.3,2)
print(taxes(5))
#3.5
相關文章
相關標籤/搜索