python函数包括闭包

二、 函数的定义和使用
                                                |

| 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)

reduce的第一个参数,函数必须要有两个参数

reduce的第二个参数,要循环的序列

reduce的第三个参数,初始值

原文地址:https://www.cnblogs.com/lihuafeng/p/14741796.html