5.函数

作者: 辉神来了 | 来源:发表于2019-06-22 20:39 被阅读0次

定义函数

  • 函数代码快以def关键字开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间
  • 函数的第一行语句可以选择性地使用文档字符串--用于存放函数说明
  • 函数内存以冒号起始,并且缩进
image.png
image.png
函数参数--必备参数

函数定义中允许拥有多个参数,因此函数在调用的时候,也可能包含多个实参,向函数传递参数的方式有很多,通过实参和形参的顺序对应,这就是位置实参,只有位置一致,才能被正确匹配。位置实参是最简单也是最常用的关联方式


image.png
函数参数--关键字参数

关键字实参是传递给函数名称-值对。 直接在实参中将名称和值关联起来,因此向后函数传递实参时不会混淆,函数调用使用关键字参数来确定传入的值,使用关键字参数允许调用时参数的顺序与声明时不一致,因为Pythin解释器能够用参数名匹配参数值


image.png
函数参数-- 参数默认值

函数定义的时候,设置的参数是形参,那么也可以给每个形参指定一个默认值。当调用函数时,如果没有传入实参,就使用形参的默认值,如果调用的时候传入了实参,那么程序将使用传入的实参


image.png
函数参数-- 不定长参数

一个函数能处理比当初声明更多的参数,这些参数叫做不定长参数


image.png
image.png
函数参数--可变对象与不可变对象

不可变类型:如 整数、字符串、元祖。如fun(a),传递的只是a的值,没有影响a对象本身, 比如在fun(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。
可变类型: 如列表,字典,如fun(la),则是将la真正的传过去,修改后fun外部的la也会受影响

函数返回值

什么是返回值
 函数并非总是将结果直接输出,相反,函数额调用者需要函数提供一些通过函数处理过后的一个或者一组数据,只是调用者拥有了这个数据,才能做一些其他的操作,那么这个时候,就需要函数返回给调用者数据,这个就被称为返回值,想要在函数中把结果返回给调用者,需要在函数中使用return
return 语句

return 语句用于退出函数,选择性的向调用者返回一个表达式,直接return的语句返回 None

  • 示例


    image.png
接受返回值

我们可以将函数的返回值保存在变量中


image.png
函数类型
  • 无参数,无返回值的函数
  • 无参数, 有返回值的函数
  • 有参数, 无返回值的函数
  • 有参数,有返回值的函数
什么是yield呢?

yield的作用就是把一个函数变成一个generator,带有yield的函数不再是一个普通函数,Python解释器会将其视为一个生产器,如调用Xum函数,不会执行该函数,而是返回一个iterable迭代对象!
区别:与returne类型,都可以返回值,但不一样的地方,yield可以返多次,而 return只能返回一次

迭代器

迭代器迭代是Python最强大的功能之一,是访问集合元素的一种方式,
迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开发访问,直到所有元素被访问完结束。
迭代器智能往前不会后退。迭代器有两个基本的方法,iter()和next(). 字符串,列表或元祖,集合对象都可用于创建迭代器:

  list  = [1, 2, 3, 4]
  it = iter(list)
 print(next(it))
 输出:1
print(next(it))
输出:2

生成器 (generator)

使用了yield的函数被称为生成器。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器
在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值并在下一次从当前位置继续运行
注意:可以通过for循环或者手动调用Xun(5)的next()方法


image.png
生成器-send

a = yield 1 这个表达式,如果这个表达式只是x=1,相信每个人都能理解是把1的值赋值给了x,而现在等号右边是一个yield1,所以先要执行yield1,然后才是赋值 ,yield把1值返回到了调用者哪里,因为执行等号右边的 yield就是暂停 ,所以不会对a赋值,而这个表达式的下一步操作,赋值缺换句话说a = yield 1只执行了一半,而send()里面的值得作用是把值传进当前的yield中

变量的作用域

一个程序的所有的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的
变量的作用域决定了在那一部分程序你可以访问哪个特定的变量名称,两种最基本的变量作用域如下:

  • 全局变量
  • 局部变量
    定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域
可变类型的全局变量
  • 对于不可变类型的全局变量来说,要在函数中修改需要global声明
  • 对于可变类型的全局变量来说,要在函数中修改可以不使用global声明
局部变量

什么是局部变量


image.png
  • 局部变量,就是在函数内部定义的变量
  • 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
全局变量
  • 全局变量是声明在函数外部的变量,定义在函数外的拥有全局作用域


    image.png
修改全局变量
  • \color{red}{global}关键字
    要想在函数内部修改全局标变量需要使用global关键字声明
    image.png
匿名函数

\color{red}{匿名函数}定义函数的过程中,没有给定的名称就叫做匿名函数,Python中使用lambda表达式来创建匿名函数
lambda 来创建匿名函数规制:
- lambda 只是一个表达式,函数体比def 简单很多
-lambda 的主体是一个表达式,而不是一个代码块,所以不能写太多的逻辑进去
-lambda 函数拥有自己的命名空间,且不能访问自由参数列表之外或全局命名空间里的参数。
-lambda 定义的函数的返回值就是表达式的返回值,不需要return 语句块
-lambda 表达式的主要应用场景就是赋值给变量、作为参数传入其它函数

  • lambda 匿名函数的表达式规制是:lambda 参数列表:表达式
'''
    匿名函数
    lambda def [参数](): 表达式 return xx
    默认会返回一个表达式
'''
#没有参数的lambda表达式
# s = lambda : '哈哈啊哈'   #通过;lambda 声明一个匿名函数 并且 赋值给 s
# print(s())   #通过s调用匿名函数

#声明一个参数
# s = lambda x: x*2
# print(s(3))

# s = lambda x,y: x+y
# print(s(3,4))

'''
    矢量化的三元运算符
    if  条件:
        代码块哦
    else:
        代码块
        
    条件成立的内容   if 条件 else 条件不成立的内容
'''
s = lambda x,y: x if x > 2 else y
print(s(1,4))
递归函数
  • 递归函数:递归就是子程序(或函数)直接调用自己或通过一系列调用语句简介调用自己,是一种描述问题和解决问题的基本方法。(一句话,自己调用自己)
内置函数与高阶函数
  • 内置函数


  • 常用高阶函数


 list01 = [1,3,5,7,9]

#map
 nlist02 = [2,4,6,8,10]
new_list = map(lambda x,y:x*y,list01,list02)
print(list(new_list)) #将map对象转换为list
 for i in new_list:
    print(i)

#filter
 list02 = [2,4,6,8,10]
 new_list = filter(lambda x:x>4,list02)
 print(list(new_list))

# for i in new_list:
     print(i)

#reduce
from functools import reduce
 list02 = [2,4,6,8,10]
 new_list = reduce(lambda x,y:x+y,list02,0)
 print(new_list)

相关文章

  • 5.函数

    1、函数:是具有某一特定功能的若干代码的集合,当需要使用这些代码实现某项功能的时候,我们通过该函数的名字就实现这些...

  • 5.函数

    定义函数 函数代码快以def关键字开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间 函...

  • 5. Python 函数

    函数 函数是一段具有特定功能的、可重用的语句组 使用函数主要有两个目的:降低编程难度和代码重用 定义函数 Pyth...

  • 5. Go 函数

    5. Go 函数 之前已经展示过几个函数,并且理所应当的应用了它们,也提到了函数的声明,并且简单的描述过函数的调用...

  • 5. 函数声明

    每个函数前面应该放置一段块注释,概要描述该函数做什么以及(如果不是很清晰)如何使用该函数。重要的设计决策讨论以及副...

  • 5.纯函数

    理解JavaScript纯函数 函数式编程中有一个非常重要的概念叫纯函数,JavaScript符合函数式编程的范式...

  • Shell 5. 函数

    函数的定义 函数的调用 调用函数并且传入参数 函数的参数 1. 位置参数 参数说明$#代表传入的参数个数$*所有参...

  • JavaScript回调函数基础

    javascript回调函数 5.函数的返回值 6.回调函数的基础

  • javaScript函数

    1.函数的封装 2.return子句 3.函数的参数 4.函数练习 5.匿名函数 6.函数练习

  • 函数 二

    1.函数对象 2.函数的嵌套 3.作用域(作用范围) 4.闭包函数 5.装饰器

网友评论

      本文标题:5.函数

      本文链接:https://www.haomeiwen.com/subject/faevqctx.html