• 函数一函数的基础


    一、为什么要用函数

      假如不能使用len()方法来计算长度

    s = '金老板小护士'
    # print(len(s))
    i = 0
    for k in s:
        i += 1
    print(i)
    
    s1 = '班主任阿娇'
    i = 0
    for k in s1:
        i += 1
    print(i)
    View Code

    如上面代码,同样是获取不同字符串的长度,但我们都把相同的代码重复写---代码冗余

    函数的特点:定义了之后,可以在任何需要它的地方调用

    s = '金老板小护士'
    def my_len():
        i = 0
        for k in s:
            i += 1
        print(i)
        return  i    # 返回值
    length = my_len()
    print(length)
    View Code

    二、返回值的3种情况

    a:没有返回值  ---返回None
         不写return
         只写return 结束一个函数的继续
         return None --不常用
    b: 返回一个值
         可以返回任何数据类型
         只要返回就可以接收到
         如果在一个程序中有多个return,那么只执行第一个
    c: 返回多个值
        用多个变量接收:有多少返回值就用多少变量
        用一个变量接收:得到的是一个元组
    View Code

    三、形参、实参

      参数:

        1.没有参数:定义函数和调用函数时括号里都不写内容

        2.有一个参数

        3.有多个参数

      

      站在实参的角度上:

        1.按照位置传参

        2.按照关键字传参

        3.混着用也可以,但是必须先按照位置传参,再按照关键字传参数

                不能给同一个变量传多个值。

      站在形参的角度上:

        位置参数:必须传,且有几个参数就传几个值

        默认参数:可以不传,如果不传就使用默认的参数,如果传了就使用传的值

      只有调用函数的时候:

        按照位置传:直接写参数的值

        按照关键字:关键字 = 值

      定义函数的时候:

        位置参数:直接定义参数

        默认参数,关键字参数:参数名 = 默认的值

            默认参数陷阱:默认参数是一个可变数据类型

            如果默认参数额值是一个可变数据类型,那么每一次调用函数的时候,如果不传值就公用这个数据类型的资源

            

    def defult_param(a,l = []):
        l.append(a)
        print(l)
    
    defult_param('alex')  #['alex']
    defult_param('egon')  #['alex', 'egon']

        动态参数:

          参数名之前加*,习惯参数名args。可以接收任意多个位置参数,但是不能接收关键字传参。

          参数名之前加**,习惯参数名kwargs。只能接收关键字传参

      顺序:必须先定义位置参数,然后是*args,然后定义默认参数,最后是**kwargs

    def sum(*args):
        n = 0
        for i in args:
            n += i
        return n
    print(sum(1,2))  #3
    
    
    def func(**kwargs):
        print(kwargs)
    
    func(a = 1,b = 2, c = 3)  # {'a': 1, 'b': 2, 'c': 3}
    func(a = 1,b = 2)    # {'a': 1, 'b': 2}
    View Code

      动态参数有两种:可以接收任意个参数

        *args : 接收的是按照位置传参的值,组成一个元组

        *kwargs : 接收的是按照关键字传参的值,组织成一个字典

        *args必须在**kwargs之前

    def func(*args,**kwargs):
        print(args,kwargs)
    func(1,2,3,4,5,a='aa',b='bb')    #(1, 2, 3, 4, 5) {'b': 'bb', 'a': 'aa'}

      动态参数的另一种传参方式  

    def func(*args):#站在形参的角度上,给变量加上*,就是组合所有传来的值
        print(args)
    func(1,2,3,4,5)  # (1, 2, 3, 4, 5)
    l = [1,2,3,4,5]
    func(*l)     # (1, 2, 3, 4, 5)
    #站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散
    def func(**kwargs):
        print(kwargs)
    
    func(a=1,b=2)   # {'a': 1, 'b': 2}
    d = {'a':1,'b':2}
    func(**d)    # {'a': 1, 'b': 2}

    四、函数的注释

    def func():

      '''

      这个函数实现了什么功能

      参数1:

      参数2:

      :return:返回值是字符串或者列表的长度等

      '''

     

    五、三元运算 

    #变量 = 条件返回True的结果 if 条件 else 条件返回False的结果
    a = 1
    b = 5
    c = a if a > b else b
    print(c)   #5

        

      

  • 相关阅读:
    项目中遇到的问题:前台 disabled 与 后台disabled
    差距
    那些零碎的感悟,那些成长的事【壹】
    假期数据结构学习总结
    烟大 2242: 回文(栈和队列)
    烟大 2241: 相同序列(栈和队列)
    烟大 2239: 十进制与八进制的转换(栈和队列)
    烟大 2238: 括号匹配(栈和队列)
    hdu 1018:Big Number(水题)
    hdu 2050:折线分割平面(水题,递归)
  • 原文地址:https://www.cnblogs.com/huangjm263/p/8117930.html
Copyright © 2020-2023  润新知