3-Python 函式(2)
本章概要:
1、函式基礎
2、深入理解函式
3、綜合練習
1、函式基礎
</br>課程概要:
理解函式
定義函式
呼叫函式
函式文件
一、理解函式
函式這個數學名詞是萊布尼茨在1694年開始使用的。
二、定義函式
1、Python 函式格式
def 函式名(引數1, 引數2, ..., 引數n):
函式體(語句塊)
2、函式的命名方式
三、呼叫函式
1、降低程式設計的難度,通常將一個複雜的大問題分解成一系列更簡單的小問題,然後將小問題繼續劃分成更小的問題,當問題細化足夠簡單時,就可以分而治之。
2、程式碼重用
3、return 語句
def add_function(x, y):
'''
This is a function that adds x and y
'''
return x+y
if __name__=="__main__":
a=4
b=9
c=add_function(a, b)
print "a+b={0}+{1}={2}".format(a, b, c)
def add_function(x, y):
'''
This is a function that adds x and y
'''
return x+y
if __name__=="__main__":
a=4
b=9
c=add_function(x=a, y=b)
print "a+b={0}+{1}={2}".format(a, b, c)
def add_function(x, y):
'''
This is a function that adds x and y
'''
return x+y
if __name__=="__main__":
a="py"
b="thon"
c=add_function(a, b)
print "a+b={0}+{1}={2}".format(a, b, c)
# 斐波那契數列
def fibs(n):
'''
This is the Fibonacci sequence.
'''
result=[0, 1]
for i in range(n-2):
result.append(result[-2]+resultp[-1])
return result
if __name__=="__main__":
lst=fibs(10)
print lst
# 返回多個值
def my_fun():
return 1, 2, 3
b, c, d=my_fun()
四、函式文件
1、程式在大多數情況下是給人看的,只是偶爾被機器執行。
2、使用function.__doc__
檢視函式文件
2、深入理解函式
課程概要:
引數和變數
引數收集和傳值
特殊函式
一、引數和變數
# 函式就是物件
def foo(a, b):
return a+b
p=foo
print p(4,5)
1、按引用傳遞引數
# 按引用傳遞
def foo(a, b):
return a+b
x, y=3, 4
foo(x, y)
2、全域性變數和區域性變數
x=2 # 外部變數,但不是全域性變數
def foo(a, b):
x=9 # 區域性變數
print "This x is in the fun:",x
def bar():
global x # 全域性變數
x=9
print "This x is in the fun:",x
3、名稱空間
二、函式收集和傳值
1、收集方式一:*args
def foo(*args):
# args 接收引數生成的是元組
print args
foo(1, 2, 3)
def foo(x, *args):
print "x:",x
print "args:",args
foo(1, 2, 3)
2、收集方式二:**kargs
def foo(* *kargs):
# kargs 接收引數生成的是字典
print kargs
foo(a=1, b=2, c=3)
#foo(1, 2, 3) 在這個函式裡這樣傳是錯誤的
def foo(x, * args, * *kargs):
print x
print args
print kargs
foo(1)
foo(1, 2)
foo(1, 2, 3)
foo(1, 2, 3, name="Li Sn")
3、另一種傳值方式
def foo(x, y):
return x+y
bars= 2, 3
# *bars傳進去是元組(2, 3)
foo(*bars)
def book(author, name):
print "{0} has a book:{1}".format(author, name)
bars={"name":"Learn Python", "author":"Boss"}
4、zip()補充
colors=["red", "green", "blue"]
values=[124, 23, 6, 100]
zip(colors, values)
# 沒有匹配的物件的100則會被拋棄
dots=[(1, 2), (3, 4), (5, 6)]
x, y=zip(*dots)
seq= range(1, 10)
zip(* [iter(seq)]*3)
#其實就是下面這個實現功能
x=iter(range(1, 10))
zip(x, x, x)
嘗試一下zip(* [iter(seq)]*2)
,看看結果是什麼-。-
三、特殊函式
lambda
map
reduce
filter
1、lambda
def foo(x):
x+=3
return x
n=range(10)
s=[i+3 for i in n]
lam=lambda x:x+3
n2=[]
for i in n2:
n2.append(lam(i))
g=lambda x, y: x+y
g(3,4)
2、map
def foo(x):
x+=3
return x
n=range(10)
map(foo, n)
map(lambda x:x+3, n)
lst1=[1, 2, 3, 4, 5]
lst2=[6, 7, 8, 9, 10]
map(lambda x, y: x+y, lst1, lst2)
3、reduce
lst1=[1, 2, 3, 4, 5]
lst2=[6, 7, 8, 9, 10]
reduce(lambda x, y: x+y, lst1, lst2)
4、filter
n=range(-5,5)
filter(lambda x: x>0, n)
3、綜合練習
練習1:遞迴
練習2:解方程
練習3:統計考試成績
練習4:找素數
一、遞迴
# 遞迴
def fib(n):
'''
This is Fibonacci by Recursion.
'''
if n==0:
return 0
elif n==1:
return 1
else:
return fib(n-1)+fib(n-2)
if __name__=="__main__":
f=fib(10)
print f
二、解方程
# 解方程
from __future__ import division
import math
def quadratic_equation(a, b, c):
delta= b*b-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
if __name__=="__main__":
print "a quadratic equation: x^2 + 2x + 1=0"
coefficients=(1, 2, 1)
roots= quadratic_equation(*coefficients)
if roots:
print "the result is : ", roots
else:
print "this equation has no solution."
三、統計考試成績
# 統計考試成績
from __future__ import division
def average_score(scores):
'''
統計平均分
'''
score_values=scores.values()
sum_scores=sum(score_values)
average=sum_scores/len(score_values)
return average
def sorted_score(scores):
'''
對成績從高到低排序
'''
score_lst=[(scores[k], k) for k in scores]
sort_lst=sorted(score_lst, reverse=True)
return [(i[1], i[0]) for i in sort_lst]
def max_score(scores):
'''
成績最高的姓名和分數
'''
lst=sorted_score(scores)
max_score=lst[0][1]
return [(i[1], i[0]) for i in lst if i[1]==max_score]
def min_score(scores):
'''
成績最低的姓名和分數
'''
lst=sorted_score(scores)
min_score=lst[len(lst)-1][1]
return [(i[1], i[0]) for i in lst if i[1]==min_score]
if __name__=="__main__":
examine_scores={"google":98, "facebook":99, "baidu":52, "alibaba":80,
"yahoo":49, "IBM":70, "amazon":99, "apple":99}
ave=average_score(examine_scores)
print "the average score is: ", ave
sor=sorted_score(examine_scores)
print "list of the scores: ", sor
xueba =max_score(examine_scores)
print "Xueba is : ", xueba
xuezha=min_score(examine_scores)
print "Xuezha is: ", xuezha
四、找素數
# 找素數
import math
def is_prime(n):
'''
判斷一個數是否是素數
'''
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)+1)):
if n%i ==0:
return False
return True
if __name__=="__main__":
primes= [i for i in range(2, 100) if is_prime(i)]
print primes
注意當自己寫函式時,需要注意的幾點:
1、儘量不要使用全域性變數
2、引數是可變型別的資料,在函式中千萬不要輕易修改它
3、每個函式的目標和功能都要很單純,不要試圖一個函式做很多事情
4、函式的程式碼函式要少
5、函式的獨立性要好
相關文章
- (譯) 函式式 JS #2: 函式!函式JS
- 【函式】oracle nvl2 函式函式Oracle
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- 函式式JavaScript(2):如何打造“函式式”程式語言?函式JavaScript
- oracle日期函式(2)Oracle函式
- Oracle分析函式-2Oracle函式
- Sql Server函式全解(2):數學函式SQLServer函式
- PHP 每日一函式 — 字串函式 bin2hex ()PHP函式字串
- DB2函式大全DB2函式
- 函式組:SHL2函式
- 測開之函式進階· 第2篇《純函式》函式
- 字串函式 hex2bin ()字串函式
- 字串函式 nl2br ()字串函式
- 每日五個 PHP 函式(2)PHP函式
- Python atan2() 函式Python函式
- Python(2):建立函式模組Python函式
- 3-python 元組 字典 集合的操作Python
- 2. PHP 函式學習 stripos ()PHP函式
- python基礎7 - 函式2Python函式
- 將函式儲存在模組中(2)函式
- SYS_OP_C2C 函式,函式
- SQL入門之3 函式2SQL函式
- SQL入門之2 函式1SQL函式
- ORACLE中的單行函式 (2)Oracle函式
- XSL函式介紹(2)(轉)函式
- 函數語言程式設計(2) 高階函式函數程式設計函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- 【函式式 Swift】函式式思想函式Swift
- 14-2 雜湊函式設計函式
- 第2章 編寫測試函式函式
- SNN 核函式的2種形狀函式
- Oracle-nvl和nvl2函式Oracle函式
- WINDOWS未公開函式揭密(2) (轉)Windows函式
- DB2 時間函式小結 .DB2函式
- GaussDB: db2->gaussdb 函式轉換DB2函式
- Python2 input函式漏洞利用Python函式
- Python函數語言程式設計指南(2):函式Python函數程式設計函式