Python编程之--------函数


一、函数式编程之发送邮件
#!/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报警"))
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、默认参数也可以有多个
示例:
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报警")
 
 
四、动态参数(一)(传入单值构造成元组)
def func(*args):
       pass
1、接收多个参数
2、内部自动构造元组
3、如果穿的序列,在序列前加星号(*),可以避免再构造元组,即穿进去是什么,就输出什么
 
示例代码如下:
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)
 
输出结果:
 
(123,)
########这里是分割线#####
('abdcdefg',)
########这里是分割线#####
([11, 22, 33, 44, 55],)
########这里是分割线#####
(('a', 'b', 'c', 'd'),)
########这里是分割线#####
(11, 22, 33, 44, 55)
########这里是分割线#####
('a', 'b', 'c', 'd')
########这里是分割线#####
 
如果要获取传入参数的值,可以通过参数下标来获取:
示例代码如下:
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
########这里是分割线#####
 
四、动态参数(二)(传入的参数为字典的数据结构)
示例代码如下:
dic ={'k1':123,'k2':321,'k3':431}
def func(**kargs):
    print kargs
    print "######这里是分割线######"
 
func(k1=123)
func(k2=321)
func(**dic)
 
输出结果:
{'k1': 123}
######这里是分割线######
{'k2': 321}
######这里是分割线######
{'k3': 431, 'k2': 321, 'k1': 123}
######这里是分割线######
 
五、动态函数(三)(同时传入单值和双值,分别构造成元组和字典)
 
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)
 
输出结果:
(11, 22, 33)
{}
#########这里是分割线#########
()
{'k2': 999, 'k1': 123}
#########这里是分割线#########
(11, 22, 33)
{'k2': 999, 'k1': 123}
#########这里是分割线#########
 

评论关闭