zoukankan      html  css  js  c++  java
  • 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的第三个参数,初始值

  • 相关阅读:
    poj 2763 Housewife Wind
    hdu 3966 Aragorn's Story
    poj 1655 Balancing Act 求树的重心
    有上下界的网络流问题
    URAL 1277 Cops and Thieves 最小割 无向图点带权点连通度
    ZOJ 2532 Internship 网络流求关键边
    ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
    SGU 438 The Glorious Karlutka River =) 拆点+动态流+最大流
    怎么样仿写已知网址的网页?
    5-10 公路村村通 (30分)
  • 原文地址:https://www.cnblogs.com/lihuafeng/p/14741796.html
Copyright © 2011-2022 走看看