博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python编程之--------函数
阅读量:6091 次
发布时间:2019-06-20

本文共 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
}
#########这里是分割线#########
      本文转自027ryan  51CTO博客,原文链接:http://blog.51cto.com/ucode/1718692
,如需转载请自行联系原作者
你可能感兴趣的文章
expr命令用法-实例讲解
查看>>
酷派8705救砖
查看>>
iOS10里的通知与推送
查看>>
# C 语言编写二进制/十六进制编辑器
查看>>
EMS SQL Management Studio for MySQL
查看>>
我的友情链接
查看>>
做母亲不容易
查看>>
详细的文档(吐槽)
查看>>
DEVEXPRESS 随记
查看>>
Ember.js 入门指南——{{action}} 助手
查看>>
VMware下安装QT Creator
查看>>
Linux时间同步设置
查看>>
Measure Graphics Performance
查看>>
RetrunMoreRow
查看>>
Redis学习笔记(3)-Hash
查看>>
Git使用的常用命令
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
多线程开发
查看>>
成功搞定一个通用的Extjs增删改查模块
查看>>
暴力屏蔽80访问失败的用户
查看>>