本文共 4149 字,大约阅读时间需要 13 分钟。
一、函数式编程之发送邮件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/usr/bin/env python # -*- coding:utf-8 -*- import smtplib from email.mime.text import MIMEText from email.utils import formataddr def mails(): msg = MIMEText( '邮件内容' , 'plain' , 'utf-8' ) msg[ 'From' ] = formataddr([ "Python爱好者" , 'zypython@126.com' ]) msg[ 'To' ] = formataddr([ "来自Python官网" , '6666633xxx@qq.com' ]) msg[ 'Subject' ] = "主题" server = smtplib.SMTP( "smtp.126.com" , 25 ) server.login( "zypython@126.com" , "密码" ) server.sendmail( 'zypython@126.com' , [ '6666633xxx@qq.com' ,], msg.as_string()) server.quit() mails() |
函数的相关知识点:
1、def定义函数的关键字
2、函数名,后面通过函数名调用该函数
3、函数声明,不自动执行;调用后才执行
4、函数的参数
5、函数的返回值
一、函数的返回值:
1、如果函数体中没有定义返回值动作语句,那么函数默认返回的结果为none
2、如果有返回值可以将返回值赋值给某个变量
二、函数之普通参数
参数:
普通参数
默认参数
动态参数
普通参数:形式参数(形参)和实际参数(实参)
#形式参数(形参)
#实际参数(实参)
参数可以有N个,并且传入指定个数的参数
有如下函数email,其中括号中的message为形式参数,形式参数可以随便定义,而调用函数的时候传入的参数为实际参数,即实参(email("CPU报警"))
1 2 | def email(message): msg = MIMEText( 'message' , 'plain' , 'utf-8' ) msg[ 'From' ] = formataddr([ "python爱好者" , 'zhangyun@opark.com' ]) msg[ 'To' ] = formataddr([ "走人" , '645580389@qq.com' ]) msg[ 'Subject' ] = "主题" server = smtplib.SMTP( "smtp.qq.com" , 25 ) server.login( "zhangyun@opark.com" , "roots@123" ) server.sendmail( 'zhangyun@opark.com' , [ '645580389@qq.com' ,], msg.as_string()) server.quit() email( "CPU报警" |
)
三、函数之默认参数
1、不传值则用默认值
2、默认参数必须放在参数列表的最后
3、默认参数也可以有多个
示例:
1 2 3 4 | def email(message,subject = "监控报警系统" ): msg = MIMEText( 'message' , 'plain' , 'utf-8' ) msg[ 'From' ] = formataddr([ "python爱好者" , 'zhangyun@opark.com' ]) msg[ 'To' ] = formataddr([ "走人" , '645580389@qq.com' ]) msg[ 'Subject' ] = "主题" server = smtplib.SMTP( "smtp.qq.com" , 25 ) server.login( "zhangyun@opark.com" , "roots@123" ) server.sendmail( 'zhangyun@opark.com' , [ '645580389@qq.com' ,], msg.as_string()) server.quit() email( "CPU报警" ,subject = "监控报警系统" ) email( "硬盘报警" ,subject = "生产业务系统" ) email( "CPU报警" ) |
以上函数email(message,subject="监控报警系统")参数中subject="监控报警系统"为默认参数,在调用时,放在最后,默认参数放在最后,即email("CPU报警",subject="监控报警系统");也可以初始化默认参数:email("硬盘报警",subject="生产业务系统"),此时原来函数中定义的subject的值将被"生产业务系统"覆盖;调用函数时默认参数也可以不用传值:email("CPU报警")
四、动态参数(一)(传入单值构造成元组)
1 2 | def func( * args): pass |
1、接收多个参数
2、内部自动构造元组
3、如果穿的序列,在序列前加星号(*),可以避免再构造元组,即穿进去是什么,就输出什么
示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 | li_list = [ 11 , 22 , 33 , 44 , 55 ] li_tuple = ( 'a' , 'b' , 'c' , 'd' ) def func( * args): print args print "########这里是分割线#####" func( 123 ) func( "abdcdefg" ) func(li_list) func(li_tuple) func( * li_list) func( * li_tuple) |
输出结果:
1 2 3 4 5 6 7 8 9 10 11 12 | ( 123 ,) ########这里是分割线##### ( 'abdcdefg' ,) ########这里是分割线##### ([ 11 , 22 , 33 , 44 , 55 ],) ########这里是分割线##### (( 'a' , 'b' , 'c' , 'd' ),) ########这里是分割线##### ( 11 , 22 , 33 , 44 , 55 ) ########这里是分割线##### ( 'a' , 'b' , 'c' , 'd' ) ########这里是分割线##### |
如果要获取传入参数的值,可以通过参数下标来获取:
示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | li_list = [ 11 , 22 , 33 , 44 , 55 ] li_tuple = ( 'a' , 'b' , 'c' , 'd' ) def func( * args): print args[ 0 ] print "########这里是分割线#####" func( 123 ) func( "abdcdefg" ) func(li_list) func(li_tuple) func( * li_list) func( * li_tuple) 123 ########这里是分割线##### abdcdefg ########这里是分割线##### [ 11 , 22 , 33 , 44 , 55 ] ########这里是分割线##### ( 'a' , 'b' , 'c' , 'd' ) ########这里是分割线##### 11 ########这里是分割线##### a ########这里是分割线##### |
四、动态参数(二)(传入的参数为字典的数据结构)
示例代码如下:
1 2 3 4 5 6 7 | dic = { 'k1' : 123 , 'k2' : 321 , 'k3' : 431 } def func( * * kargs): print kargs print "######这里是分割线######" func(k1 = 123 ) func(k2 = 321 ) func( * * dic) |
输出结果:
1 2 3 4 5 6 | { 'k1' : 123 } ######这里是分割线###### { 'k2' : 321 } ######这里是分割线###### { 'k3' : 431 , 'k2' : 321 , 'k1' : 123 } ######这里是分割线###### |
五、动态函数(三)(同时传入单值和双值,分别构造成元组和字典)
1 2 3 4 5 6 7 | def func( * args, * * kwargs): print args print kwargs print "#########这里是分割线#########" func( 11 , 22 , 33 ) func(k1 = 123 ,k2 = 999 ) func( 11 , 22 , 33 ,k1 = 123 ,k2 = 999 ) |
输出结果:
1 2 3 4 5 6 7 8 9 | ( 11 , 22 , 33 ) {} #########这里是分割线######### () { 'k2' : 999 , 'k1' : 123 } #########这里是分割线######### ( 11 , 22 , 33 ) { 'k2' : 999 , 'k1' : 123 } #########这里是分割线######### |