Python之函数

函数

函数简介(function)

- 函数也是一个对象
- 对象是内存中专门用来存储数据的一块区域
- 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用
- 创建函数:
    def 函数名([形参1,形参2,...形参n]) :
        代码块
    - 函数名必须要符号标识符的规范
        (可以包含字母、数字、下划线、但是不能以数字开头)    
- 函数中保存的代码不会立即执行,需要调用函数代码才会执行
- 调用函数:
    函数对象()
- 定义函数一般都是要实现某种功能的    

函数的参数

- 在定义函数时,可以在函数名后的()中定义数量不等的形参,
    多个形参之间使用,隔开
- 形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
- 实参(实际参数)
    - 如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,
        实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参
定义形参时,可以为形参指定默认值,指定了默认值以后,如果用户传递了参数则默认值没有任何作用,如果用户没有传递,则默认值就会生效。实参的传递方式:位置参数,位置参数就是将对应位置的实参复制给对应位置的形参,第一个实参赋值给第一个形参,第二个实参赋值给第二个形参 。关键字参数,关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数;位置参数和关键字参数可以混合使用,混合使用关键字和位置参数时,必须将位置参数写到前面;函数在调用时,解析器不会检查实参的类型,实参可以传递任意类型的对象;在函数中对形参进行重新赋值,不会影响其他的变量,如果形参执行的是一个对象,当我们通过形参去修改对象时,会影响到所有指向该对象的变量。
在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参,它将会将所有的实参保存到一个元组中;带星号的形参只能有一个,带星号的参数,可以和其他参数配合使用;可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递,如果在形参的开头直接写一个*,则要求我们的所有的参数必须以关键字参数的形式传递,*形参只能接收位置参数,而不能接收关键字参数;**形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中,字典的key就是参数的名字,字典的value就是参数的值,**形参只能有一个,并且必须写在所有参数的最后;传递实参时,也可以在序列类型的参数前添加星号,这样他会自动将序列中的元素依次作为参数传递,这里要求序列中元素的个数必须和形参的个数的一致;通过 **来对一个字典进行解包操作。

返回值,返回值就是函数执行以后返回的结果,可以通过 return 来指定函数的返回值,可以之间使用函数的返回值,也可以通过一个变量来接收函数的返回值;return 后边跟什么值,函数就会返回什么值,return 后边可以跟任意的对象,返回值甚至可以是一个函数,如果仅仅写一个return 或者 不写return,则相当于return None,在函数中,return后的代码都不会执行,return 一旦执行函数自动结束。

 help()是Python中的内置函数,通过help()函数可以查询python中的函数的用法,语法:help(函数对象)。

作用域指的是变量生效的区域,Python中一共有两种作用域:全局作用域,全局作用域在程序执行时创建,在程序执行结束时销毁,所有函数以外的区域都是全局作用域,在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问;函数作用域在函数调用时创建,在调用结束时销毁,函数每调用一次就会产生一个新的函数作用域,在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问。
变量的查找:当我们使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,如果没有则继续去上一级作用域中寻找,如果有则使用,如果依然没有则继续去上一级作用域中寻找,以此类推,直到找到全局作用域,依然没有找到,则会抛出异常
,NameError: name 'xx' is not defined;在函数中为变量赋值时,默认都是为局部变量赋值,如果希望在函数内部修改全局变量,则需要使用global关键字,来声明变量。
命名空间(namespace):命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名空间当中,每一个作用域都会有一个它对应的命名空间,全局命名空间,用来保存全局变量。函数命名空间用来保存函数中的变量,命名空间实际上就是一个字典,是一个专门用来存储变量的字典;locals()用来获取当前作用域的命名空间,如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间,返回的是一个字典;globals() 函数可以用来在任意位置获取全局命名空间。

函数式编程

- 在Python中,函数是一等对象
- 一等对象一般都会具有如下特点:
    ① 对象是在运行时创建的
    ② 能赋值给变量或作为数据结构中的元素
    ③ 能作为参数传递
    ④ 能作为返回值返回
    
- 高阶函数
    - 高阶函数至少要符合以下两个特点中的一个
      ① 接收一个或多个函数作为参数
      ② 将函数作为返回值返回 

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

filter()
filter()可以从序列中过滤出符合条件的元素,保存到一个新的序列中
参数:
1.函数,根据该函数来过滤序列(可迭代的结构)
2.需要过滤的序列(可迭代的结构)
返回值:
过滤后的新序列(可迭代的结构)

 匿名函数 lambda 函数表达式 (语法糖)
lambda函数表达式专门用来创建一些简单的函数,他是函数创建的又一种方式
语法:lambda 参数列表 : 返回值
匿名函数一般都是作为参数使用,其他地方一般不会使用

sort()
该方法用来对列表中的元素进行排序
sort()方法默认是直接比较列表中的元素的大小
在sort()可以接收一个关键字参数 , key
key需要一个函数作为参数,当设置了函数作为参数
每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素的大小

sorted()
这个函数和sort()的用法基本一致,但是sorted()可以对任意的序列进行排序
并且使用sorted()排序不会影响原来的对象,而是返回一个新对象

将函数作为返回值返回,也是一种高阶函数,这种高阶函数我们也称为叫做闭包,通过闭包可以创建一些只有当前函数能访问的变量,可以将一些私有的数据藏到的闭包中;形成闭包的要件:① 函数嵌套, ② 将内部函数作为返回值返回, ③ 内部函数必须要使用到外部函数的变量。

装饰器 

通过装饰器,可以在不修改原来函数的情况下来对函数进行扩展, 在开发中,我们都是通过装饰器来扩展函数的功能的,在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数,可以同时为一个函数指定多个装饰器,这样函数将会安装从内向外的顺序被装饰 。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miki_souls

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值