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爱好者",'[email protected]'])
    msg['To'] = formataddr(["来自Python官网",'[email protected]'])
    msg['Subject'] = "主题"
    server = smtplib.SMTP("smtp.126.com", 25)
    server.login("[email protected]","密码")
    server.sendmail('[email protected]', ['[email protected]',], 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爱好者",'[email protected]'])    msg['To'] = formataddr(["走人",'[email protected]'])    msg['Subject'] = "主题"    server = smtplib.SMTP("smtp.qq.com", 25)    server.login("[email protected]","roots@123")    server.sendmail('[email protected]', ['[email protected]',], msg.as_string())    server.quit()
email("CPU报警"

)


三、函数之默认参数

1、不传值则用默认值

2、默认参数必须放在参数列表的最后

3、默认参数也可以有多个

示例:

def email(message,subject="监控报警系统"):    msg = MIMEText('message', 'plain', 'utf-8')    msg['From'] = formataddr(["python爱好者",'[email protected]'])    msg['To'] = formataddr(["走人",'[email protected]'])    msg['Subject'] = "主题"    server = smtplib.SMTP("smtp.qq.com", 25)    server.login("[email protected]","roots@123")    server.sendmail('[email protected]', ['[email protected]',], 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}
#########这里是分割线#########


你可能感兴趣的:(python,import)