第五篇:函数

Posted Little_five

tags:

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

 

  本篇介绍什么是函数、函数的特性、函数的定义、函数的调用、以及函数的参数、以及关于全局变量和局部变量的使用等等。

一、什么是函数:

  函数是最基本的一种代码抽象方式,为了实现某种特定的功能而组织的带名字的代码块。

  那为什么要使用函数呢?

    1、避免代码的重复性,即函数的可以重复使用的。

    2、保持代码的一致性,易于修改。即当函数被定义好,即可在很多地方为了实现相同或者相似的功能时可调用函数,而当这些功能发生改变时,我们只需修改该函数即可,不必麻烦的去修改每一处实现该功能的代码。

    3、扩展性。

  其实简单的来说:函数就行一个有着特定功能作用的工具,例如锤子或者扳手等,每当我们需要使用这些工具的时候,我们不需要临时请师傅制作这样一件工具,这样将会十分繁琐且消耗大量的时间,故我们仅需花费一定的代价去借用这些工具即可

这些代价我们暂且可以把其称之为参数,而造这些工具的人为了怕别人不知道这些工具的使用,通常会给这些工具贴上使用说明(函数说明),而制作这些工具也会使用许多材料结构即(函数体),当然一件工具会有命名即(函数名),而当我们使用工具

完成后会获得一些效果,我们也可以将这些效果称为(返回值)。当然有工具自然会有工具箱即(类)。

二、函数的定义:

  定义一个函数要使用 def 语句,依次写出函数名括号、括号中的参数冒号:,然后,在缩进块中编写函数说明,函数体,函数的返回值用 return 语句返回。

def  函数名(参数1,参数2,参数3,......):
    """
       函数说明    
    """
    函数体
    return   返回值

  例如:

#定义一个获取平方值的函数
def calc(x):
    """
    :param x: 输入数字
    :return: 获取该数字的返回值
    """
    res =x**2
    return res  #获取返回值
res = calc(10)
print(res)

  注意:函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,即函数内return后面代码将无效,并将结果返回。如果没有return语句的函数,很多时候将其称为过程,但其实默认返回None.

  函数的定义通常类似于变量的定义,定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。与变量类似,函数的定义也相当于将代码块以一种特定的方式存储在内存中,只有当调用的时候才会执行,

而当我们打印函数名时,其实打印的是内存地址;当打印函数名加括号时,则是返回值;例:

def greater(name):
    print("hello world,%s !"%name)
    return name

greater("amanda")  #调用函数,执行函数
print(greater) #打印函数地址
print(greater("amanda")) #调用函数,并且获取返回值

#输出为:
#hello world,amanda !
#<function greater at 0x00000241C37A3E18>
#hello world,amanda !
#amanda

  当调用函数时,需传入指定类型的参数,才会执行函数体中的代码块。

 

三、函数的参数:

  3.1 形参和实参

    形参即形式参数,函数完成其工作时所需的一项信息。形参不占用内存空间,只有在被调用时才会占用内存空间,调用完了即被释放。

    实参即实际参数,调用函数时传给函数的信息。例如:

#形参和实参
def greater(name):  #name即为形参
    print("hello world,%s !"%name)
    return name

greater("amanda") #Amanda即为实参

    上述而言:在调用函数并传入参数即greater("Amanda"),将实参"Amanda"传递给函数greater(),这个值就被存储在形参name中。

  3.2 位置参数和关键字参数

    位置参数--> 在调用函数时,Python必须将每个实参都关联到函数定义的一个形参中,最简单的关联方式就是基于实参的顺序,这种方式即为位置实参

    关键字参数 --> 传递给函数的是键值对。由于在实参中的将名称和值关联起来,所以在传入时无需考虑顺序。

技术分享图片
#位置参数,一一对应,不可多也不可少
def introduction(name,age,hobby):
    intro ="My name is %s,I‘m %d years old,my hobby is %s."%(name,age,hobby)
    print(intro)

introduction("Amanda",23,"eating")
位置参数
技术分享图片
#关键字参数,无需一一对应,但也不可多不可少
def introduction(name,age,hobby):
    intro ="My name is %s,I‘m %d years old,my hobby is %s."%(name,age,hobby)
    print(intro)

introduction(age=22,name="little-five",hobby="dancing")
关键字参数

    但位置参数和关键字参数混合使用时:

      1、位置参数必须写在关键字参数的左边

      2、同一个参数不能两次或者多次传值,只能传一次

技术分享图片
#位置参数和关键字参数混合使用
def introduction(name,age,hobby):
    intro ="My name is %s,I‘m %d years old,my hobby is %s."%(name,age,hobby)
    print(intro)
    
introduction("Amanda",age="23",hobby="eating")

#位置参数必须写在关键字参数左边
#introduction(name="Amanda",23,hobby="eating") 
#同一个参数传值只能一次
#introduction("Amanda",23,age="eating")
混合使用

    注:在没有参数组的情况下,传入的值必须与形参的数量一致。

  3.2 默认参数   

    定义函数时我们可以给参数传递默认值,当调用函数时没有传递该参数值时使用默认参数值。带默认值的参数称为默认参数,而无默认值的参数为必需参数,调用函数时必需参数必填,默认参数选填。例如:

#默认参数
def introduction(name,age,hobby="runing"):
    intro ="My name is %s,I‘m %d years old,my hobby is %s."%(name,age,hobby)
    print(intro)

#当不给默认参数传值时,默认使用默认参数值
introduction("Amanda",23)
#而给默认参数传值时,则覆盖
introduction("Amanda",age=23,hobby="eating")

 

  3.4 参数组

    *args -->传入的多余的位置参数,被args接收。即当要想传入多于形参的实参,并且以位置参数的方式传入,多于的参数其以元组的形式接收。

技术分享图片
def calc(x,y,*args):
    res =x+y
    # print(x,y)
    print(x,y,args)#*args-->多于的参数,位置参数传入,以元组的形式接收
    return res
calc(1,2,7,8,6)
calc(2,3,{"name":"alex"}) #即使传入字典,字典当成整体也会以元组的方式被接收
calc(3,4,["alex","James"],"hello world")
calc(3,4,*["alex","James"]) #相当于该列表遍历,逐个添加至列表并且转为元组
calc(3,4,*"alex")

#输出为:
#1 2 (7, 8, 6)
#2 3 ({‘name‘: ‘alex‘},)
#3 4 ([‘alex‘, ‘James‘], ‘hello world‘)
#3 4 (‘alex‘, ‘James‘)
#3 4 (‘a‘, ‘l‘, ‘e‘, ‘x‘)
*args

    **kwargs -->传入的多余的关键字参数,被kwargs接收。即要想传入多于形参的实参,并且以关键字参数的形式传入,多于的参数其以字典的形式接收

技术分享图片
#
def calc(x,y,**kwargs):
    res =x+y
    #print(x,y)
    print(x,y,kwargs)#**kwargs-->多于的参数,位置参数传入,以字典的形式接收
    return res
calc(x=1,y=3,name="alex")
calc(1,2,**{"name":"Amanda"})

#输出为:
#1 3 {‘name‘: ‘alex‘}
#1 2 {‘name‘: ‘Amanda‘}
**kwargs

    当在函数值定义参数时,同时定义*args、**kwargs时,可以传入任何参数。多余的位置参数,传入函数,以元组的方式被存储在*args中;而多余的关键字参数,传入函数,以字典的方式被存储在**kwargs中。

def calc(x,y,*args,**kwargs):
    res =x+y
    print(x,y,args,kwargs)#*args,**kwargs-->可以传入任何参数
    return res
calc(1,23,"222",["Amanda","little-five"],greater="hello world")

#输出为:
#1 23 (‘222‘, [‘Amanda‘, ‘little-five‘]) {‘greater‘: ‘hello world‘}

 

 

四、全局变量和局部变量:

    未完待续

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

Python开发第五篇:函数

第五篇:函数

python学习第五篇 常用模块

第五篇 函数进阶

python开发 第五篇面向对象

Python成长之路第五篇:Python基础之装饰器