變數本質上是佔位符
def 函式名(引數1,引數2,…,引數n):
函式體(語句塊)
這裡的引數沒有型別,只有物件才有型別。
python中為物件編寫介面,而不是為資料型別編寫。
result = add(3,4)
add(x,y)被執行之前,在計算機內是不存在的,直到**執行到這裡的時候,在計算機中就建立起來了乙個物件,這個物件與變數result引用關係,並且add(x,y)將運算結果返回。
函式呼叫的引數賦值時可以直接把賦值語句寫在裡面。例如:
add(x=3,y=10)
需要返回多個值時是以元組形式返回。
return還有乙個作用,就是結束正在執行的函式。有點類似迴圈中的break的作用。
def
add(x,y):
""" add x and y."""
return x+y
此時,使用print(add.doc)可以列印出新增的注釋。
x=2
deffuncx
():global x #global說明這裡的x和外面的x是同乙個
x=9
命名空間(namespace)表示識別符號(identifier)的可見範圍。
乙個識別符號可在多個命名空間中定義。
變數和值的關係就有點類似「鍵」和「值」的關係,有乙個內建函式vars()可以幫助研究一下這種對應關係。
我們還要解決函式的引數個數不確定的情況。
def
func
(x, *arg):
如果引數的輸入個數不確定,其他引數全部通過*arg,
以元組的形式由arg收集起來
(arg名稱可以不一樣,但是*一定要有)。
deffoo
(**karg):
foo(a=1,b=2,c=3)
使用**kargs的形式收集值,會得到字典型別的資料,
但是,需要在傳值的時候說明「鍵」和「值」。
bars =(2,3)
add(*bars)
先把要傳的值放到元組中,賦值給乙個變數bars,然後再把值傳到函式內
使用乙個*號,以元組的形式傳值,如果使用**方式,則是以字典的形式傳值。
「函式式程式設計」的代表
遞迴不是函式,而是一種思想,這裡只是說明其思想。然後講述幾個特殊函式。
遞迴(recursion),是指函式的定義中使用函式自身的方法。
一般情況下,遞迴是能夠被迭代或迴圈替代的,而且後者的效率常常比遞迴要高。
這裡的特殊在於跟「函式式程式設計」扯上了關係。
python是支援多種范型的語言。可以進行函式式程式設計,其突出體現在有這麼幾個函式:
filter,map,reduce,lambda,yield
有了它們,最大的好處是程式更簡潔。
1. lambda
lambda函式是乙個只用一行就能解決問題的函式。
>>> lam = lambda x: x+3
>>> n2 =
>>> number=range(10)
>>> for i in number:
...
>>> n2
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> g = lambda x,y: x+y
>>> g(3,4)
7>>> (lambda x : x**2)(4)
16
lambda使用方法:
* 在lambda後面直接跟變數。
* 變數後面是冒號。
* 冒號後面是表示式,表示式計算結果就是本函式的返回值。
注意:雖然lambda函式可以接收任意多個引數,但是lambda函式不能包含命令,包含的表示式也不能超過乙個,如果需要更複雜的東西,應該定義乙個普通的函式。
lambda並沒有給程式帶來效能上的提公升,但帶來的是**的簡介。
>>> lamb = [lambda x:x, lambda x:x**2, lambda x:x**3, lambda x:x**4]
>>> for i in lamb:
... print(i(3))
...3927
81
map
>>> number = range(10)
>>> map(lambda x:x+3, number)
0x7fed4ed4f390>
>>> list(map(lambda x:x+3, number))
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
map()是python的乙個內建函式,它的基本樣式是:
map(func,seq)
>>> lst1 = [1,2,3,4,5]
>>> lst2 = [6,7,8,9,0]
>>> lst3 = [7,8,9,2,1]
>>> map(lambda x,y,z: x+y+z, lst1, lst2, lst3)
0x7fed4ed4f4e0>
>>> list(map(lambda x,y,z: x+y+z, lst1, lst2, lst3))
[14, 17, 20, 15, 6]
python3中,reduce從全域性名字空間中移除,使用需匯入functools
>>>
import functools
>>> functools.reduce(lambda x,y: x+y, [1,2,3,4,5])
15
對比map()的運算,reduce()是橫著逐個元素進行運算((((1+2)+3)+4)+5)。
3. filter
中文含義是過濾器,在python中,它起過濾器的作用。
>>> numbers = range(-5,5)
>>> numbers
range(-5, 5)
>>> filter(lambda x: x>0,numbers)
0x7fed4e596f60>
>>> list(filter(lambda x: x>0,numbers))
[1, 2, 3, 4]
import math
defquadratic_equation
(a,b,c):
delta = b**2-4*a*c
if delta < 0:
return
false
elif delta == 0:
return -(b/2/a)
else:
sqrt_delta = math.sqrt(delta)
x1 = (-b+sqrt_delta)/2/a
x2 = (-b-sqrt_delta)/2/a
return x1,x2
第3章函式
第3章函式 知識梳理 遞迴呼叫函式可以直接或者間接地呼叫自身 遞推 回歸 值傳遞引數值的單向傳遞 引用傳遞引用是一種特殊型別的變數,可以被認為是另乙個變數的別名 帶預設形參值的函式預設形參值必須靠右 例 int add int x,int y 5,int z 6 在相同的作用域內,不允許在同乙個函式...
第3章 函式 1
計算x的n次方 include using namespace std double pow double x,int n return val int main 輸入乙個8位二進位制數,將其轉換為十進位制數輸出。例如 從鍵盤輸入1101 11012 1 23 1 22 0 21 1 20 1310...
第3章 模板
這章主要將一些jinja2的頁面模板,個人覺得這種輪子或者黑盒的使用不必太過仔細,必要的時候再記就行了。3.4 鏈結 這種引入了url rof 函式,其作用是傳入檢視函式的名字,以及一些引數,生產對應的url鏈結 1 例如 url rof index external true http local...