• 函数


    函数类型

    1 内置函数

    • sum()
    • max() 最大值
    • min() 最小值
    • len() 长度
    • 等等等等

    2自定义函数

        #制造自定义函数
        #def 是参数, print_star()是函数名, print("hello")是函数值
         
        def print_star():
        print("#"*6)
        def print_msg():
        print("hello")
        #使用自定义函数
        print_star()
        print_msg()
        print_star()
     

    函数的使用:

        先定义后使用,(先使用后调用, 会报错找不到)
        def 函数名 (参数1,参数2,....):
           """文档注释"""
           函数体(代码)
            renturn值(定义返回值)
     

    函数定义方式:

     

    1.无参数函数:

        #无参函数: 函数的功能仅仅只是执行一些操作
        def foo():
        print("from foo")
        foo() #定义时无参,调用时也无参函数

    有参函数:

        #定义时有参,调用时也必须有参数
        方法1
            def bar(name):
            print('bar===>>',name)
            bar("egon")
            #显示:bar===>> egon
        方法2
            def my_max(x,y):
            res= x if x >y else y
            return res
            res=my_max(1,2)*1000
            print(res)
            #显示2000
        方法3
            def my_max(x,y):
            res= x if x >y else y
            return res
            res=my_max(my_max(10,20),30)
            print(res)
            #显示:30
    
        三元运算
    
            #if条件成立执行 res=x x可改
            x = 10
            y = 2
            res = x if x > y else y
            print(res)

    3 空函数:

        def auth():
        """认证功能"""
        pass
        auth()

    return

        def foo():
        print("from foo")
        res=foo()
        print(res) #返回None,None表示什么都没有
        # 以下3种都返回None
        # 没有return
        # return 什么都不写
        # return None
        def foo():
        print("from foo")
        x = 1
        #return x #返回1,x定义是1
        #return 1,2,3,4 #返回结果是元组形式
        return 1,[2,3],(4.5),{} #返回指定的值
        res=foo()
        print(res)
     

    数值读取和增加

        读取t下的每个元素
            t=(1,2,3)
            a,b,c = t
            #显示每个元素
            print(a)
            print(b)
            print(c)
            t=c,a,b,b        #调顺序并增加b
            print(t)
            #(3, 1, 2, 2)
        显示1个数其他都用站位表示
        t=(1,2,3)
        a,_,_=t #_站位
        print(a)
        #显示1
         
        #显示第一个和最后一个值
        test=(1,2,3,4,5,6)
        a,*_,c =test #*表示所有值, _站位, a第一值,c最后一个值
        print(a)
        print(c)
        # 1
        # 6
     
     

    函数的参数: 

     
    函数2个阶段:                    定义阶段     调用阶段
     
    广义上函数的参数分两种:    形参            实参
        #实参的值要传给形参
         
        #定义阶段:只检测函数体的语法,并不会执行,不占用内存空间
        def foo(x,y): #形参(变量名), 形式参数
        print(x)
        print(y)
        #调用阶段    
        foo(1,2) #实参(变量值),实际参数

    位置参数

        def foo(x,y,z):    #位置形参,必须被传值的参数
        print(x,y,z)
        foo(1,2,3)    #位置实参,与形参一一对应
        #显示1 2 3

    关键字参数 key=value

        def foo(x,y,z):#必须被传值的参数
        print(x,y,z)
        foo(z=3,x=1,y=2) #关键字传参,指定传参,不需要按顺序
        #显示1 2 3
        foo(1,z=3,y=2) #位置参数和关键字,执行传参
        #显示1 2 3
        #foo(x=1,2,z=3) 错误实例 注:关键字参数必须在位置参数后边
        #foo(1,x=1,y=2,z=3) 错误实例 注:不能重复对一个形参传值

    默认参数

        def register(name,age,sex="male"):    #age,sex="male"是默认参数
        print(name,age,sex)
        register("root",39) #male是默认实参,不指定则添加
        #显示 root 39 male
        register("",20,"female") #改变默认实参sex="male"为sex="female"
        #显示 三 20 female
        register("",sex="female",age=19) #改变实参位置,必须指定变量
        #显示 四 19 famale
        #默认参数注意问题:
        # 1.默认参数必须在非默认参数后边,
         
        #如下是错误实例,定义阶段就报错
        #def register(sex="male",name,age):
        # print(sex,name,age)
        # 2.默认参数在定义阶段就已经赋值了,而且只在定义阶段赋值一次
        a=100
        def foo(x,y=a):
        print(x,y)
        a = 0
        foo(1) #只在定义阶段赋值,所有a=100 而不是a=1
        #显示100
        # 3.默认参数的值通常定义成不可变类型,不能用于可变类型(字典,列表),常用:变化比较少的参数, 用默认参数
    
     

    可变长参数,(*args,**kwargs)

        实参和形参的变化:按位置定义和按关键字定义
        在调用函数时,实参的长度是可变
        在形参角度,去声明这种参数,能够接受任意长度的实参
    *args 是位置参数
    *args     *把溢出的按位置参数定义的实参都接受,以元组的形式赋值给args
    
        #针对按位置定义的溢出的实参
        def foo(x,y,*args):     #x和y是位置形数, *args是所有溢出的形参
        print(x,y)             #x和y是位置形数,
        print(args)       #溢出的形参
        foo(1,2,3,4,5)       #1,2是位置实参,3,4,5是溢出的实参
        #普通求和函数
        def add(x,y):
        res=x+y
        return res
        print(add(1,2))
        #显示3
        #*args求和函数
        def add(*args):
        res=0
        for i in args:
        res+=i #res=0+1>>1+2>>3+3>>6+4
        return res
        print(add(1,2,3,4)) #显示数字相加的值
        #显示10
        *args特殊用法
            def foo(*args): #*后边跟的值 都是位置参数
            print(args)
            foo("A","B","C","D") #位置参数, 读取是元组模式
            #元组模式('A', 'B', 'C', 'D')
            foo(*["A","B","C","D"]) # 实参中有[] 加* 是元组模式, 如果不加* 是元组中的列表模式
            #元组模式('A', 'B', 'C', 'D')
            foo(["A","B","C","D"])
            #元组中的列表模式 (['A', 'B', 'C', 'D'],)
         
    
     
    **kwargs是关键字参数
    **kwargs     **把溢出的按关键字定义的实参都接受,以字典的形式赋值给kwargs
    
         
        def foo(x,y,**kwargs): #x和y是位置形数, **kwargs是所有溢出的形参
        print(x,y) #x和y是位置形数,
        print(kwargs) #**kwargs是所有溢出的形参
        foo(y=2,x=1,a=1,name="guolm",age=18)    #和下边一样
        foo(1,2,a=1,name="guolm",age=18) #和上边的foo...相同,位置实参,可用位置实参或关键字实参, 但溢出实参必须用关键字实参
         
        #显示
        # 1 2
        #{'a': 1, 'name': 'guolm', 'age': 18}
        生成字典
    
        def foo(**kwargs):
            print(kwargs)
        foo(x=1,y=2)         #实现效果和下边一样    #这是用户参照
        #{'x': 1, 'y': 2}
        foo(**{"x":1,"y":2}) #foo(y=2,x=1)        #这是用户参照
    
        #{'y': 2, 'x': 1}
        函数调用函数
            *args+**kwargs组合
            def foo(x,y,z):
            print("from foo",x,y,z)
            def wrapper(*args,**kwargs):
            #print(args) #(1,)
            #print(kwargs) #{'z': 2, 'y': 3}
            foo(*args,**kwargs)
            wrapper(1,z=2,y=3)
            #from foo 1 3 2          #1是元组 3和2是字典{'z': 2, 'y': 3} ,是z和y的value
    
     
     

    命名关键字参数

    *后的参数全为命名关键字参数,但是拥有其他参数的功能(看方法2)
        *后定义的参数为命名关键字参数,这类参数.必须被传值,而且必须以关键字实参的形式去传值
    方法1
        def foo(name,age,*,sex,height):    
        # name是位置参数,age是位置参数, *,sex,height (*后边的sex,height,都是命名关键字参数)
        print(name)
        print(age)
        print(sex)
        print(height)
        foo("egon",18,height="185",sex="male")
        #egon #18 #male #185
       

    方法2 def foo(name,age,*,sex="male",height): 这里sex="male"是命名关键字,用于默认参数的功能 print(name) print(age) print(sex) print(height) foo("egon",18,height="185") #这么不需要输入sex的值,因为有默认参数的功能 # egon # 18 # male # 185
     
     
  • 相关阅读:
    WebSocket来实现即时通讯
    微信小程序1
    使用phpqrcode来生成二维码/thinkphp
    PHP函数积累
    Docker 常用命令汇总(beta)
    Nginx+Keepalived高可用架构简述(beta)
    Docker镜像制作(以Nginx+Keepalived为例)(beta)
    开源协议浅谈(beta)
    【Elasticsearch系列】ES安装(mac)
    linux 下安装JDK
  • 原文地址:https://www.cnblogs.com/Gavinkwok/p/6856897.html
Copyright © 2020-2023  润新知