zoukankan      html  css  js  c++  java
  • python学习-函数和lambda表达式(五)

     5.1函数基本语法

    # 函数语法格式
    
    def 函数名(形参列表):
        """""函数的说明文档"
        //由零条或多条可执行语句组成的函数
        [return [返回值]]    
    
    详细说明:
    1.函数名建议由一个或多个有意义的单词连缀而成,每个单词的字母全部小写,单词间用_分隔
    对于返回多个值的情况:可将多个值包装成列表后返回,也可直接返回多个值(python会自动将多个返回值封装成元组)
    2.函数的返回值可以是一个值、多个值或者为表达式
    3.函数声明之后、函数体之前的部分,视为函数的说明文档,可通过函数名.__doc__查看
    函数定义
    def sum_and_avg(list):
        sum = 0
        count = 0
        for e in list:
            # 如果元素e是数值
            if isinstance(e, int) or isinstance(e, float):
                count += 1
                sum += e
        return sum, sum / count
    my_list = [20 , 15 , 2.8,'a', 35 , 5.9, -1.8]
    tp = sum_and_avg(my_list)
    print(tp) # 返回结果是元组
    s, avg = sum_and_avg(my_list) # 可以使用多个变量接受函数返回的多个值(序列解包)
    print(s)
    print(avg)
    输出结果:
    (76.9, 12.816666666666668)
    76.9
    12.816666666666668
    多个返回值

    5.2函数参数

    位置参数:根据位置传入参数

    关键字参数:根据参数名来传入参数

    def girth(width, height):
        print("", width)
        print("height:", height)
        return 2 * (width + height)
    
    print(girth(3.5, 4.8))  # 位置参数
    print(girth(width=3.5, height=4.8)) # 关键字参数
    print(girth(height=4.8, width=3.5)) # 关键字参数
    print(girth(3.5, height=4.8)) # 调用函数时混合使用关键字参数和位置参数,则关键字参数必须位于位置参数之后
    View Code

    参数默认值:

    """
    参数默认值:
    在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值-这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值
    """
    
    def say_hi(name='孙悟空', message="欢迎来到疯狂软件"):
        print(name, ",您好")
        print("消息是:", message)
    
    
    say_hi()  # 全部使用默认值
    say_hi("白骨精")
    say_hi("白骨精", "欢迎学习python")
    say_hi(message="欢迎学习python")
    say_hi('白骨精', message="欢迎学习python")  # 调用函数时关键字参数必须位于位置参数的后面
    
    输出结果:
    孙悟空 ,您好
    消息是: 欢迎来到疯狂软件
    白骨精 ,您好
    消息是: 欢迎来到疯狂软件
    白骨精 ,您好
    消息是: 欢迎学习python
    孙悟空 ,您好
    消息是: 欢迎学习python
    白骨精 ,您好
    消息是: 欢迎学习python
    View Code

    可变参数   *变量名 :可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

    """形参前加个*意味着该参数可以接收多个参数值,多个参数值被当作元组传入"""
    def test(*nums):
        for i in nums:
            print(i)
    
    
    aa = [1, 2]
    print('------')
    test(aa)  # 不加*的话会被当做一个参数
    print('------')
    test(*aa)
    print('------')
    test(3, 4)
    输出结果:
    ------
    [1, 2]
    ------
    1
    2
    ------
    3
    4
    View Code
    版本
    函数定义
    调用
    说明
    不使用可变参数
    def calc(numbers):
    sum = 0
    for n in numbers:
    sum = sum + n * n
    return sum
    calc([1, 2, 3])
    调用的时候,需要先组装出一个list或tuple
    使用可变参数
    def calc(*numbers):
    sum = 0
    for n in numbers:
    sum = sum + n * n
    return sum
    calc(1, 2)
    如果已经有一个list需要调用
    方法一:(此方法太繁琐)
    >>> nums = [1, 2, 3]
    >>> calc(nums[0], nums[1], nums[2])
    方法二:
    >>> nums = [1, 2, 3]
    >>> calc(*nums)
    14
     
    关键字参数 **kw
    关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
    def person(name, age, **kw):
        print('name:', name, 'age:', age, 'other:', kw)
    
    person('Michael', 30)
    person('Bob', 35, city='Beijing')
    person('Adam', 45, gender='M', job='Engineer')
    
    extra = {'city': 'Beijing', 'job': 'Engineer'}
    person('Jack', 24, city=extra['city'], job=extra['job']) # 可以先组装出一个dict,然后,把该dict转换为关键字参数传进去
    
    extra = {'city': 'Beijing', 'job': 'Engineer'}  # 简化一下
    person('Jack', 24, **extra)
    
    outputs:
    name: Michael age: 30 other: {}
    name: Bob age: 35 other: {'city': 'Beijing'}
    name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

     函数参数的传递机制:

    5.4函数的高级内容

  • 相关阅读:
    Microsoft .NET Framework 以及 CLR 的版本
    如何:备份 Team Foundation Server
    通过VS2008SP1 访问TFS2010
    Project 2007 Understanding Project's Percent Complete vs. Percent Work Complete
    TFS:从单服务器部署移到双服务器部署
    C#网络编程(基本概念和操作) Part.1
    图解Windows server 2012故障转移群集的安装、建立
    产品经理经验总结
    TCP同步与异步及阻塞模式,多线程+阻塞模式,非阻塞模式简单介绍
    Windows Phone开发概论
  • 原文地址:https://www.cnblogs.com/wang-mengmeng/p/11271306.html
Copyright © 2011-2022 走看看