函数

作者: link_king | 来源:发表于2019-03-10 20:41 被阅读0次

    1.函数

    1.1 定义
    def 函数名(参数列表):
        语句
        return 表达式
    

    解释:

    def : 函数代码块以def关键字开始

    函数名:遵循标识符规则

    参数列表:任何传入函数的参数和变量,必须放在小括号之间,使用逗号分隔,函数从函数的调用者那里获取信息【调用者给函数传递的信息】

    ():是参数列表的开始以及结束

    冒号:函数内容【封装的功能】以冒号开始,并且缩进

    语句:函数封装的功能

    return:一般用于结束函数,并且返回信息给函数的调用者

    表达式:要返回给函数调用者的信息

    注意:最后的return表达式可以不写,若不写的情况下默认return None

    参数列表 = 参数1,参数2,…,参数n

    1.2 函数的调用

    语法:函数名([参数])
    若函数需要此参数则传递,不需要则不传递

    注意:1.函数不调用的时候,不执行。2.定义函数写在上面,调用写在下面。

    1.3 最简单的函数

    最简单的函数,即无参数、无返回值的函数

    #定义函数
    def myPrint():
        print("you are a good man")
    #调用函数
    myPrint()
    
    1.4 参数的传递

    参数传递的本质:实参给形参赋值的过程

    传递的参数与函数参数列表中的参数个数保持一致

    1.5 位置参数

    位置参数又称必选参数

    参数传递与其位置有关.位置不能随意更改。

    [值传递]指传递不可变类型,一般指string、tuple和number类型

    [引用传递]一般传递的是可变类型,一般指list,dict和set

    注意:对于可变类型来讲在函数中更改传递进来的参数的时候,
    会将其原值也进行更改。
    

    说明:引用传递的本质上还是值传递,只不过传递的是地址,

    1.6 关键字参数
    概念:用于函数调用时,通过“键-值”的形式加以指定,可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求
    
    def func(name, age):
        print("I am %s, and I am %d year old"%(name, age))
    #一般调用
    func("lili", 18)
    #使用关键字参数
    func(age = 18, name = "lili")
    

    关键字参数之间是不存在先后顺序的

    当赋值的时候打乱顺序,只能使用关键字。

    当位置参数与关键字参数同时存在的时候,将关键字参数写在位置参数的后面。

    1.7 默认函数
    在定义函数的时候,我们为参数提供了默认值,若调用函数的时候,
    没有传此参数,则会使用默认值,若传了此参数,则使用传递的参数。
    优点:简化了函数的调用
    
    def func(name, age=18)
        print("I am %s, and I am %d year old"%(name, age))
    
    #一般的函数调用
    func('lilei', 19)
    #关键字参数调用
    func(name = 'leilei')
    #使用默认参数调用
    func('lili')
    

    使用默认参数的时候需注意:

    1.位置参数在前,默认参数在后,否则python解释器会报错

    2.默认参数必须指向不变对象(字符串等),不然像列表这种前面的变化会影响到后面的输出结果。

    3.如何设置默认参数

    当函数有多个参数时,把变化大的参数放在前面,变化小的放在后面,变化小的可以作为默认参数。

    有多个默认参数的时候,可以按顺序提供默认参数,当不按顺序提供参数的时候需要使用关键字参数进行调用。

    不定长参数:
    定义函数的时候,不确定会有多少参数,这种情况下我们可以使用不定长参数来处理。即包裹位置参数或者包裹关键字参数
    特点:能处理比声明时候更多的参数【传递多少参数处理多少参数,不传递则不处理】
    
    1.8 包裹位置参数--*args

    添加了星号(*)的变量名会存放所有 未命名的变量参数
    如果在函数调用时没有指定参数,它就是一个空的//元组//

    包裹位置参数实质上就是一个元组,将传递的参数进行收集,
    并不是所有的参数都进行收集,它只收集除位置参数以外多余的参数【位置参数】
    
    1.9 包裹关键字传递--**kwargs

    本质:是一个字典(dict),将关键字参数的变量作为key,将其值作为value。

    收集所有的关键字参数。传递参数必须使用关键字传参。

    传递规则:

    注意,参数定义与调用的顺序必须是:必选参数【位置参数】、可变参数【包裹位置参数】、默认参数、包裹关键字参数

    1.10匿名函数

    定义:不需要定义函数名的函数或者是子程序。

    特点:匿名函数不使用def定义函数,而是使用lambda来定义。

    1.lambda只是一个表达式,函数体比def简单

    2.关键字lambda表示匿名函数,冒号前面的x表示函数参数.

    3.匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果.

    好处: 函数没有名字,不必担心函数名冲突

    调用:把匿名函数赋值给一个变量,再利用变量来调用该函数.

    语法:

    lambda 参数1,参数2,…,参数n: expression[表达式]

    func = lambda a,b : a+b
    print(func(10,20))
    
    '''
    需求:求三角形的面积
    输入三角形底边,与三角形的高。
    '''
    mianji = lambda bian,height : bian*height/2
    print(mianji(20,10))
    print(type(mianji))
    

    相关文章

      网友评论

          本文标题:函数

          本文链接:https://www.haomeiwen.com/subject/glbppqtx.html