一、函數式程式設計之發送郵件
<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,如需轉載請自行聯系原作者