python函数由什么组成_python函数

函数

什么是函数?

function 英文 -> 函数,功能

函数就是一个具有特定功能的语法结构。(代码块/组)

作用:提高代码的复用率,提高开发效率,减少后期的维护成本

定义函数

【基本结构】:

def 函数名():

实现函数功能的代码

实现函数功能的代码

实现函数功能的代码

...

函数的调用可以在任何位置进行调用,但要注意格式规范

特征:

1.函数不调用不会执行

2.函数可以调用N次不受次数限制

函数名的定义:

1.推荐使用英文,可以使用拼音,不可以使用汉字

2.可以使用数字,但是不能以数字开头

3.不可以使用特殊字符,除了下划线_

4.函数名严格区分大小写

5.函数命名要有意义

6.函数名不能和系统保留关键字冲突

7.函数名尽量不要和系统已存在的内建函数同名,以免覆盖内建函数

函数的参数

详细分析参数

(1)函数参数概念及分类

函数参数:调用时需要传递的数据.

函数参数大类分为形参和实参:

形参意思: 函数定义时的参数

实参意思: 函数调用时的参数

形实关系:函数调用时,形参和实参个数需要一一对应

如下图所示:

形参种类: 普通参数,默认参数,普通收集参数,命名关键字参数,关键字收集参数

实参种类: 普通实参,关键字实参

(2)普通参数(位置参数)普通的参数,接收实参传递的值

(3)默认参数:位于普通参数后面,具有默认值的参数

语法:(x,y=2) y就是默认参数

(4)收集参数:

普通收集参数:用于专门收集多余普通参数的是普通收集参数,形成一个新的元组

语法:参数前面加*例:args

关键字收集参数:用于专门收集多余关键字实参的是关键字收集参数,形成一个新的字典

语法:参数前面加**例:**kwargs

(5)命名关键字参数:定义时放在号后面的参数,调用时强制必须传入指定参数名才能调用

语法:(a,,x) x是命名关键字参数

如果函数参数中已经有了收集参数,那么收集参数后面的参数即为命名关键字参数

语法:(args,x,y)

(6)形参声明的位置顺序:

普通参数 -> 默认参数 -> 收集参数 -> 命名关键字参数 -> 关键字收集参数

def func(a,b,c=1,args,d,**kw)

a,b为普通参数,c是默认参数,args是收集参数,d是命名关键字参数,kw是关键字收集参数

极少出现五种参数同时出现的情况

def func(a,b=2,,c,d,**kw)

a为普通参数,b是默认参数,c,d是命名关键字参数 ,kw是关键字收集参数

(7)注意:实参将值传递给形参的过程,本质上就是变量赋值操作

所有参数的摆放问题

1.实参:普通实参在前,关键字参数在后

2.形参:

关键字收集参数一定在最后出现

收集参数推荐在普通参数之后使用

推荐顺序:普通形参,收集参数,关键字收集参数

函数文档

1.使用help函数查看

help(函数名)

2.函数名.__doc__

print(函数名.__doc__)

函数的返回值

函数执行完毕之后可以得到一个结果,该结果可以被接受或者使用

函数划分为两大类:

执行过程函数:函数执行之后没有任何结果可以在函数之外接收到(没有return语句的函数)

具有返回值的函数:函数执行之后可以返回一个结果到函数之外被接收或者使用(具有return语句)

return:返回的意思

执行过程函数:送外卖的,把外卖送给客户,结束了(送外卖是过程,送完之后没得到任何东西)

具有返回值的函数:送外卖,把外卖送给客户,结束了得到了钱(送外卖是过程,送完之后得到了钱)

return的另外一个作用:

终止函数执行,函数运行过程中一旦执行了return语句,那么函数就会结束执行。

id() 具有返回值的函数

type() 具有返回值的函数

int() 具有返回值的函数

....

print() 执行过程函数 没有返回值 只有一个None值 (None表示没有值)

变量的作用域

变量名不能和系统保留关键字冲突

import keyword

print(keyword.kwlist) # 查询系统保留关键字

变量的作用域:变量的有效范围

分类:

全局变量:在函数内外都有效的变量就是全局变量(使用global关键字声明)

局部变量:仅仅在函数内部有效的变量就是局部变量

手术麻醉:

全身麻醉:相当于全局变量

局部麻醉:相当于局部变量

全局变量(特征):

1.在函数外部可以正常访问

2.在函数内部也可以正常访问

局部变量(特征):

1.在函数外部不可以访问

2.在函数内部可以访问

locals() 获取当前作用域的变量(在局部中,是获取locals()之前的所有变量)

globals() 获取当前位置的全部全局变量。

pritn(locals())

print(globals())

将局部变量提升为全局变量:

在函数内部使用global关键字可以将局部变量提升为全局变量。

真正的全局变量:

使用global关键字对全局变量进行声明才可以在函数内部任意操作,否则在函数内部只能访问,而不能修改

变量作用域链:

变量的有效范围可以向函数内部层层传递

如果其他的函数内部没有使用global,可以访问变量

如果其他的函数中使用gloabl,可以进行任何操作

nonlocal是在Python3.2之后引入的一个关键字,它是用在封装函数中的。

nonlocal 适用于在局部函数中的局部函数, 把内层的局部变量设置成上一个外层局部可用,但是还不是全局的。他与global可以混合使用,下面的代码示例可以分出global与nonlocal区别

def scope_test():

def do_local():

spam = "局部变量" #1

def do_nonlocal():

nonlocal spam #使用外层的spam变量

spam = "nonlocal 变量" #2

def do_global():

global spam

spam = "global 变量" #3

spam = "test spam"

do_local()

print("本地分配后:", spam)

do_nonlocal()

print("nonlocal分配后:",spam)

do_global()

print("global分配后:",spam)

scope_test()

print("全局范围:",spam)

递归函数

在当前函数当中调用当前函数本身的函数就是递归函数。

递归的运行特性:先进后出

闭包

闭包的定义:

内函数使用外函数的局部变量,并且外函数将内函数返回出来的方法叫闭包,

返回的内函数叫 闭包函数.

闭包的特点:

外函数的临时变量会在将来的内部函数中用到,

自己调用结束后会把外函数的临时变量与内函数绑定,不释放

将来调用内函数的时候仍可使用外函数变量.

闭包的意义:

闭包可以优先使用外函数中的变量,并对闭包中的值起到了封装保护的作用.外部无法访问.

迭代器

迭代器:能被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator 迭代器是对象)

特征:迭代器会生成惰性序列,它通过计算把值依次的返回,一边循环一边计算而不是一次性得到所有数据

优点:需要数据的时候,一次取一个,可以大大节省内存空间.而不是一股脑的把所有数据放进内存.

惰性序列:没有一次性的把所有数据都放在序列中,而是遍历一个放一个,这样的序列

检测:

from collections import Iterable,Iterator

--Iterable可迭代的 Iterator迭代器

isinstance() 判断数据类型,返回bool值

list1 = [1,2,3,4,5]

result = isinstance(list1,list)

print(result)

iter(Iterable)

功能:使用iter可以把可迭代数据变成迭代器

参数:Iterable(可迭代对象)

返回值:迭代器

zip(Iterable,Iterable,...)

功能:从参数中的多个可迭代对象取元素组合成一个新的迭代器,迭代器的组成元素是元组.

参数:Iterable(可迭代对象)

返回值:返回一个zip对象(迭代器),其内部元素为元组

*zip()函数是zip()函数的逆过程,将zip对象变成原先组合前的数据。

表达式:

表达式是指变量和操作符(或叫运算符)的组合。

Python代码由表达式和语句组成,并由Python解释器负责执行。它们的主要区别是表达式的结果一定是一个值,而语句表示的是一个动作,而不是生成或者返回一个值(如调用,for,else,pass,break,continue,def,import,from等)。

lambda表达式

是函数的另外一种表示方式而已。本质上还是一个函数

变形金刚:人型状态:函数 (功能丰富)

汽车状态:lambda表达式(功能简单)

格式:变量名 = lambda 参数,参数... : 返回值

def getsum(no1,no2):

result = no1 + no2

return result

getsum2 = lambda no1,no2 : no1 + no2   #lambda表达式自带return

注意:

lambda表达式功能比较单一,只能实现简单的数据运算或者判断,无法使用循环或者复杂的操作所以lambda常用于数据过滤

带有分支的格式:

变量名 = lambda 参数,参数.. : 真值 if 条件表达式 else  假值

def getsex(sex):

#检测性别返回单词

if sex == '男':

return 'man'

else:

return 'woman'

内建函数

内建函数:系统启动python的时候就加载并且可以使用的函数。

类型转换相关:

int() 将其他数据类型转换为整型

float() 将其他数据类型转换为浮点型

bool() 将其他数据类型转换为布尔值

complex() 将其他数据类型转换为复数

list() 创建空列表,或者将其他数据类型转换为列表

tuple() 创建空元组,或者将其他数据类型转换为元组

dict() 创建空字典,或者将其他数据类型转换为字典

str() 将其他数据类型转换为字符串

变量相关函数:

id() 获取数据的id标识

type() 获取数据的类型字符串

print() 打印护具

locals() 打印当前环境中的所有变量,常用于检测某个变量是否声明,结果是字典

数学相关的函数:

abs() 获取一个数据的绝对值

变量 = abs(数据)

sum() 计算一个容器的数据的和

变量 = sum(容器)

max() 获取容器数据的最大值

格式1:

变量 = max(容器数据)

格式2:

变量 = max(数据1,数据2....)

min() 获取容器数据的最小值

格式1:

变量 = min(容器数据)

格式2:

变量 = min(数据1,数据2....)

pow() 计算一个数值的N次方

变量 = pow(底数,次方数)

round() 对一个数值进行四舍五入操作

变量 = round(数值)

注意:round函数操作时,如果是N.5的数值,采取N奇数进一,N偶数舍弃的操作

range() 产生一个连续数据的生成器

格式1:产生从0到指定数据之间的所有连续整数,不包含结束值

变量 = range(结束值)

格式2:产生从开始值到结束值之间的所有连续整数,不包含结束值

变量 = range(开始值,结束值)

格式3:产生从开始值到结束值之间的所有整数,使用跳步值增加的整数(跳步值默认为1)

变量 = range(开始值,结束值,跳步值)

进制转换函数:

bin() 将数值转换为2进制字符串

变量 = bin(数值)

oct() 将数值转换为8进制字符串

变量 = oct(数值)

hex() 将数值转换为16进制字符串

变量 = hex(数值)

ascii码转换相关(了解):

A-Z 65-90

a-z 97-122

0-9 48-57

chr() 将ascii编码转换为字符

变量 = chr(ascii码数值)

range(0,1114111)

ord() 将字符转换为其对应的ascii码

变量 = ord(字符)

其他内建函数:

input() 接受用户输入的信息 ,接受的结果为字符串

格式:变量 = input('提示信息')

高阶函数

高阶函数:能够把函数当成参数传递的就是高阶函数 (sorted map reduce filter )

sorted(iterable,reverse=False,key=函数)

功能: 排序

运行原理:把可迭代数据里面的数据,一个一个拿到函数里面进行处理,按照return的结果进行排序,得到一个新的列表

参数:

iterable:可迭代数据(容器类型数据,range对象,迭代器)

reverse(可选) :是否反转 默认False 不反转 , True 反转

key(可选) :函数 自定义 或 内置函数

返回值:排序后的结果(新的列表)

map(func,iterable)

map() 函数是python内置的高阶函数,对传入的可迭代对象里的每一个元素进行处理,返回一个新的处理之后的迭代器

功能: 把可迭代数据里面的数据,一个一个拿到函数里面进行处理,得到一个迭代器并返回。

参数: func 函数

iterable 可迭代的数据(容器类型数据,range对象,迭代器)

返回值: 迭代器

reduce(func,iterable)

reduce() 函数在 python 2 是内置函数, 从python 3 开始移到了 functools 模块。

使用方法:from functools import reduce

功能:

一次性从iterable拿出两个值,扔到func里面做运算,得出一个计算结果

然后,把这个计算结果和iterable里面的第三个数据,继续扔到func里面做运算,以此类推

即:不停地从iterable里面拿数据,直到运算结束为止

参数:

func : 内置函数 或 自定义函数

iterable:可迭代的数据 (容器类型数据,range对象,迭代器)

返回值: 最终的结果

filter(func, iterable)

功能: 过滤数据 (return True 保留数据,return False 舍去数据)

接收两个参数,第一个为函数,第二个为可迭代对象,可迭代对象的每个元素作为参数传递给函数进行判断,

然后返回 True 或 False,最后将返回 True 的元素放到迭代器中。

参数:

func : 判断函数

iterable: 可迭代的数据(容器类型数据,range对象,迭代器)

返回值:

迭代器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值