天天看點

Python程式設計之--------函數

一、函數式程式設計之發送郵件

<code>#!/usr/bin/env python</code>

<code># -*- coding:utf-8 -*-</code>

<code>import</code> <code>smtplib</code>

<code>from</code> <code>email.mime.text </code><code>import</code> <code>MIMEText</code>

<code>from</code> <code>email.utils </code><code>import</code> <code>formataddr</code>

<code>def</code> <code>mails():</code>

<code>    </code><code>msg </code><code>=</code> <code>MIMEText(</code><code>'郵件内容'</code><code>, </code><code>'plain'</code><code>, </code><code>'utf-8'</code><code>)</code>

<code>    </code><code>msg[</code><code>'From'</code><code>] </code><code>=</code> <code>formataddr([</code><code>"Python愛好者"</code><code>,</code><code>'[email protected]'</code><code>])</code>

<code>    </code><code>msg[</code><code>'To'</code><code>] </code><code>=</code> <code>formataddr([</code><code>"來自Python官網"</code><code>,</code><code>'[email protected]'</code><code>])</code>

<code>    </code><code>msg[</code><code>'Subject'</code><code>] </code><code>=</code> <code>"主題"</code>

<code>    </code><code>server </code><code>=</code> <code>smtplib.SMTP(</code><code>"smtp.126.com"</code><code>, </code><code>25</code><code>)</code>

<code>    </code><code>server.login(</code><code>"[email protected]"</code><code>,</code><code>"密碼"</code><code>)</code>

<code>    </code><code>server.sendmail(</code><code>'[email protected]'</code><code>, [</code><code>'[email protected]'</code><code>,], msg.as_string())</code>

<code>    </code><code>server.quit()</code>

<code>mails()</code>

函數的相關知識點:

1、def定義函數的關鍵字

2、函數名,後面通過函數名調用該函數

3、函數聲明,不自動執行;調用後才執行

4、函數的參數

5、函數的傳回值

一、函數的傳回值:

     1、如果函數體中沒有定義傳回值動作語句,那麼函數預設傳回的結果為none

     2、如果有傳回值可以将傳回值指派給某個變量

二、函數之普通參數

參數:

    普通參數

    預設參數

    動态參數

普通參數:形式參數(形參)和實際參數(實參)

#形式參數(形參)

#實際參數(實參)

參數可以有N個,并且傳入指定個數的參數

有如下函數email,其中括号中的message為形式參數,形式參數可以随便定義,而調用函數的時候傳入的參數為實際參數,即實參(email("CPU報警"))

<code>def</code> <code>email(message):    msg </code><code>=</code> <code>MIMEText(</code><code>'message'</code><code>, </code><code>'plain'</code><code>, </code><code>'utf-8'</code><code>)    msg[</code><code>'From'</code><code>] </code><code>=</code> <code>formataddr([</code><code>"python愛好者"</code><code>,</code><code>'[email protected]'</code><code>])    msg[</code><code>'To'</code><code>] </code><code>=</code> <code>formataddr([</code><code>"走人"</code><code>,</code><code>'[email protected]'</code><code>])    msg[</code><code>'Subject'</code><code>] </code><code>=</code> <code>"主題"</code>    <code>server </code><code>=</code> <code>smtplib.SMTP(</code><code>"smtp.qq.com"</code><code>, </code><code>25</code><code>)    server.login(</code><code>"[email protected]"</code><code>,</code><code>"roots@123"</code><code>)    server.sendmail(</code><code>'[email protected]'</code><code>, [</code><code>'[email protected]'</code><code>,], msg.as_string())    server.quit()</code>

<code>email(</code><code>"CPU報警"</code>

)

三、函數之預設參數

1、不傳值則用預設值

2、預設參數必須放在參數清單的最後

3、預設參數也可以有多個

示例:

<code>def</code> <code>email(message,subject</code><code>=</code><code>"監控報警系統"</code><code>):    msg </code><code>=</code> <code>MIMEText(</code><code>'message'</code><code>, </code><code>'plain'</code><code>, </code><code>'utf-8'</code><code>)    msg[</code><code>'From'</code><code>] </code><code>=</code> <code>formataddr([</code><code>"python愛好者"</code><code>,</code><code>'[email protected]'</code><code>])    msg[</code><code>'To'</code><code>] </code><code>=</code> <code>formataddr([</code><code>"走人"</code><code>,</code><code>'[email protected]'</code><code>])    msg[</code><code>'Subject'</code><code>] </code><code>=</code> <code>"主題"</code>    <code>server </code><code>=</code> <code>smtplib.SMTP(</code><code>"smtp.qq.com"</code><code>, </code><code>25</code><code>)    server.login(</code><code>"[email protected]"</code><code>,</code><code>"roots@123"</code><code>)    server.sendmail(</code><code>'[email protected]'</code><code>, [</code><code>'[email protected]'</code><code>,], msg.as_string())    server.quit()</code>

<code>email(</code><code>"CPU報警"</code><code>,subject</code><code>=</code><code>"監控報警系統"</code><code>)</code>

<code>email(</code><code>"硬碟報警"</code><code>,subject</code><code>=</code><code>"生産業務系統"</code><code>)</code>

<code>email(</code><code>"CPU報警"</code><code>)</code>

以上函數email(message,subject="監控報警系統")參數中subject="監控報警系統"為預設參數,在調用時,放在最後,預設參數放在最後,即email("CPU報警",subject="監控報警系統");也可以初始化預設參數:email("硬碟報警",subject="生産業務系統"),此時原來函數中定義的subject的值将被"生産業務系統"覆寫;調用函數時預設參數也可以不用傳值:email("CPU報警")

四、動态參數(一)(傳入單值構造成元組)

<code>def</code> <code>func(</code><code>*</code><code>args):</code>

<code>       </code><code>pass</code>

1、接收多個參數

2、内部自動構造元組

3、如果穿的序列,在序列前加星号(*),可以避免再構造元組,即穿進去是什麼,就輸出什麼

示例代碼如下:

<code>li_list </code><code>=</code> <code>[</code><code>11</code><code>,</code><code>22</code><code>,</code><code>33</code><code>,</code><code>44</code><code>,</code><code>55</code><code>]</code>

<code>li_tuple </code><code>=</code> <code>(</code><code>'a'</code><code>,</code><code>'b'</code><code>,</code><code>'c'</code><code>,</code><code>'d'</code><code>)</code>

<code>     </code><code>print</code> <code>args</code>

<code>     </code><code>print</code> <code>"########這裡是分割線#####"</code>

<code>func(</code><code>123</code><code>)</code>

<code>func(</code><code>"abdcdefg"</code><code>)</code>

<code>func(li_list)</code>

<code>func(li_tuple)</code>

<code>func(</code><code>*</code><code>li_list)</code>

<code>func(</code><code>*</code><code>li_tuple)</code>

輸出結果:

<code>(</code><code>123</code><code>,)</code>

<code>########這裡是分割線#####</code>

<code>(</code><code>'abdcdefg'</code><code>,)</code>

<code>([</code><code>11</code><code>, </code><code>22</code><code>, </code><code>33</code><code>, </code><code>44</code><code>, </code><code>55</code><code>],)</code>

<code>((</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>),)</code>

<code>(</code><code>11</code><code>, </code><code>22</code><code>, </code><code>33</code><code>, </code><code>44</code><code>, </code><code>55</code><code>)</code>

<code>(</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>, </code><code>'d'</code><code>)</code>

如果要擷取傳入參數的值,可以通過參數下标來擷取:

<code>     </code> 

<code>     </code><code>print</code> <code>args[</code><code>0</code><code>]</code>

<code>123</code>

<code>abdcdefg</code>

<code>[</code><code>11</code><code>, </code><code>22</code><code>, </code><code>33</code><code>, </code><code>44</code><code>, </code><code>55</code><code>]</code>

<code>11</code>

<code>a</code>

四、動态參數(二)(傳入的參數為字典的資料結構)

<code>dic </code><code>=</code><code>{</code><code>'k1'</code><code>:</code><code>123</code><code>,</code><code>'k2'</code><code>:</code><code>321</code><code>,</code><code>'k3'</code><code>:</code><code>431</code><code>}</code>

<code>def</code> <code>func(</code><code>*</code><code>*</code><code>kargs):   </code>

<code>     </code><code>print</code> <code>kargs    </code>

<code>     </code><code>print</code> <code>"######這裡是分割線######"</code> 

<code>func(k1</code><code>=</code><code>123</code><code>)</code>

<code>func(k2</code><code>=</code><code>321</code><code>)</code>

<code>func(</code><code>*</code><code>*</code><code>dic)</code>

<code>{</code><code>'k1'</code><code>: </code><code>123</code><code>}</code>

<code>######這裡是分割線######</code>

<code>{</code><code>'k2'</code><code>: </code><code>321</code><code>}</code>

<code>{</code><code>'k3'</code><code>: </code><code>431</code><code>, </code><code>'k2'</code><code>: </code><code>321</code><code>, </code><code>'k1'</code><code>: </code><code>123</code><code>}</code>

五、動态函數(三)(同時傳入單值和雙值,分别構造成元組和字典)

<code>def</code> <code>func(</code><code>*</code><code>args,</code><code>*</code><code>*</code><code>kwargs):</code>

<code>    </code><code>print</code> <code>args</code>

<code>    </code><code>print</code> <code>kwargs</code>

<code>    </code><code>print</code> <code>"#########這裡是分割線#########"</code>

<code>func(</code><code>11</code><code>,</code><code>22</code><code>,</code><code>33</code><code>)</code>

<code>func(k1</code><code>=</code><code>123</code><code>,k2</code><code>=</code><code>999</code><code>)</code>

<code>func(</code><code>11</code><code>,</code><code>22</code><code>,</code><code>33</code><code>,k1</code><code>=</code><code>123</code><code>,k2</code><code>=</code><code>999</code><code>)</code>

<code>(</code><code>11</code><code>, </code><code>22</code><code>, </code><code>33</code><code>)</code>

<code>{}</code>

<code>#########這裡是分割線#########</code>

<code>()</code>

<code>{</code><code>'k2'</code><code>: </code><code>999</code><code>, </code><code>'k1'</code><code>: </code><code>123</code><code>}</code>

<code></code>

      本文轉自027ryan  51CTO部落格,原文連結:http://blog.51cto.com/ucode/1718692,如需轉載請自行聯系原作者