Python函数

函数的定义:

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。。

你可以定义一个由自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数内容以冒号起始,并且缩进。 return [表达式]
结束函数,选择性地返回一个值给调用方。 不带表达式的return相当于返回 None。
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的
函数名:从语法角度来看,函数名只要是一个合法的标识符即可;从程序的可读性角度来看,函数名应该由一个或多个有意义的单词连缀而成,每个单词的字母全部小写,单词与单词之间使用下画线分隔。
形参列表:用于定义该函数可以接收的参数。形参列表由多个形参名组成,多个形参名之间以英文逗号(,)隔开。一旦在定义函数时指定了形参列表,调用该函数时就必须传入相应的参数值,也就是说,谁调用函数谁负责为形参赋值

在这里插入图片描述
函数的嵌套
在这里插入图片描述
程序既可通过 help() 函数查看函数的说明文档,也可通过函数的 doc 属性访问函数的说明文档

函数的参数类型

通常情况下,定义函数时都会选择有参数的函数形式,函数参数的作用是传递数据给函数,令其对接收的数据做具体的操作处理。

在使用函数时,经常会用到形式参数(简称“形参”)和实际参数(简称“实参”),二者都叫参数,之间的区别是:
形式参数:在定义函数时,函数名后面括号中的参数就是形式参数
实际参数:在调用函数时,函数名后面括号中的参数称为实际参数,也就是函数的调用者给函数的参数
实参和形参的区别,就如同剧本选主角,剧本中的角色相当于形参,而演角色的演员就相当于实参。 根据实际参数的类型不同,函数参数的传递方式可分为
2 种,分别为值传递和引用(地址)传递: 值传递:适用于实参类型为不可变类型(字符串、数字、元组);
引用(地址)传递:适用于实参类型为可变类型(列表,字典);
值传递和引用传递的区别是,函数参数进行值传递后,若形参的值发生改变,不会影响实参的值;而函数参数继续引用传递后,改变形参的值,实参的值也会一同改变。

位置参数

位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数时传入实际参数的数量和位置都必须和定义函数时保持一致。
实参和形参数量必须一致 在调用函数,指定的实际参数的数量,必须和形式参数的数量一致(传多传少都不行)
当实际参数类型和形式参数类型不一致,并且在函数种,这两种类型之间不能正常转换,此时就会抛出 TypeError 异常。
调用函数时,如果指定的实际参数和形式参数的位置不一致,但它们的数据类型相同,那么程序将不会抛出异常,只不过导致运行结果和预期不符

在这里插入图片描述
在定义函数时,直接给形式参数指定一个默认值,即便调用函数时没有给拥有默认值的形参传递参数,该参数可以直接使用定义函数时设置的默认值

在这里插入图片描述

默认参数

可变参数

形参前添加一个 ‘
args 表示创建一个名为 args 的空元组,该元组可接受任意多个外界传入的非关键字实参
Python 允许个数可变的形参可以处于形参列表的任意位置(不要求是形参列表的最后一个参数)但同时普通参数必须以关键字实参的形式传值
可变参数:形参前添加两个’

kwargs 表示创建一个名为 kwargs 的空字典。该字典可以接收任意多个以关键字参数赋值的实际参数。
在这里插入图片描述

关键字参数

是指使用形式参数的名字来确定输入的参数值。通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。
在这里插入图片描述在这里插入图片描述
逆向参数收集,指的是在程序己有列表、元组、字典等对象的前提下,把它们的元素“拆开”后传给函数的参数。逆向参数收集需要在传入的列表、元组参数之前添加一个星号,在字典参数之前添加两个星号

命名关键字参数

全局变量和局部变量

和局部变量相对应,全局变量指的是能作用于函数内外的变量,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用
定义全局变量的方式有以下 2 种: 在函数体外定义的变量,一定是全局变量 在函数体内定义全局变量。即使用 global
关键字对变量进行修饰后,该变量就会变为全局变量

在这里插入图片描述

局部变量是指在函数内部定义并使用的变量,它只在函数内部有效。

每个函数在执行时,系统都会为该函数分配一块“临时内存空间”,所有的局部变量都被保存在这块临时内存空间内。当函数执行完成后,这块内存空间就被释放了,这些局部变量也就失效了,因此离开函数之后就不能再访问局部变量了,否则解释器会抛出
NameError 错误。

在这里插入图片描述在这里插入图片描述

不管是在函数的局部范围内还是在全局范围内,都可能存在多个变量,每个变量“持有”该变量的值。从这个角度来看,不管是局部范围还是全局范围,这些变量和它们的值就像一个“看不见”的字典,其中变量名就是字典的
key,变量值就是字典的 value。实际上,Python 提供了如下三个工具函数来获取指定范围内的“变量字典”:
globals():该函数返回全局范围内所有变量组成的“变量字典”。 locals():该函数返回当前局部范围内所有变量组成的“变量字典”。
vars(object):获取在指定对象范围内所有变量组成的“变量字典”。如果不传入object 参数,vars() 和 locals()
的作用完全相同。

练习

在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数生成式

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

高阶函数

在这里插入图片描述在这里插入图片描述
map(function, iterable)

其中,function 参数表示要传入一个函数,其可以是内置函数、自定义函数或者 lambda 匿名函数;iterable 表示一个或多个可迭代对象,可以是列表、字符串等。

map() 函数的功能是对可迭代对象中的每个元素,都调用指定的函数,并返回一个 map 对象。
注意,该函数返回的是一个 map 对象,不能直接输出,可以通过 for 循环或者 list() 函数来显示
在这里插入图片描述在这里插入图片描述

reduce()

函数通常用来对一个集合做一些累积操作,其基本语法格式为:
reduce(function, iterable)

其中,function 规定必须是一个包含 2 个参数的函数;iterable 表示可迭代对象。

注意,由于 reduce() 函数在 Python 3.x 中已经被移除,放入了 functools 模块,因此在使用该函数之前,需先导入 functools 模块。
在这里插入图片描述

filter(function, iterable)

此格式中,funcition 参数表示要传入一个函数,iterable 表示一个可迭代对象。

filter() 函数的功能是对 iterable 中的每个元素,都使用 function 函数判断,并返回 True 或者 False,最后将返回 True 的元素组成一个新的可遍历的集合。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

从上面的语法格式可以看出 lambda 表达式的几个要点: lambda 表达式必须使用 lambda 关键字定义。 在 lambda
关键字之后、冒号左边的是参数列表,可以没有参数,也可以有多个参数。如果有多个参数,则需要用逗号隔开,冒号右边是该 lambda
表达式的返回值。

实际上,lambda 表达式的本质就是匿名的、单行函数体的函数。因此,lambda 表达式可以写成函数的形式。 对于单行函数,使用
lambda 表达式可以省去定义函数的过程,让代码更加简洁。 对于不需要多次复用的函数,使用 lambda
表达式可以在用完之后立即释放,提高了性能

在这里插入图片描述在这里插入图片描述在这里插入图片描述

random函数:

1.random.random()用于生成一个0到1的随机浮点数:0<= n < 1.0

2.random.uniform(a,b) 用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a

3.random.randint(a, b)|用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b

4.random.randrange([start], stop[, step])|从指定范围内,按指定基数递增的集合中 获取一个随机数。
random.randrange(10, 30, 2),结果相当于从[10, 12, 14, 16, ... 26, 28]序列中获取一个随机数。
random.randrange(10, 30, 2)在结果上与 random.choice(range(10, 30, 2) 等效。

5.random.choice(sequence)
#random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。
参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence

6.random.shuffle(x[, random])
#用于将一个列表中的元素打乱,即将列表内的元素随机排列。

7.random.sample(sequence, k)
#从指定序列中随机获取指定长度的片断并随机排列。注意:sample函数不会修改原有序列。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值