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

  • 相关阅读:
    WPF 使用 Direct2D1 画图 绘制基本图形
    WPF 使用 Direct2D1 画图 绘制基本图形
    dot net core 使用 IPC 进程通信
    dot net core 使用 IPC 进程通信
    win2d 图片水印
    win2d 图片水印
    Java实现 LeetCode 240 搜索二维矩阵 II(二)
    PHP closedir() 函数
    PHP chroot() 函数
    PHP chdir() 函数
  • 原文地址:https://www.cnblogs.com/lihuafeng/p/14741796.html
Copyright © 2011-2022 走看看