国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Python基礎之【第三篇】

2019-11-14 16:54:44
字體:
供稿:網(wǎng)友

def 函數(shù)名(參數(shù)):      ...    函數(shù)體    ...

函數(shù)的定義主要有如下要點:

  • def:表示函數(shù)的關鍵字
  • 函數(shù)名:函數(shù)的名稱,日后根據(jù)函數(shù)名調(diào)用函數(shù)
  • 函數(shù)體:函數(shù)中進行一系列的邏輯計算,如:發(fā)送郵件、計算出 [11,22,38,888,2]中的最大數(shù)等...
  • 參數(shù):為函數(shù)體提供數(shù)據(jù)
  • 返回值:當函數(shù)執(zhí)行完畢后,可以給調(diào)用者返回數(shù)據(jù)。

以上要點中,比較重要有參數(shù)和返回值:

和其他高級語言區(qū)別:
1.聲明函數(shù)名尾部要有冒號.
2.它不需要用花括號將語句塊括起來,用TAB鍵縮進.

函數(shù)式編程最重要的是增強代碼的重用性和可讀性

實例:

def test_a():        PRint 'hello world'        print 'www.jeapedu.com'def test_b(varl,var2):   #函數(shù)定義,形參,提供給使用者一個接口.        print val1,        print val2,print 'Entry programme'test_a()test_b(12,13)       #函數(shù)調(diào)用,實參.print 'leave programme'

1、返回值

函數(shù)是一個功能塊,該功能到底執(zhí)行成功與否,需要通過返回值來告知調(diào)用者。

def 發(fā)送短信():         發(fā)送短信的代碼...     if 發(fā)送成功:        return True    else:        return Falsewhile True:         # 每次執(zhí)行發(fā)送短信函數(shù),都會將返回值自動賦值給result    # 之后,可以根據(jù)result來寫日志,或重發(fā)等操作     result = 發(fā)送短信()    if result == False:        記錄日志,短信發(fā)送失敗...

2、參數(shù)

為什么要有參數(shù)?看下下面的例子:

如果不定義參數(shù),用函數(shù)的話:(每個有相同功能的都寫個函數(shù),說好的代碼簡化呢?)

def CPU報警郵件()    #發(fā)送郵件提醒    連接郵箱服務器    發(fā)送郵件    關閉連接def 硬盤報警郵件()    #發(fā)送郵件提醒    連接郵箱服務器    發(fā)送郵件    關閉連接def 內(nèi)存報警郵件()    #發(fā)送郵件提醒    連接郵箱服務器    發(fā)送郵件    關閉連接 while True:     if cpu利用率 > 90%:        CPU報警郵件()     if 硬盤使用空間 > 90%:        硬盤報警郵件()     if 內(nèi)存占用 > 80%:        內(nèi)存報警郵件()

函數(shù)有三中不同的參數(shù):

  • 普通參數(shù)
  • 默認參數(shù)
  • 動態(tài)參數(shù)
  • 1,接收多個參數(shù)
    2,內(nèi)部自動構造元組
    3,序列,*,避免內(nèi)部構造元組

  •  1 >>> li = (1,2,3,4,5,66,'alex') 2 >>>  3 >>> def func(*args): 4 ...     print args 5 ...  6 >>> func(li) 7 ((1, 2, 3, 4, 5, 66, 'alex'),) 8 >>> func(*li) 9 (1, 2, 3, 4, 5, 66, 'alex')10 >>> li = [1,2,3,4,5,66,'alex']11 >>> def func(*args):12 ...     print args13 ...     print args[0]                通過下標獲取元素14 >>> func(li)15 ([1, 2, 3, 4, 5, 66, 'alex'],)16 >>> func(*li)17 (1, 2, 3, 4, 5, 66, 'alex')18 >>> 

如果一個函數(shù)定義中的最后一個形參有 ** (雙星號)前綴,所有正常形參之外的其他的關鍵字參數(shù)都將被放置在一個字典中傳遞給函數(shù),比如:

 1 def contacs(a,**b): 2     print "a is: %s" %a  3     for i in b: 4         print i + ":" + str(b[i]) 5  6 contacs(100, saneri=1234567890,rain=007)      #調(diào)用 7  8 a is: 100                                       #執(zhí)行結果 9 saneri:123456789010 rain:7        

擴展:發(fā)送郵件實例

import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrdef email(message):    msg = MIMEText("郵件報警測試", 'plain', 'utf-8')    msg['From'] = formataddr(["saneri",'saneri@126.com']) #發(fā)件人和發(fā)件郵箱    msg['To'] = formataddr(["收件人",'838118461@QQ.com'])    msg['Subject'] = message                   #這里我調(diào)用了參數(shù)    server = smtplib.SMTP("smtp..com", 25)    server.login("saneri@126.com", "密碼")    server.sendmail('shuaige@126.com', ['451161316@qq.com',], msg.as_string())    server.quit()if __name__ == u'__main__':    cpu = 100    disk = 500    ram = 50    for i in range(1):        if cpu > 90:            alert = u'CPU出問題了'   #這里設置了一個變量            email(alert)  #這里調(diào)用函數(shù)的時候引用了上面的變量,當執(zhí)行函數(shù)的時候形參講會被替換掉,message='CPU出問題了'  發(fā)送郵件!        if disk > 90:            alert = u'硬盤出問題了'            email(alert)        if ram> 80:            alert = u'內(nèi)存出問題了'            email(alert)

--------------------------------------------------------------------------------------------------

如果執(zhí)行python test.py 等同于 __name__ == '__mail__'

被執(zhí)行的腳步,__name_'值 ==__mail__

條件運算時,對于簡單的 if else 語句,可以使用三元運算來表示,即:

 1 # 普通條件語句 2  3 if 1 == 1: 4  5     name = 'wusiri' 6  7 else: 8  9     name = 'asir'10 13 # 三元運算14 15 name = 'wusiri' if 1 == 1 else 'asir'

對于簡單的函數(shù),也存在一種簡便的表示方式,即:lambda表達式

 1 # ###################### 普通函數(shù) ###################### 2  3 # 定義函數(shù)(普通方式) 4  5 def fun(arg): 6  7     return arg + 1 8  9 # 執(zhí)行函數(shù)10 11 result = fun(123)12 13 # ###################### lambda ######################14  17 # 定義函數(shù)(lambda表達式)18 19 my_lambda = lambda arg : arg + 1 22 23 # 執(zhí)行函數(shù)24 25 result = my_lambda(123)

#lambda存在意義就是對簡單函數(shù)的簡潔表示:

一、map

遍歷序列,對序列中每個元素進行操作,最終獲取新的序列。

map()函數(shù)接收兩個參數(shù),一個是函數(shù),一個是序列,map將傳入的函數(shù)依次作用到序列的每個元素,并把結果作為新的list返回。

>>> def f(x):...   return x * x...>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])[1, 4, 9, 16, 25, 36, 49, 64, 81]#map()傳入的第一個參數(shù)是f,即函數(shù)對象本身。
 1 #每個元素增加100 2  3 li = [11, 22, 33] 4  5 new_list = map(lambda a: a + 100, li) 6  7  8 #兩個列表對應元素相加 9 10 li = [11, 22, 33]11 sl = [1, 2, 3]12 new_list = map(lambda a, b: a + b, li, sl)

k1 = [11,20,23] 
k2 = [2,5,8]
def func4(a1,a2):
return a1 + a2

print map(func4,k1,k2)

 

二、filter

對序列中的元素依次進行篩選,將執(zhí)行結果為True的元素組成一個序列(List/String/Tuple)(取決于序列的類型)返回:

1 li = [11, 22, 33]2 3 new_list = filter(lambda arg: arg > 22, li)4 5 #filter第一個參數(shù)為空,將獲取原來序列
1 def f(x):2   return x != 'a' 3 4 filter(f, "abcdef") 5 'bcdef'

三、reduce

對于序列內(nèi)所有元素進行累計操作:

 1 def add(x,y):  2     return x + y  3  4  5 reduce(add, range(1, 11))  6 值: 7 55 (注:1+2+3+4+5+6+7+8+9+10 8  9 reduce(add, range(1, 11), 20) 10 值為:11 12 75 (注:1+2+3+4+5+6+7+8+9+10+20)

li = [1,2,3,4,5,6,7,8,9]  
print reduce(lambda arg1,arg2:arg1*arg2,li) //對li中的元素進行壘乘計算
362880
li = [1,2,3,4,5,6,7,8,9]
print reduce(lambda arg1,arg2:arg1*arg2,li,100) #100為基數(shù),再100的基礎上進行加減乘除.
# reduce的第一個參數(shù),函數(shù)必須要有兩個參數(shù)# reduce的第二個參數(shù),要循環(huán)的序列# reduce的第三個參數(shù),初始值

1、對比range 和 xrange 的區(qū)別:

1 >>> print range(10)2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]3 >>> print xrange(10)4 xrange(10)

如上代碼所示,range會在內(nèi)存中創(chuàng)建所有指定的數(shù)字,而xrange不會立即創(chuàng)建,只有在迭代循環(huán)時,才去創(chuàng)建每個數(shù)組。

 1 def funt(): 2     yield 1 3     yield 2 4     yield 3 5  6 for i in funt(): 7     print i 8 ################################## 9 10 def mrange(arg):11     seed = 012     while True:13         seed += 114         if seed > 10:15             return16         else:17             yield seed18 19 for i in mrange(10):20     print i

2、文件操作的 read 和 xreadlinex 的的區(qū)別:

read會讀取所有內(nèi)容到內(nèi)存

xreadlines則只有在循環(huán)迭代時才獲取
 1 基于seek和tell自定義生成器NReadlines: 2  3 def NReadlines(): 4     with open('log','r') as f: 5         seek = 0 6         while True: 7             f.seek(seek) 8             data = f.readline() 9             if data:10                 seek = f.tell()11                 yield data12             else:13                 return14 15 for item in NReadlines():16     print item

裝飾器是函數(shù),只不過該函數(shù)可以具有特殊的含義,裝飾器用來裝飾函數(shù)或類,使用裝飾器可以在函數(shù)執(zhí)行前和執(zhí)行后添加相應操作。

使用裝飾函數(shù)在函數(shù)執(zhí)行前和執(zhí)行后分別附加額外功能: 1 #使用裝飾函數(shù)在函數(shù)執(zhí)行前和執(zhí)行后分別附加額外功能 2 #裝飾函數(shù)的參數(shù)是被裝飾的函數(shù)的對象,返回原函數(shù)對象

 3  下例為替換函數(shù)(裝飾): 4  5 def deco(func):                              #裝飾函數(shù) 6     print "before myfunc() called" 7     func() 8     print "after myfunc() called." 9     return func10 11 def myfunc():                                #被裝飾函數(shù)12     print "myfunc() called."13 14 #myfunc = deco(myfunc)
  #myfunc()
  #myfunc()
15 result = deco(myfunc)16 result()17 result()

使用語法糖@來裝飾函數(shù):

 1 使用語法糖@來裝飾函數(shù),相當于上例中 “myfunc= deco(myfunc)” 2  3 def deco(func): 4     print("before myfunc() called.") 5     func() 6     print("  after myfunc() called.") 7     return func 8   9 @deco10 def myfunc():11     print(" myfunc() called.")12  13 myfunc()14 myfunc()

return 語句用來從函數(shù)中return(返回),也就是說跳出函數(shù)。同樣,我們也可以從函數(shù)中選擇性地返回一個值。

1 def maximum(x, y):2     if x > y:3         return x4     elif x == y:5         return '兩個數(shù)相等'6     else:7         return y8 9 print(maximum(2, 3))

輸出:
3

冒泡算法:將需要排序的元素看作是一個個“氣泡”,最小的“氣泡”最先浮出水面,排在最前面。從小到大依次排列。

實例:

 1 需求:請按照從小到大對列表 [13, 22, 6, 99, 11] 進行排序 2  3 思路:相鄰兩個值進行比較,將較大的值放在右側(cè),依次比較! 4  5 li = [13, 22, 6, 99, 11] 6  7 for m in range(len(li)-1): 8  9     for n in range(m+1, len(li)):10 11         if li[m] > li[n]:12             temp = li[n]13 14             li[n] = li[m]15             li[m] = temp16 print li

實例2:

 1 def popo(numbers): 2     for x in xrange(len(numbers)-1, -1, -1): 3         for i in xrange(x): 4             if numbers[i] > numbers[i+1]: 5                 numbers[i], numbers[i+1] = numbers[i+1], numbers[i]     # 交換數(shù)據(jù) 6                 print numbers 7  8 def main(): 9     numbers = [23, 12, 9, 15, 6]10     popo(numbers)11 12 if __name__ == '__main__':13     main()
 1 #將a和b的值互換位置,使a =123 ,b =abc: 2 a = "abc" 3 b = 123 4  5 temp = a        #定義中間變量temp 6 a= b 7 b = temp 8 print "a = %s" %a ,"/n" "b = %s" %b, 9 10 打印輸出:11 12 a = 123 13 b = abc

遞歸:

規(guī)律:除過第一個和第二個數(shù)外,前兩個數(shù)相加都是第三個數(shù)的值?。?!

斐波那契數(shù)列指的是這樣一個數(shù)列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657

1 def func(arg1,arg2):2     if arg1 == 0:               #如果arg1等于0
3 print arg1, arg2 #打印出arg1,arg24 arg3 = arg1 + arg25 print arg36 func(arg2, arg3) #將func(arg2,arg3)的值給func(arg1,arg2)再執(zhí)行
7 8 func(0,1)

 遞歸:

 1 def func(arg1,arg2): 2     if arg1 == 0:                        3         print arg1, arg2                 4     arg3 = arg1 + arg2 5     #print arg3 6     if arg3 > 1000: 7  8         return arg3 9     return func(arg2, arg3)            #將func(arg2,arg3)的值給func(arg1,arg2)再執(zhí)行10 11 #func(0,1)12 result = func(0,1)13 print result

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 论坛| 隆德县| 蕉岭县| 靖江市| 温宿县| 梨树县| 龙胜| 卢氏县| 惠来县| 通化市| 黄骅市| 连平县| 万宁市| 馆陶县| 房产| 盐山县| 甘肃省| 呼图壁县| 兖州市| 兴宁市| 富川| 鄂伦春自治旗| 玛多县| 天镇县| 金塔县| 桐庐县| 邵阳县| 华池县| 德昌县| 武冈市| 肇源县| 北海市| 北流市| 靖安县| 湘乡市| 奉新县| 新余市| 西畴县| 玛曲县| 荃湾区| 岳阳县|