python 函数

Posted edwin_716

tags:

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

1.概念

  • 由若干条语句组成的语句块,他的组织代码是代码的最小单元
  • 完成一定的功能

2.作用

  • 最基本的封装,按照功能组织一段代码
  • 可以复用,减少代码量
  • 代码简洁美观,更易懂

3.函数的分类

  • 内建函数 max()
  • 库函数 match.ceil()
  • 自定义函数 使用def关键字定义

4.定义

  • 函数名
  • 缩进
  • return 没有缺省返回None
  • 形参

5.调用

  • 函数名加括号,后面跟实参

6.参数

6.1实参的传入方式
  • 按照位置对应(位置传参)多了少了都不行
  • 按照形参名称传参(关键字传参)多了少了都不行,无所谓先后顺序
  • 不允许关键字参数在前
6.2形参的定义
  • 参数缺省值(定义时给形参一个值)
  • 有缺省值的参数必须在无缺省值参数后面
6.2.1可变的位置参数
  • *args :可变形参,接收零个或多个参数,生成一个元组(不可变),星号后面参数名可自定义
6.2.2可变的关键字形参
  • **kwargs: 尽可能收集,生成一个字典(可变),调用时要使用关键字传参,作为形参的最后一个参数

位置传参必须在关键字传参的前面

6.2.3 keyword-only
  • 必须使用关键字传参

  • 定义方式:

def fn(*,a,b):
    pass
6.2.4 positional-only
  • python3.8语法
  • “/” 之前只支持位置传参
  • 定义方式
def fn(a,/,b): a只支持位置传参
    pass
参数规则
  • 参数列表参数一般顺序是: positional-only,普通参数,缺省参数,可变位置参数,keyword-only参数(可带缺省值),可变关键字参数
  • 代码易读易懂
  • 按照书写规范定义函数
6.3实参传入
  • 函数
def sun_(*args):
    print(args)
    s=0
    for x in args:
        s+=x
    return s
  • 传参方式(参数解构)
sum_(*[1.,2,3])

sum_(*range(10)

sum_(*[1,2], *(4,5), *{7,8})

#字典参数结构:
sum_(*{‘a‘:1,‘b‘:2})    #解构出key
sum_(**{‘a‘:1,‘b‘:2})    #解构出关键字传参key=value

实参的参数解构

实参前面加星号,表示将后面的可迭代对象里的元素作为位置参数传入

7.函数返回值

  • 函数执行过程中碰到return语句就代表这个函数执行完毕
  • 没有return的函数,默认返回None
  • 一个函数就算有多条return ,也只会执行一个
  • 返回值的作用:结束函数调用,返回返回值

8.函数的作用域

  • 通常指的是变量的作用域
作用域分类
全局作用域
  • 在整个程序运行环境中都可见
  • 全局作用域中的变量称为全局变量global
局部作用域
  • 在函数/类的内部可见
  • 局部作用域中的变量称为局部变量,其使用范围不能超过其所在局部作用域
  • 也称为本地作用域local

一般外部作用域在内部可见,内部作用域外部不可见

向内穿透,就近选择

global使用原则

  • 外部作用域变量会在内部作用域可见,但也不要在这个内部的局部作用域中直接使用,因为函数的目的就是为了封装,尽量与外界隔离
  • 如果函数需要使用外部全局变量,请尽量使用函数的形参定义,并在调用传实参解决
  • 一句话:不用global,学习他就是为了深入理解作用域

闭包

概念
自由变量
  • 未在本地作用域中定义的变量。例如定义在内层函数外的外层函数的作用域中的变量
闭包
  • 就是一个概念,出现在嵌套函数当中,指的是内层函数引用外层函数的自由变量,就形成了闭包

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

python使用上下文对代码片段进行计时,非装饰器

python 元组有用的函数,方法和片段。

Python代码阅读(第26篇):将列表映射成字典

VSCode自定义代码片段——声明函数

Python学习 :函数

VSCode自定义代码片段8——声明函数