zoukankan      html  css  js  c++  java
  • python基础-函数详解

    python基础-函数详解

    一、什么是函数

    函数:就是一套定义好的流程,输入数据得到结果。函数之间可能相互独立,也可能一个函数的输入是另一个函数的输出,也可能一个函数的内部调用另一个函数。
    		或者说是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
    

    二、函数的作用

    使用函数可以加强代码的复用性,提高程序编写的效率

    三、定义函数

    python中函数结构:

    def 函数名(参数1,参数2,参数3):
    	函数体第一行
    	函数体第二行
    	……
    	函数体第N行
    	return 返回值
    
       一个函数可以有参数,也可以没有参数。如果没有参数函数名后面为一对括号,如果函数有	
    参数参数可以有一个,也可以有很多个参数,可以以任何数据类型,函数参数,甚至可以是另
    一个函数。
    函数可以没有return语句,有一个return语句,也可以有多个return语句。
    

    下面3种情况是等价的:
    1.没有return语句。
    2.Return语句后无任何值。
    3.Return None

    	在函数中可以使用return将里面的结果返回。出来。哪一代运行到了return,那么函数就会结束
    return后面的代码都不会被执行。
    	在一个Python工程中,应保证每个函数名称唯一,函数体就是这个函数需要执行的一系列操作
    操作可能只有一行。也可能有很多行。
    	函数只做一件事Python编码规范建议一个函数的函数体不超过20行代码,如果超过,说明这个函数做了不止一件事,就应该把这个函数拆分成为更小的函数。
    

    四、函数的作用域和命名空间

    1.作用域(scope):变量生效的区域

    在Python中一共有两种作用域
    全局作用域:(类似于windows中path环境变量)

    • 全局作用域在程序执行时创建,在程序执行结束时销毁
    • 所有函数以外的区域都是全局作用域
    • 在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问

    函数作用域

    • 函数作用域在函数调用时创建,在调用结束时销毁
    • 函数每调用一次就会产生一个新的函数作用域
    • 在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问

    变量的查找(类似于windows中环境变量的查找)

    • 当我们使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,如果没有则继续去上一级作用域中寻找,如果有则使用,如果依然没有则继续去上一级作用域中寻找,以此类推 直到找到全局作用域,依然没有找到,则会抛出异常
      NameError: name ‘a’ is not defined
      在这里插入图片描述

    2.命名空间(namespace)

    • 命名空间:变量存储的位置,每一个变量都需要存储到指定的命名空间当中
      每一个作用域都会有一个它对应的命名空间
      全局命名空间,用来保存全局变量。函数命名空间用来保存函数中的变量
      命名空间实际上就是一个字典,是一个专门用来存储变量的字典

    locals()用来获取当前作用域的命名空间
    如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间,返回的是一个字典,可以通过字典的的修改方式添加或者删除变量。

    五、调用函数

    函数之间可以串行运行数据,先由一个函数处理,在有另一个还出处理函数,也可以嵌套运行在一个函数里面调用另一个函数,当然在函数里面还可以定义函数,这个属于高级函数。

    1.函数递归:

    整体思想是,将一个大问题分解为一个个的小问题,直到问题无法分解时,再去解决问题
    递归式函数的两个要件
    1.基线条件
    - 问题可以被分解为的最小问题,当满足基线条件时,递归就不在执行了
    2.递归条件
    - 将问题继续分解的条件
    递归和循环类似,基本是可以互相代替的,
    循环编写起来比较容易,阅读起来稍难
    递归编写起来难,但是方便阅读

    2.高阶函数:

    接收函数作为参数,或者将函数作为返回值的函数是高阶函数
    当我们使用一个函数作为参数时,实际上是将指定的代码传递进了目标函数

    五、函数中的参数

    1.形参:
    定义形参时,可以为形参指定默认值
    指定了默认值以后,如果用户传递了参数则默认值没有任何作用
    如果用户没有传递,则默认值就会生效
    2.实参的传递方式
    位置参数
    位置参数就是将对应位置的实参复制给对应位置的形参
    第一个实参赋值给第一个形参,第二个实参赋值给第二个形参 。。。
    fn(1 , 2 , 3)

    关键字参数
    关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数
    fn(b=1 , c=2 , a=3)
    print(‘hello’ , end=’’)
    位置参数和关键字参数可以混合使用
    混合使用关键字和位置参数时,必须将位置参数写到前面
    fn(1,c=30)
    不定长参数

    在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参
    它将会将所有的实参保存到一个元组中
    *a会接受所有的位置实参,并且会将这些实参统一保存到一个元组中(装包)
     带星号的形参只能有一个
     *形参只能接收位置参数,而不能接收关键字参数
    def fn3(*a) :
        print('a =',a)
    
    **形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中
      字典的key就是参数的名字,字典的value就是参数的值
    **形参只能有一个,并且必须写在所有参数的最后
    

    六、python函数的注意事项

    函数参数的类型决定了它的作用范围。
    按住外面的容器类作为参数传递到函数中之后,如果函数修改了这个容器里面的值,那么函数外面的容器也会受到影响,但是函数外面的普通变量作为参数传递到函数中,并且函数修改了这个参数是外面的变量不受影响。

  • 相关阅读:
    关于开发BugRaid的想法(2)
    杭州.net俱乐部第一次见面会情况
    关于Bug管理的过程
    关于开发BugRaid的想法(1)
    变态的VS2005 SP1
    vs2003 sp1 download url
    proxy software
    敏捷开发
    Enterprise Library文档
    ETL
  • 原文地址:https://www.cnblogs.com/tianyao2020/p/12755244.html
Copyright © 2011-2022 走看看