zoukankan      html  css  js  c++  java
  • 函数

    函数简介

    1.为何用函数之不使用函数的问题
        组织结构不清晰
        代码冗余
        无法统一管理且维护难度大
    2.函数分类:
        内置函数
        自定义函数
    3.为何要定义函数
        函数即变量,变量必须先定义后使用,未定义而直接引用函数,就相当于在引用一个不存在的       变量名

    #1 定义阶段
         def bar():
        print('懒蛋蛋')
    def foo():
        bar()
        print('开始学习函数了')
    #2 调用阶段
    foo()
    '''
    懒蛋蛋
    开始学习函数了
    '''
    

    4.函数的概念

      工具就具备某一种功能的物件,就是程序中的函数概念  功能

       事先准备工具的工程称为函数的定义  过程

       遇到特定的场景拿来就用称为函数的调用  拿来用
    5.定义函数都干了哪些事?
        只检测语法,不执行代码
    6.如何定义函数(函数名要能反映其意义)
        def ...

        基本格式:

    def 函数名(arg1,arg2,arg3):
        '''注释'''
         函数体
        return 返回值

    return的特性/函数的返回值 **

    #return 的返回值没有类型限制
    1> 只返回一次值 并且会终止函数 会把return后的值作为函数执行的返回结果
    2> 没有return返回None,相当于 return None
    3> 指定return 返回的值(1个),就返回该值
    4> 指定return 返回多个值,逗号风格,默认返回元组
    def func():
        print('return特性')
        #return 0 #返回 0
        #return 1,2,3 # (1,2,3) 多个值返回元组
        return [1,3],{'name':'alex'} #([1, 3], {'name': 'alex'}) 多个值返回元组
    print(func())
    
    
    def foo():
        print('==============>')
        return 123
        return 456
        print('==============>')
        print('==============>')
        print('==============>')
    foo()
    '''
    打印结果:
    ==============>
    '''
    print(foo())
    '''
    ==============>
    '''
    例子
    
    
    什么时候该有?
        调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
        通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
    什么时候不需要有?
        调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
        通常无参函数不需要有返回值

    定义函数的三种形式

    无参: 应用场景仅仅只是执行一些操作,比如与用户交互,打印
    有参: 需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值
    空函数:设计代码结构
    无参函数
    def func():
        print('无参数函数')
        #return 0 #无参函数有没有return都可以
    res=func()
    print(res)
    '''
    无参数函数
    None 没有return 返回 None,相当于return None
    '''
    View Code
    有参函数
    有参函数通常有个返回值

    #有参函数的例子
    #求最大值和最小值
    #方式1
    def my_max(x,y):
        if x>y:
            print(x)
        else:
            print(y)
    my_max(1,2)
    #定义了一个函数 并 函数名()执行了函数  函数体里有打印操作
    '''
    打印结果是 2
    '''
    print(my_max(1,2))
    # 打印函数 会执行函数并且打印函数返回值
    '''
    2 函数的执行结果
    None 函数的返回值 因为没有定义返回值 所以是None
    '''
    #方式2
    def my_max(x,y):
        if x>y:
            return x
        else:
            return y
    my_max(1,2)
    #没有打印结果 因为定义的函数里就没定义执行的时候出打印结果
    res=my_max(1,2)
    print(res)
    '''
    打印结果:2  打印函数的执行才会出现函数的返回值
    '''
    求最大值和最小值

    空函数

    def foo():
        pass #代表什么也不干

    函数的调用

    1 先找到名字

    2 根据名字调用代码

    函数调用的三种形式

    1 语句形式:foo()

    2 表达式形式:3*len('hello')

    4 当中另外一个函数的参数:range(len('hello'))

    def my_max(x,y):
        if x>y:
            return x
        else:
            return y
    
    my_max(1,2) #调用函数的语句形式
    res=my_max(1,2)*10 #调用函数的表达式形式
    print(res)
    
    v=my_max(my_max(1,2),3) #当做另外一个函数的参数
    print(v)
    例子

    函数的参数 ****

    形参 -变量名

    实参-变量值

    # 形参: 在定义是定义函数阶段 在()内的参数 就是 x y 形式上的参数  不占用内存空间
    def foo(x,y): # x=1 y=2
        print(x)
        print(y)
    
    #实参: 在调用函数阶段 在()内的参数 就是1,2 实际的参数 占用内存空间
    foo(1,2)
    
    #形参即变量名,实参即变量值,函数调用则将值绑定到名字上,函数调用结束,解除绑定

    参数的分类

    位置参数

    位置参数:按照从左到右的顺序依次定义的参数

      位置形参:按照从左到右的顺序依次定义的形参  定义阶段

        特性:必须被传值,多一个不行,少一个也不行

      位置实参:按照从左到右的顺序依次定义的实参  调用阶段

        特性:与形参按照位置一一对应

    #位置参数
    def foo(name,age):
        print(name)
        print(age)
    
    foo('egon',3) #name='egon' age=3
    foo(3,'egon') #name=3 age='egon' #位置换 对应的值换

    关键字参数(实参)/关键字实参

    关键字实参:指的是按照name=value的形式,指名道姓的给name传值

    #关键字参数
    def foo(name,age):
        print(name)
        print(age)
    
    foo(name='egon',age=18)
    foo(age=18,name='egon') #与位置无关 都一样
    #########个人觉得 应该没人这么作死吧 不用费力看
    #注意的问题
    #1> 位置实参必须在关键字实参的前面
    #2> 一定不要对同一个形参传多次值
    #站在调用阶段  研究实参的变化  位置实参和关键字实参的混合体
    def foo(name,age,sex):
        print(name)
        print(age)
        print(sex)
    foo('egon',18,'male') #位置实参
    foo(name='egon',sex='male',age=18,) #关键字实参
    foo('egon',sex='male',age=18) #混合体实参
    
    #问题1
    foo(sex='male',age=18,'egon') #错误 位置实参必须在关键字实参的前面
    #问题2
    foo('egon',sex='male',age=18,name='egon') #错误 一定不要对同一个形参传多次值

     

    默认参数

    可变长参数

    闭包函数

    装饰器

    迭代

    生成器

    协程函数+面向过程+递归+二分法

    点我走起吧

    匿名函数

    有名参数

    定义一个工具 以后重复后使用

    def func(x,y,z=1):
        return x+y+z
    func()

    匿名函数lambda
    1.没有名字
    2.函数体自带return

    lambda x,y,z=1:x+y+z

    没有名字 参数:返回值  默认调用return 返回值
    应用场景:应用于一次性场景 临时使用
    应用:max,min,sorted,map,reduce,filter
    关于匿名函数的使用方法 参考内置函数里 max,min,sorted,map,reduce,filter的讲解

    内置函数

    想知道点我吧

  • 相关阅读:
    【CF1157F】Maximum Balanced Circle 求一个相邻元素之间绝对值为小于1的最大环
    南昌网络赛 Distance on the tree 主席树+树剖 (给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数。)
    P2486 [SDOI2011]染色(树剖)区间覆盖+区间的连续段(点权) && (边权)
    树链剖分
    南昌网络赛 I. Max answer (单调栈 + 线段树)
    HDU4641 || 6194多校 (后缀自动机-最少出现K次的字串个数 || 恰好出现K次字符串的个数)
    2019年华南理工大学程序设计竞赛(春季赛) 单身狗救星 (凸包+二分)
    2019年华南理工大学程序设计竞赛(春季赛) B 修仙时在做什么?有没有空?可以来炼丹吗?(思维建图搜索)
    数据结构-----顺序表的实现
    Java数据类型及运算
  • 原文地址:https://www.cnblogs.com/lazyball/p/7286579.html
Copyright © 2011-2022 走看看