函数

目录

  • 函数的用途
  • 函数的本质
  • 函数的语法结构
  • 函数的定义与调用
  • 函数的分类
  • 函数的返回值
  • 函数的参数

函数的用途

在学习函数前,编写程序代码的时候,总会出现一些重复性代码,为了减少重复性代码的使用,会将这些代码封装成一段函数,等到需要使用的时候,直接调用相应的函数就可完成操作。避免了重复写代码的情况。

函数的本质

函数的本质就是 先把程序段提前定义好封装成函数,然后才能调用

  • 函数的定义

    def my_func():
    pass

  • 函数的使用
    my_func() # 使用函数 我们更加习惯说成 调用函数 函数调用

函数的语法结构

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

函数的定义与调用

  • 函数必须先定义后使用
    定义函数的代码必须要在调用函数的代码之前先运行即可
  • 定义函数使用def 关键字 ,调用函数使用函数名加括号(可能参加额外的参数)
  • 函数在定义阶段只检测函数体代码语法,不执行函数体代码
    只有在调用阶段才会真正的执行函数体代码
  • 函数名的含义
    函数名绑定的是一块内存地址 里面存放了函数体代码
    要想运行该代码 就需要调用函数>>>:函数名加括号

函数的分类

  • 内置函数
    解释器提前定义好的函数,用户可以直接调用 len()

内置函数可以直接调用
但是数据类型的内置方法(函数)必须使用数据类型点的方式才可以调用
相当于是数据类型独有的一些内置方法

  • 自定义函数
  1. 空函数
    函数体代码使用pass顶替 暂时没有任何功能
    主要用于前期的项目搭建 提示主要功能
    def run():
    pass

  2. 无参函数
    函数定义阶段括号内没有填写参数
    def func():
    print('from func')

无参函数直接函数名加括号即可调用

3.有参函数
函数定义阶段括号内填写参数
def func(a, b):
print('from func')

有参函数调用需要函数名加括号并且给数据值

函数的返回值

返回值就是调用函数之后产生的结果 可有可无
获取函数返回值的方式是固定的
变量名 = 函数()
上述方式有则获取 没有则默认接收None

返回值有五种返回方式

  1. 函数体代码没有return关键字:默认返回None
def func():
     print('from func')
 res = func()
 print(res)  # None
  1. 函数体代码有return关键字:后面不写 也返回None
def func():
     print('from func')
     return
 res = func()
 print(res)  # None
  1. 函数体代码有return关键字:return后面写什么就返回什么(如果是数据值则直接返回 如果是变量则需要找到对应的数据值返回)
def func():
     print('from func')
     return 666
 res = func()
 print(res)
 def func():
     print('from func')
     name = 'jack'
     return name
 res = func()
 print(res)  # jack
  1. 函数体代码有return关键字并且后面写了多个数据值(名字) 逗号隔开:默认情况下回自动组织成元组返回
 def func():
     return [1, 2, 3, 4],{'name':'jack'},123
 res = func()
 print(res)  # [1, 2, 3, 4]
  1. 函数体代码遇到return关键字会立刻结束函数体代码的运行
def func():
    print('我在上面')
    return 123
    print('我在下面')
func()

函数的参数

  • 参数的简介
    函数的参数分为形式参数和实际参数两大类,简称形参和实参。

形参:在定义函数时,所需定义的值。本质就是变量名,用来接收外部传来的值。

实参:在调用函数时,所需输入的值。本质就是数据值(可以是常量,变量,表达式或三者的结合)

在函数调用阶段形参会临时与实参进行绑定 函数运行结束立刻解除

  • 位置参数
    位置参数就是按照顺序定义参数的,在定义函数时,按从左到右的依此定义形参的为位置形参
    按照这样的形式定义实参则为位置实参。位置形参与位置实参一一对应。
  1. 实参可以是数据值也可以是绑定了数据值的变量名
  2. 给位置形参传值得时候必须个数一致 多一个不行 少一个也不行
  • 关键字参数
    在调用函数时,实参可以是kv键值对,又称为关键词参数。这样的实参可以不按照顺序来定义实参,仍能定义形参。
    实参也可以是按位置或按关键字的混合使用,但必须保证关键字参数在位置参数后面,且不可以对一个形参重复赋值
def func(a, b):
    print(a, b)

func(1, 2)
func(b=1,a=2)
func(b=1,2)
func(2,b=1)
func(666,a=1)
  • 默认值参数
    默认值参数就是在函数定义阶段,( ) 中以 ... = ... 的形式填写的形参
def register(name, age, gender='male'):
    print(f"""
    -------------info-----------
    name:{name}
    age:{age}
    gender:{gender}
    ----------------------------
    """)
register('jason',18)
register('oscar',28)
register('jerry',38)
register('lili',18,'female')

1.在函数定义阶段就给形参绑定值 后续调用阶段就可以不传
2.调用阶段不传值就使用默认的 传了就用传了的
3.需要遵循前面总结的规律(简单的在左边 复杂的在右边)

  • 可变长参数
  1. 可变长形参与实参可以随意传值
def func(*x):
    print(x)

在形参中 * 的作用: 接受多余的位置参数组合成元组的形式赋值给* 后面的变量名

def func(**y):
    print(y)
func()  # {}
func(name='jack')  # {'name': 'jack'}
func(name='jack',age=18)  # {'name': 'jack', 'age': 18}
func(name='jack',age=18,hobby='read')  # {'name': 'jack', 'age': 18, 'hobby': 'read'}

在形参中 ** 的作用
接收多余的关键字参数并组织成字典的形式赋值给 ** 后面的变量名

posted @ 2022-07-01 20:36  Nirvana*  阅读(129)  评论(0)    收藏  举报