zoukankan      html  css  js  c++  java
  • 030 函数的定义与使用

    一、概述

    • 函数的理解与定义
    • 函数的使用及调用过程
    • 函数的参数传递
    • 函数的返回值
    • 局部变量和全局变量
    • lambda函数

    二、函数的理解与定义

    # DayDayUpQ4.py
    
    
    def dayUp(df):
        dayup = 1
        for i in range(365):
            if i % 7 in [6, 0]:
                dayup = dayup * (1 - 0.01)
            else:
                dayup = dayup * (1 + df)
        return dayup
    
    
    dayfactor = 0.01
    while dayUp(dayfactor) < 37.78:
        dayfactor += 0.001
    print("工作日的努力参数是:{:.3f} ".format(dayfactor))
    
    工作日的努力参数是:0.019 
    

    2.1 函数的定义

    函数是一段代码的表示

    • 函数是一段具有特定功能的、可重用的语句组
    • 函数是一种功能的抽象,一般函数表达特定功能
    • 两个作用:降低编程难度 和 代码复用
    def <函数名>(<参数(0个或多个)>) :
        <函数体>
        return <返回值>
    

    030-函数的定义与使用-01.jpg?x-oss-process=style/watermark

    y = f(x)

    • 函数定义时,所指定的参数是一种占位符
    • 函数定义后,如果不经过调用,不会被执行
    • 函数定义时,参数是输入、函数体是处理、结果是输出 (IPO)

    三、函数的使用及调用过程

    3.1 函数的调用

    调用是运行函数代码的方式

    def fact(n):  # 函数的定义
        s = 1
        for i in range(1,n+1):
            s *= i
        return s
    fact(10)  # 函数的调用
    
    • 调用时要给出实际参数
    • 实际参数替换定义中的参数
    • 函数调用后得到返回值

    3.2 函数的调用过程

    030-函数的定义与使用-02.jpg?x-oss-process=style/watermark

    四、函数的参数传递

    函数可以有参数,也可以没有,但必须保留括号

    def <函数名>(<非可选参数>,<可选参数>) :
        <函数体>
        return <返回值>
    

    4.1 可选参数传递

    030-函数的定义与使用-03.jpg?x-oss-process=style/watermark

    4.2 可变参数传递

    函数定义时可以设计可变数量参数,既不确定参数总数量

    def <函数名>(<参数>,*args) :
        <函数体>
        return <返回值>
    
    def fact(n, *args):
        """计算机n!乘数"""
        s = 1
        for i in range(1, n + 1):
            s *= i
        for item in args:
            s *= item
        return s
    
    
    fact(10, 3, 5, 8)
    
    435456000
    

    4.3 参数传递的两种方式

    函数调用时,参数可以按照位置或名称方式传递

    def fact(n, m=1):
        s = 1
        for i in range(1, n + 1):
            s *= i
        return s // m
    
    fact(10, 5)  # 位置传递
    
    725760
    
    fact(m=5, n=10)  # 名称传递
    
    725760
    

    五、函数的返回值

    函数可以返回0个或多个结果

    • return保留字用来传递返回值
    • 函数可以有返回值,也可以没有,可以有return,也可以没有
    • return可以传递0个返回值,也可以传递任意多个返回值
    def fact(n, m=1):
        s = 1
        for i in range(1, n + 1):
            s *= i
        return s // m, n, m
    
    
    a, b, c = fact(10, 5)
    a, b, c
    
    (725760, 10, 5)
    

    六、局部变量和全局变量

    030-函数的定义与使用-04.jpg?x-oss-process=style/watermark

    030-函数的定义与使用-05.jpg?x-oss-process=style/watermark

    6.1 规则1

    规则1:局部变量和全局变量是不同变量

    • 局部变量是函数内部的占位符,与全局变量可能重名但不同
    • 函数运算结束后,局部变量被释放
    • 可以使用global保留字在函数内部使用全局变量

    030-函数的定义与使用-06.jpg?x-oss-process=style/watermark

    使用global后

    030-函数的定义与使用-07.jpg?x-oss-process=style/watermark

    6.2 规则2

    规则2:局部变量为组合数据类型且未创建,等同于全局变量

    030-函数的定义与使用-08.jpg?x-oss-process=style/watermark

    030-函数的定义与使用-09.jpg?x-oss-process=style/watermark

    6.3 使用规则

    • 基本数据类型,无论是否重名,局部变量与全局变量不同
    • 可以通过global保留字在函数内部声明全局变量
    • 组合数据类型,如果局部变量未真实创建,则是全局变量

    七、lambda函数

    lambda函数返回函数名作为结果

    • lambda函数是一种匿名函数,即没有名字的函数
    • 使用lambda保留字定义,函数名是返回结果
    • lambda函数用于定义简单的、能够在一行内表示的函数
    <函数名> = lambda <参数>: <表达式>
    

    等价于

    def <函数名>(<参数>) :
        <函数体>
        return <返回值>
    
    f = lambda x, y: x + y
    f(10, 15)
    
    25
    
    f = lambda: 'lambda函数'
    f()
    
    'lambda函数'
    

    7.1 lambda函数的应用

    谨慎使用lambda函数

    • lambda函数主要用作一些特定函数或方法的参数
    • lambda函数有一些固定使用方式,建议逐步掌握
    • 一般情况,建议使用def定义的普通函数

    八、小结

    • 使用保留字def定义函数,lambda定义匿名函数
    • 可选参数(赋初值)、可变参数(*b)、名称传递
    • 保留字return可以返回任意多个结果
    • 保留字global声明使用全局变量,一些隐式规则
  • 相关阅读:
    leetcode 122. Best Time to Buy and Sell Stock II
    leetcode 121. Best Time to Buy and Sell Stock
    python 集合(set)和字典(dictionary)的用法解析
    leetcode 53. Maximum Subarray
    leetcode 202. Happy Number
    leetcode 136.Single Number
    leetcode 703. Kth Largest Element in a Stream & c++ priority_queue & minHeap/maxHeap
    [leetcode]1379. Find a Corresponding Node of a Binary Tree in a Clone of That Tree
    正则表达式
    十种排序算法
  • 原文地址:https://www.cnblogs.com/nickchen121/p/11190792.html
Copyright © 2011-2022 走看看