初识函数

Posted xufengnian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识函数相关的知识,希望对你有一定的参考价值。

1.什么是函数

  函数就是具备某一功能的工具

2.为什么要用函数

  1 增加程序的可读性,让程序变得清晰

  2 减少代码冗余

  3 增加可扩展性

3 如何用函数

  函数的使用必须遵循的原则:先定义,后调用

  语法:

    def 函数名(参数1,参数2,...):

      ‘‘‘

      文档注释

      ‘’‘
      code1

      code2
      code3
      ...
      return 返回值

函数名:相当于一个变量名,指向函数的内存地址

参数:参数是函数的调用者为函数体代码传值的媒介

文档注释:推荐写上,增加代码的可读性

代码块:函数体功能的具体实现

return 返回值:代码的运行结果

函数的使用分为两个阶段:

  定义阶段:只检测语法,不执行代码

  调用阶段:执行函数体代码

4。定义函数的三种形式

4.1无参函数

def foo():
    print(from foo)
foo()

4.2有参函数

def bar(x,y):
    print(x,y)
bar(1,2)

4.3空函数

def func():
    pass

5.函数的返回值

函数的返回值需要注意:

1)返回值没有类型限制

2)返回值没有个数限制

返回1个值:调用函数拿到的结果就是一个值

返回多个值:调用函数拿到的结果就是一个元组

返回0个值,或者不写return:调用函数拿到的结果就是None

3)return关键字

return是函数结束的标志,函数内可以有多个return,但只要执行一次,整个函数就结束

6.函数的参数

形参与实参的关系:在调用函数时,会将实参赋值给形参,这种绑定关系在函数调用时临时生效,在调用结束后就失效了

函数的参数分为两大类

1)形参:指的是在定义函数阶段括号内指定变量名

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

注意:但凡按照位置定义的形参,必须被传值,多一个不行,少一个也不行

2)实参:指的是调用函数阶段括号内传入的值

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

注意:但凡按照位置定义的实参,会与形参一一对应

3)关键字参数

关键字实参:在调用函数阶段,按照key=value的形式指名道姓的为形参传值

注意:

1.可以完全打乱顺序,但仍然能指名道姓的为指定的形参传值

2.可以混合使用位置实参与关键字实参,但是必须注意:

  a.位置实参必须放到关键字实参前面

  b.不能对一个形参重复赋值

4)默认参数

默认参数:指的是在定义函数阶段,就已经为某个形参赋值了,该形参称之为有默认值的形参,简称默认形参

注意:

1.在定义阶段就已经被赋值,意味着在调用级阶段可以不用为其赋值

2.位置形参应该放在默认形参前面

3.默认参数的值在函数定义阶段就已经固定死了

4.默认参数的值通常应该是不可变类型

5)可变长的参数

站在实参的角度,参数长度可变指的是在调用函数时,传入的实参值的个数不固定

1.在形参中带*:会将调用函数时溢出的位置实参保存成元组的形式,然后赋值*后的变量名

def foo(x,y,*z): #z=(3,4,5,6)
    print(x,y,z)
foo(1,2,3,4,5,6)

2.在实参中带*:但凡在实参中带*的,在传值前都先将其打散成位置实参,再进行赋值

def foo(x,y,*z): #z=(3,4,5,6)
    print(x,y,z)
foo(1,*[2,3,4,5,6]) # foo(1,2,3,4,5,6)
foo(1,*(10,11,12,13,14)) # foo(1,2,3,4,5,6)

 3.在形参中带**:会将调用函数时溢出关键字实参保存成字典的形式,然后赋值**后的变量名

def foo(x,y,**z): #z={‘z‘:3,‘a‘:1,‘b‘:2}
    print(x,y,z)
foo(1,2,a=1,b=2,z=3)

4.在实参中带**:但凡在实参中带**的,在传值前都先将其打散成关键字实参,再进行赋值

def foo(x,y,**z): #z={‘a‘:100,‘b‘:200}
    print(x,y,z)
foo(1,**{a:100,b:200,y:111}) #foo(1,b=200,a=100,y=111)

5.规范:在形参中带*与**的,*后的变量名应该为args,**后跟的变量名应该是kwargs

def foo(*args,**kwargs): #args=(1,2,3,4,5) kwargs={‘a‘:1,‘b‘:2,‘c‘:3}
    print(args)
    print(kwargs)
foo(1,2,3,4,5,a=1,b=2,c=3)

*******十分重要********

当我们想要将一个函数的参数格式原封不动的传给内部的一个函数,应该使用*args与**kwargs,装饰器常用

6.命名关键字参数:放在*与**之间的参数称之为命名关键字参数

注意:命名关键字参数必须按照key=value的形式传值

def foo(x,y,*args,m,n,**kwargs): #args=(3,4,5,6,7,8)
    print(x,y) # 1,2
    print(args) #(3,4,5,6,7,8)
    print(m,n) #222,333
    print(kwargs)

foo(1,2,3,4,5,6,7,8,n=333,m=222,a=1,b=2)

 





以上是关于初识函数的主要内容,如果未能解决你的问题,请参考以下文章

Java初识方法

初识OpenGL 片段着色器(Fragment Shader)

初识OpenGL 片段着色器(Fragment Shader)

初识OpenGL (-)纹理(Texture)

初识OpenGL (-)纹理(Texture)

初识OpenGL (-)纹理(Texture)