二、 函数的定义和使用 |
---|
|
| def 函数名(参数): |
| |
| ... |
| 函数体 |
| ... |
| 函数的定义主要有如下要点: |
| |
| def:表示函数的关键字 |
| 函数名:函数的名称,日后根据函数名调用函数 |
| 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等... |
| 参数:为函数体提供数据 |
| 返回值:当函数执行完毕后,可以给调用者返回数据。 |
| 以上要点中,比较重要有参数和返回值: |
| |
| 1、返回值 |
| |
| 函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
def 发送短信():
发送短信的代码...
if 发送成功:
return True
else:
return False
while True:
# 每次执行发送短信函数,都会将返回值自动赋值给result
# 之后,可以根据result来写日志,或重发等操作
result = 发送短信()
if result == False:
记录日志,短信发送失败...
2、参数
为什么要有参数?
def CPU报警邮件()
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
def 硬盘报警邮件()
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
def 内存报警邮件()
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
while True:
if cpu利用率 > 90%:
CPU报警邮件()
if 硬盘使用空间 > 90%:
硬盘报警邮件()
if 内存占用 > 80%:
内存报警邮件()
上例,无参数实现
def 发送邮件(邮件内容)
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
while True:
if cpu利用率 > 90%:
发送邮件("CPU报警了。")
if 硬盘使用空间 > 90%:
发送邮件("硬盘报警了。")
if 内存占用 > 80%:
发送邮件("内存报警了。")
上列,有参数实现
函数的有三中不同的参数:
普通参数
默认参数
动态参数
######### 定义函数
name 叫做函数func的形式参数,简称:形参
def func(name):
print name
######### 执行函数
'wupeiqi' 叫做函数func的实际参数,简称:实参
func('wupeiqi')
普通参数
def func(name, age = 18):
print "%s:%s" %(name,age)
指定参数
func('wupeiqi', 19)
使用默认参数
func('alex')
注:默认参数需要放在参数列表最后
默认参数
def func(*args):
print args
执行方式一
func(11,33,4,4454,5)
执行方式二
li = [11,2,2,3,3,4,54]
func(*li)
动态参数一
def func(**kwargs):
print args
执行方式一
func(name='wupeiqi',age=18)
执行方式二
li = {'name':'wupeiqi', age:18, 'gender':'male'}
func(**li)
动态参数二
def func(*args, **kwargs):
print args
print kwargs
发邮件实例
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
msg = MIMEText('邮件内容', 'plain', 'utf-8')
msg['From'] = formataddr(["武沛齐",'wptawy@126.com'])
msg['To'] = formataddr(["走人",'424662508@qq.com'])
msg['Subject'] = "主题"
server = smtplib.SMTP("smtp.126.com", 25)
server.login("wptawy@126.com", "邮箱密码")
server.sendmail('wptawy@126.com', ['424662508@qq.com',], msg.as_string())
server.quit()
|#!/usr/bin/env python
coding: utf-8 -*-
1.内部函数引用外部变量 2.外部函数返回内部函数名
from functools import reduce
def foo():
num =1
def add(n):
res = n+num
return res
return add
result = foo()
print(result)
def add_1(num):
res = num +1
return res
print(add_1(123))
上边代码等同于
lambda_1 = lambda num1:num1+1
print(lambda_1(123))
map函数
list1 = [1,2,3,4,5]
list2 = [2,3,5,67]
ret = map(lambda a:a+1,list1)#ret是一个迭代器
new_list = map(lambda a,b:a+b,list1,list2)
for item1 in new_list:
print(item1)
print(''12)
for item in ret:
print(item)
filter
print('filter')
new_ls = filter(lambda a:a>2,list1)
for item2 in new_ls:
print(item2)
获取序列所有元素的和
li = [11, 22, 33]
result = reduce(lambda arg1, arg2: arg1 + arg2, li)
print(result)