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的第三个参数,初始值

  • 相关阅读:
    算法题:N皇后-2
    算法题:串联所有单词的子串
    算法题:二叉树的垂序遍历
    算法题:只出现一次的数字 三
    算法题:等价多米诺骨牌对的数量
    算法:判定字符是否唯一
    算法题:字符串相乘
    算法题:字符串的排列
    算法题:单词规律
    算法题:连通网络的操作次数
  • 原文地址:https://www.cnblogs.com/lihuafeng/p/14741796.html
Copyright © 2011-2022 走看看