zoukankan      html  css  js  c++  java
  • 函数

    1.定义函数

      定义:函数是指将一组语句的集合通过一个函数名封装起来,想要执行这个函数,只需调用其函数名即可。

    # 定义函数的语法
    def 函数名(参数1, 参数2,...):
    """文档描述"""
    函数体
    return'''
    1.def:定义函数的关键字
    2.函数名:函数名是对函数体代码的引用。函数的命名应该反映出函数的功能;
    3.括号:括号内定义参数,参数可有可无,且不需要指定参数类型;
    4.冒号:括号后要加冒号,然后在下一行开始缩进编写函数体的代码;
    5."""文档描述""": 描述函数功能,参数介绍等信息的文档,非必要,但是建议加上,从而增强函数的可读性;
    6.函数体:由语句和表达式组成;
    7. return值:定义函数的返回值,return是可有 可无的。
    '''

    补充:

      1).函数体中的代码定义只检测语法是否正确,不会执行代码。

      2).可以通过变量名找到变量对应的值,也可以通过 函数名+括号 来找到函数体所对应的代码并执行。

    2.函数的使用原则

    函数的使用应该要分为两个明确的阶段:

      1).定义阶段:只检测函数的语法,不执行函数体的代码。

      2).调用阶段:会触发函数体代码的执行。

    3.函数的定义定义与调用

    (1)函数定义的三种形式

    1).有参函数
    def func (x): #括号里面有参数
        pass
    func(1)
    2).无参函数
    def func ():  #括号里面没有参数
        pass
    func()
    3).空函数
    def func ():  #括号里面没有参数
        pass

    (2)函数调用的三种形式

    func()  #  语句形式
    def
    max2(x,y): if x > y: return x else: return y res=max2(10,20)*12 # 为表达式 res=max2(max2(10,20),30) # 可以将函数的调用当作参数传给另外一个函数用 print(res)

    4.函数的返回值

      函数的返回值没有类型限制,函数的返回值也没有个数限制。

    (1)返回多个值:多个返回值用逗号隔开,返回的是元组形式。

    def func()
        print('from fune')
        reture 1,1.1,'hello',[1,2]
    res = func()
    print(res,type(res))   #(1, 1.1, 'hello', [1, 2, 3]) <class 'tuple'>

    (2)返回一个值:返回的就是该值本身。

    def func():
        return 123
    res=func()
    print(res,type(res))  # 123 <class 'int'>

    (3)返回0个值或者干脆没有return:返回none

    def func():
        return
    res=func()
    print(res)     #none

    补充:

      1).return除了有返回值的功能,还有结束函数执行的功能。

      2).函数内可以多个return,但只要执行一次,整个函数就立即结束,并且将return后的值返回。

    函数参数的使用

      形式参数(形参):在定义函数阶段,括号内定义的参数或变量名称为形参。形参只在函数内部有效。

      实际参数(实参):在调用函数阶段,括号内传入的值或变量值称为实参。实参可以是任意类型的量,在调用函数时,实参必须要有确定的值。

      补充:在调用函数阶段会将实参的值(值)绑定给形参(变量名),这种绑定关系只在调用函数时生效,在函数执行完毕后就会解除绑定。

    def func(x,y)    #形参
        res = x**y
        return res
    
    c = func(a,b)    #实参
    print(c)

    1.参数的细分

    (1)位置参数:在定义阶段,按照从左到右的顺序依次定义的形参称之为位置形参。

      特点:但凡是按照位置定义的形参,必须被传值,多一个少一个都不行。

    (2)位置实参:在调用阶段,按照从左到右的顺序依次传入的值称之为位置实参。

      特点:但凡是按照位置定义的实参,必须被传值,多一个少一个都不行。

    2.关键字形参

      在调用阶段,按照key=value的形式定义的实参称之为关键字实参。

      特点:可以完全打乱顺序,但仍然能为指定的形参传值(总结:指名道姓的为指定的形参传值)

    def func(x,y,z):
        print(x,y,z)
    
    func(x=1,y=2,z=3)    # 输出为1 2 3
    func(1,2,3)                # 输出为1 2 3
    func(z=3,y=2,x=1)    # 输出为1 2 3       

    实参的形式可以是位置实参与关键字实参混合使用,但是必须遵循以下原则:

    (1)位置实参必须放在关键字实参面前

    (2)不能对同一个形参重复传播

    def func(x,y,z):
        print(x,y,z)
    func(1,z=3,y=2)   #输出1 2 3
    func(z=3,1,y=2)   #错误
    func(1,z=3,x=2,y=3)  #错误

    3.默认形参

      在定义阶段,就己经为形参赋值,该形参称之为默认实参。

    特点:(1)定义阶段就已经有值,意味着调用阶段可以不用传值

      (2)位置形参必须放到默认形参的面前

      (3)默认形参的值在函数定义阶段已经固定死了,定义阶段之后的改动不会影响该值

           (4)默认形象的值通常应该是不可变的类型。

    4.可变长参数:

      可变长实参:指的是在调用阶段,实参值个数是不固定的。

      实参一般只有两种(位置实参,关键字实参),对应着形参也必须要有两种解决方案来分别

    (1)*的用法

    在形参前加*:*会将溢出的位置实参存成元组的形式,然后赋值给*后的形参名

    def func(x,y,*z): #
        print(x,y,z)
    func(1,2,3,4,5)  #3.4.5是属于溢出的位置

    在实参前加*:但凡碰到实参中带*的,先将实参打散成位置实参再与形参做对应

    def func(x,y,z):
        print(x,y,z)
    func(1,2,[3,4,5])
    func(*[1,2,3,4,5])  #等价于func(1,2,3,4,5)  结果是错误
    func(*[1,2,3])  #等价于func(1,2,3)  结果是1 2 3

    (2)**的用法

    在形参前加**:**会将溢出的关键字实参存成字典的形式,然后赋值给**后的形参名。

    def func(x,y,**z): #z={'b':2,'a':1}
        print(x,y,z)
    func(1,y=2,a=1,b=2)  #结果是1 2 {'a': 1, 'b': 2}

    在实参前加**:但凡碰到实参中带**的,先将实参打散成关键字实参再与形参做对应

    def func(x,y,z):
        print(x,y,z)
    func(1,**{'y':2,'z':3}) #等价于func(1,z=3,y=2)
    func(1,**{'a':2,'y':333,'z':3}) #等价于func(1,a=2,y=333,z=3) # 错误

    (3)*与**的应用

    def index(name,age,sex):
        print('index=====>',name,age,sex)
    
    # 会将wrapper函数接收的参数格式原封不动地转嫁给其内部的index函数,必须要遵循的是index的参数规则
    def wrapper(*args,**kwargs): #args=('egon',) kwargs={'sex':'male','age':18}
        print(args)
        print(kwargs)
        index(*args,**kwargs) #index(*('egon',),**{'sex':'male','age':18}) #index('egon',sex='male',age=18)
    
    # wrapper(1,2,3,4,5,a=1,b=2,c=3)
    wrapper('egon',sex='male',age=18)
     
  • 相关阅读:
    0427-2
    0427-1
    0426html常用标签属性
    HTML,标签学习
    oracle培训,HTML学习
    第三十七天
    第三十六天
    第三十五天
    第四十三天
    第四十二天
  • 原文地址:https://www.cnblogs.com/blue-tea/p/11158419.html
Copyright © 2011-2022 走看看