函数

函数

1.函数介绍

1.什么是函数

函数就是盛放代码的容器,把实现某个功能的一组代码丢到一个函数中,就做成了一个小工具。

具备某一种功能的工具--------函数

事先准备工具的过程-----------函数的定义

遇到应用场景拿来就用-------函数的调用

2.为何要用函数

  在没有用函数之前面临的问题:

    1.代码冗余,程序组织结构不清晰,可读性差

    2.扩展型差

3.如何用函数

原则:先定义、后调用

定义函数的语法

1 def 函数名(参数1,参数2,参数3,...):
2             """
3             文档注释
4             """
5             代码1
6             代码2
7             代码3
8             return 返回值

如何调用函数

函数名(参数1,参数2,参数3,...)

 

函数在调用阶段只定义函数不执行函数体代码,但是会检测语法。

函数在调用阶段,先通过函数名找到函数的内存地址,然后函数的内存地址加()会触发函数体代码的运行。

2.函数的返回值

用return控制函数的返回值;

函数内可以有多个return,但只要执行一次,整个函数就立即结束,并且将return后的值当做本次调用的结果返回,具体来说,函数的返回值又分为三类:

1、return 值:返回的就是该值本身

2、return 值1,值2,值3:返回的是一个元组

函数内可以没有return,或就一个return后没有值:返回的是None

3.定义与调用函数的三种形式

一、定义函数的三种形式

1.无参

 def func():
     print('=====')
     print('hello')
     print('=====')
 func()

2.有参

 def max2(x,y):
     if x > y:
         print(x)
     else:
         print(y)
 max2(10,11)

3.空函数

def func():
     pass

一般用于构思程序的阶段。

二、调用函数的基本形式

1.语句形式

 def login():
     user = input("u>>>: ")
     pwd = input("p>>>: ")
     if user == 'egon' and pwd == '123':
         print('ok')
     else:
         print('error')
 login()

2.表达式形式

 def max2(x,y):
     if x > y:
         return x
     else:
         return y
 sal = max2(30,40) * 12

3.可以把函数调用当做参数传给另外一个函数

 def max2(x,y):
     if x > y:
         return x
     else:
         return y

 res = max2(max2(10,20),30)
 print(res)

4.函数的参数

一 函数参数分为两大类:

1、形参:在函数定义阶段括号内定义的变量名,称之为形式参数,简称形参

2、实参:在函数调用阶段括号内传入的值,称之为实际参数,简称实参

形参与实参的关系是:

在调用函数时,实参的值会绑定给形参名,然后可以在函数内使用,函数调用完毕后,解除绑定

二:参数详解

2.1 位置形参::在函数定义阶段按照从左到右的顺序依次定义的形参,称之为位置形参
 特点:必须被传值,多一个不行少一个也不行

2.2 默认形参:在函数定义阶段就已经为某个形参赋值了,称之为默认形参
 特点:在函数定义阶段就已经赋值了,意味着在调用阶段可以不用为其赋值

  注:可以混用位置形参与默认形参,但是位置形参必须在前

  默认形参需要注意的问题是:
  1、默认形参的值只在函数定义阶段被赋值一次
  2、默认形参的值通常应该是不可变类型

2.3 位置实参:在函数调用阶段按照从左到右的顺序依次传入的值,称之为位置实参
 特点:按照顺序与形参一一对应

2.4 关键字实参:在函数调用阶段按照key=value的格式传入的值,称之为关键字实参
特点:可以打乱顺序,但是仍然能够为指定的形参赋值

  可以混用位置实参与管家腻子实参,但是
   1、位置实参必须在关键字实参前
   2、不能为同一个形参重复赋值

2.5 *与**在形参与实参中的应用
可变长的参数:可变长指的是在函数调用阶段,实参的个数不固定,而实参是为形参赋值的,所以对应着必须要有一种特殊格式的形参能用来接收溢出的实参。

形参中带*:*会接收溢出的位置实参,然后将其存成元组,然后赋值给紧跟其后的变量名

形参中带**:**会接收溢出的关键字实参,然后将其存成字典,然后赋值给紧跟其后的变量名

实参中带*:*后跟的必须是一个可以被for循环遍历的类型,*会将实参打散成位置实参

实参中带**:**后跟的必须是一个字典,**会将实参打散成关键字实参

posted @ 2021-03-25 19:23  余鑫  阅读(78)  评论(0)    收藏  举报