函数一

一、简介

img

在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满足下述条件的程序实体:

  1. 在运行时创建
  2. 能赋值给变量或数据结构中的元素
  3. 能作为参数传给函数
  4. 能作为函数的返回结果

在 Python 中,所有函数都是一等对象,是面向对象程序设计最基本的单元

二、什么叫函数

1、定义

函数就是把完成特定功能的一段代码封装起来。给该功能起一个名字(函数名)

在一个完整的项目,某些特定的功能如果被返回使用,那么我们就可以把这些代码封装成函数,当我们要去使用的时候直接调用函数即可

2、优点

  1. 函数能提高应用的模块性,
  2. 方便管理和维护,便于复用

Python提供了许多内建函数,比如print() input()。但也可以自己创建函数,这被叫做用户自定义函数。

三、函数的使用

3.1、定义函数

1、语法格式

def 函数名( 形参列表… ):
    #函数体
    return [expression]

2、语法结构图

img

image

3、说明

  1. def 是定义函数的关键字。
  2. 函数名是这个函数的符号(引用),调用这个函数的时候我们需要函数名。
  3. 函数名后的圆括号是必须的。
  4. 形参列表表示我们可以定义多个形参,必须放在()中间,接受函数调用时传递过来的参数。形参不是必须的,根据需要决定是否需要定义形参
  5. 圆括号后面必须有一个分号:
  6. 函数体缩进四格,封装功能代码块,
  7. return [表达式] 结束函数,不是必须的,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
  8. 当一个文件定义多个函数的时候,函数与代码之间空两行

4、举个栗子

  1. 定义无参数无返回值的函数

    def show():
        "函数_文档字符串"
        print("自定义函数")
        print("我是函数内的代码2")
    
  2. 定义有参函数,无返回值的,形参在函数内部可以作为普通变量使用

    def add(a, b):
        #空四格
        print(a + b)
    
  3. 定义无参数有返回值的函数

    def get_name():
        name = '隔壁老王'
        return name
    
  4. 定义有参数有返回值的函数

    def add(n1, n2):
        num = n1 + n2
        return num
    

5、函数命名规则

  1. 可以由字母,下划线,和数字组成
  2. 数字不能开头
  3. 不能与关键字重名
  4. 函数名一般以动词开头
  5. 多个单词小写使用下划线拼接:get_name,set_name,is_delete

6、函数返回值

  1. 无返回值
    • 不写retrun
    • 仅retrun 不带返回值
    • 使用retrun 返回 None类型(返回对象)
  2. 返回一个对象
  3. 返回多个对象,其实就是返回一个元组,本质是还是一个对象

3.2、函数调用与引用

1、说明

定义函数的目的是为了让函数做一些事情。但是函数如果仅仅定义不会自己去执行。

时刻记住一句话,函数只有被调用才能被执行!

所以想要函数执行,必须显示的去调用函数。

在使用函数的时候,一定要保证声明在前,调用在后!

2、语法格式

函数名(实参)

3、举个栗子

  1. 调用无参函数

    def show():
        print("自定义函数")
        print("我是函数内的代码2")
    show()
    
  2. 调用有参的函数

    def add(a, b):
        print(a + b)
    add(1, 2)
    
  3. 调用有参的函数并返回数据

    def add(n1, n2):
        num = n1 + n2
        return num
    number = add(1,2)
    print(number)
    
  4. 在函数调用时也可以使用*语法,来分解参数的集合

    def func(a,b,c,d):  
        print a,b,c,d  
    func(*(1,2,3,4))  
    func(1,*(2,3),**{'d':4})  
    func(1,c=3,*(2,),**{'d':4}) 
    

4、注意事项

  1. 函数的引用
    所谓的函数的引用其实就是将一个函数对象赋值给变量,一个函数个可以赋值给多个不同变量

  2. 栗子1

    def func():
        print('函数引用')
    func1 = func
    func2 = func
    func3 = func
    # 实际就是想相当于func()
    func1()
    func2()
    func3()
    

四、 参数详解

1、说明

除了支持正常的参数外,Python函数还支持数量可变的参数。这些参数有主要有三种类别

完整的语法

def fun(position_arg, keyword_args,defalut_args, *tuple_args, **dict_kw_args):
    pass

简要说明:

  1. position_arg

    位置参数(必须参数)。必须参数必须以对应的关系一个一个传递进入函数,函数调用时传递的实参必须和函数定义时的形参一一对应,不能多也不能少,顺序也得一致

  2. keyword_args

    关键字参数。指的是调用的时候可以使用参数名的方式传入,特点是传入的时候可以不需要按着顺序出传入

  3. defalut_args

    默认值参数 ,非必传参数 声明了默认值的参数

  4. *tuple_args

    可变长度参数,特点,只能接收未命名的参数,把这些参数先封装到一个列表或元组中

  5. **dict_kw_args

    可变长度参数,特点是将参数放入字典中

2、 默认参数值

2.1、说明

这允许用户为函数的参数定义一些默认值。这种情况下,可以以更少的参数来调用该函数,而函数调用时未提供的参数,Python会使用默认提供的值作为这些参数值

2.2、举个栗子

  1. 栗子1

    def show_args(arg, agr1,def_arg=1, def_arg2=2):
        return "arg={}, def_arg={}, def_arg2={}".format(arg, def_arg, def_arg2)
    

2.3、调用方式(三种)

  1. 只提供非缺省位置参数值

    def show_args(arg, def_arg=1, def_arg2=2):
          return "arg={}, def_arg={}, def_arg2={}".format(arg, def_arg, def_arg2)
     show_args("普通参数")
      #指定参数名称 
     show_args(arg="普通参数")
    
  2. 提供的值覆盖一些默认的参数值,包括非缺省位置参数

    def show_args(arg, def_arg=1, def_arg2=2):
          return "arg={}, def_arg={}, def_arg2={}".format(arg, def_arg, def_arg2)
    show_args("普通参数", "默认参数1")
    
  3. 为所有参数提供值,可以用这些值覆盖默认参数值

    def show_args(arg, def_arg=1, def_arg2=2):
          return "arg={}, def_arg={}, def_arg2={}".format(arg, def_arg, def_arg2)
    show_args(arg="普通参数", "默认参数1", "默认参数2")
    

2.4、注意事项

  1. 必选参数在前,默认参数在后
  2. 有默认值的参数在调用的时候是非必要的

3、关键字参数(kwarg)

3.1、说明

关键字参数是实参里面的概念,以“kwarg=value”的形式使用关键字参数也可以调用函数。其中kwarg指函数定义中使用的参数名称,在调用函数的时候声明某个参数是属于某个关键字的。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
举个栗子

  1. 栗子1

    def f(name,age):
       print(name,age)
    f(name="小明",18)
    

4、默认值参数

4.1、说明

默认参数是在函数声明的时候,可以给某个参数指定默认值,这样的参数叫做默认值参数。如果在调用函数的时候,默认参数没有接收到对应的实参,那么就会将默认值赋值给这个参数

4.2、举个栗子

  1. 栗子1

    def f(name,age,sex="男"):
        print(name,age,sex)
    f(name="小明",18)
    

5、不定长参数(*args)

5.1、说明

通常情况下, 定义函数的时候, 我们只能定义有限的形参个数, 实参个数通常情况下也要和形参来定义.

如果我们想传递任意多个参数给函数, 只能把这些参数先封装到一个列表或元组中, 然后再传进去. 比较麻烦.

python 提供了可变参数, 可以接受任意多个参数, 然后函数内部会自动的把这些参数封装在一个元组中, 供函数内部使用,注意*args只能接受位置参数

5.2、举个栗子

  1. 栗子1

    def fun(*args):
        print(args)
    fun("小明",18,"male")
    
  2. 栗子2

    def fun(*args):
        return args
    fun("小明",18,"male")
    

5.3、注意事项

  1. 函数的形参中最多只能定义一个可变参数, 定义多个可变参数会出现语法错误.
  2. 可变参数一般作为形参中的最后一个参数.
  3. 如果可变参数不是最后一参数, 则给可变参数后的参数赋值的时候只能使用关键字参数赋值

6、不定长参数( **kwargs)

6.1、说明

但是上面的args只能接收未命名的参数,那假如有类似于关键字参数的不定长参数该怎么办呢?python里面使用(变量名)来接收不定长的命名变量参数。同样,python里面也约定俗成使用kwargs接收不定长命名参数。**kwargs接收了不定长参数之后,将这些参数放到一个字典里面,可以通过key获取到相应的参数值

6.2、举个栗子

  1. 栗子1

     def f(**kwargs):
         print(kwargs)
     f(name="小明",age=18,sex="male")
    

五、综合

1、说明

假如一个函数使用了上面所有种类的参数,那该怎么办?为了不产生歧义,python里面规定了假如有多种参数混合的情况下,遵循如下的顺序使用规则

def fun(必须参数,默认参数,*args,**kwargs)pass

2、举个栗子

  1. 栗子1

    def f(*args,**kwargs):
         print(args)
         for i in kwargs:
             print("%s:%s"%(i,kwargs[i]))
     f(*[100,200,300],**{"a":'abc',"b":31231})
    

3、注意事项

函数在执行过程中只要遇到return语句,就会停止执行并返回结果,也可以理解为 return 语句代表着函数的结束 如果未在函数中指定return,那这个函数的返回值为None,return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页