本节内容

函数的定义方法

函数功能

函数的返回值

函数的形参与实参

全局变量与局部变量

递归

函数的作用域

匿名函数lambda

函数式编程

常用内置函数

其他内置函数

函数

函数的定义方法

函数就相当于一个文件,这个文件有他特定的功能可以减少代码的重写

1 def函数名 (参数):2 "函数的注释"

3 函数体4 return x

若命名了相同的函数名,则调用函数时下面的函数会覆盖掉上面的函数

函数的功能

1.代码重用

2.保持一致性,易维护

3.可扩展性

函数的返回值

1.返回值数值 = 0 >>>>>返回None

2.返回值数 = 1 >>>>> 返回object 字典的对象

3.返回值数 > 1 >>>>> 返回元组

函数的参数

1.形参:不占内存,用完释放

2..实参

3.位置参数和关键字参数

位置参数:按顺序一一对应

关键字参数:可指定参数对应,可无序

位置参数与关键字参数混合使用:位置参数应在关键字参数左边 ,否则报错

4.默认参数

若函数定义时指定了默认参数,则函数调用时,可不写参数就用默认参数,写了参数就修改默认参数

5.参数组:*列表 **字典

使用参数组的好处:函数未来扩展功能需传多个值或者你不确定传几个值

全局变量与局部变量

全局变量为定义在函数外部的变量

局部变量为定义在函数内部的变量

所以书写时全局变量大写,局部变量小写清晰方便让他人读懂

golobal 指定全局变量

nonlocal 指定上一级变量

总结:

有声明局部变量:使用局部变量

无声明局部变量:

无global

优先读取局部变量,只读全局变量不对全局变量赋值

有global

变量本质上就是全局变量可读可赋值

当使用global定义变量时,global应上提,防止报错

a = [‘c‘,‘d‘]deftest():

a= ‘我‘

global a #报错!因为global在下面不知道去哪找a所以global应该上提

print(a)

递归特性

递归就是函数内部不断的调用自己

1.必须有一个明确的结束条件,否则死循环

2.每次进入更深一层递归,问题规模相应比上次少

3.递归的效率不高,层次过大会导致栈溢出

寸到

函数的作用域

程序是从上到下一直读下去的,其实当程序读到def ...定义函数部分时,只是把函数部分全部转换成字符串存到内存当中,不读取,直到调用函数时才读取。

匿名函数lambda

匿名函数只使用于定义简单逻辑的函数

deftest(x):return x+1

#使用匿名函数:

lambda x:x+1

#若匿名函数接收多个参数,返回多个值则需加括号

lambda x,y,z:(x+1,y+1,z+1)

匿名函数不独立使用,若真要独立使用就得给他起个名字才能运行

fuc = lambda x:x+1fuc(10)

函数式编程

1.不可变数据

2.第一类对象:函数即为变量

3.尾调用优化(尾递归)

例一:不可变,不用变量保存状态,不修改变量

#非函数式:

a = 1

deftest():globala

a+= 1

returna

test()print(a)

#函数式编程

a = 1

deftest(n):return n+1

print(test(a)print(a)

高阶函数有一下两个特性,有任何一即为高阶函数

#1.函数的传入参数是一个函数名

deffoo(n)print(n)defbar(name)print(‘my name is %s‘ %name)

foo(bar(‘echo‘)) #先运行bar()无返回值

#2.返回值中包含函数

defbar ():print(‘from bar‘)deffoo():print(‘from bar‘)return bar #返回bar的内存地址

n=foo()

n()#调用bar函数

常用函数 ------转自林海峰

1.map函数的起源及其用法

map函数就是在原有的数据上处理下数据

array=[1,3,4,71,2]

ret=[]for i inarray:

ret.append(i**2)print(ret)#如果我们有一万个列表,那么你只能把上面的逻辑定义成函数

defmap_test(array):

ret=[]for i inarray:

ret.append(i**2)returnretprint(map_test(array))#如果我们的需求变了,不是把列表中每个元素都平方,还有加1,减一,那么可以这样

defadd_num(x):return x+1

defmap_test(func,array):

ret=[]for i inarray:

ret.append(func(i))returnretprint(map_test(add_num,array))#可以使用匿名函数

print(map_test(lambda x:x-1,array))#上面就是map函数的功能,map得到的结果是可迭代对象

print(map(lambda x:x-1,range(5)))

2.filter函数是过滤,默认保留指定参数

#电影院聚集了一群看电影bb的傻逼,让我们找出他们

movie_people=[‘alex‘,‘wupeiqi‘,‘yuanhao‘,‘sb_alex‘,‘sb_wupeiqi‘,‘sb_yuanhao‘]deftell_sb(x):return x.startswith(‘sb‘)deffilter_test(func,array):

ret=[]for i inarray:iffunc(i):

ret.append(i)returnretprint(filter_test(tell_sb,movie_people))#函数filter,返回可迭代对象

print(filter(lambda x:x.startswith(‘sb‘),movie_people))

3.reduce函数:压缩数据为一个所以reduce

reduce在py3中要引用模块

from functools import reduce

from functools importreduce#合并,得一个合并的结果

array_test=[1,2,3,4,5,6,7]

array=range(100)#报错啊,res没有指定初始值

defreduce_test(func,array):

l=list(array)for i inl:

res=func(res,i)returnres#print(reduce_test(lambda x,y:x+y,array))

#可以从列表左边弹出第一个值

defreduce_test(func,array):

l=list(array)

res=l.pop(0)for i inl:

res=func(res,i)returnresprint(reduce_test(lambda x,y:x+y,array))#我们应该支持用户自己传入初始值

def reduce_test(func,array,init=None):

l=list(array)if init isNone:

res=l.pop(0)else:

res=initfor i inl:

res=func(res,i)returnresprint(reduce_test(lambda x,y:x+y,array))print(reduce_test(lambda x,y:x+y,array,50))

map ,filtet,reduce 总结

当然了,map,filter,reduce,可以处理所有数据类型

name_dic=[

{‘name‘:‘alex‘,‘age‘:1000},

{‘name‘:‘wupeiqi‘,‘age‘:10000},

{‘name‘:‘yuanhao‘,‘age‘:9000},

{‘name‘:‘linhaifeng‘,‘age‘:18},

]#利用filter过滤掉千年王八,万年龟,还有一个九千岁

deffunc(x):

age_list=[1000,10000,9000]return x[‘age‘] not inage_list

res=filter(func,name_dic)for i inres:print(i)

res=filter(lambda x:x[‘age‘] == 18,name_dic)for i inres:print(i)#reduce用来计算1到100的和

from functools importreduceprint(reduce(lambda x,y:x+y,range(100),100))print(reduce(lambda x,y:x+y,range(1,101)))#用map来处理字符串列表啊,把列表中所有人都变成sb,比方alex_sb

name=[‘alex‘,‘wupeiqi‘,‘yuanhao‘]

res=map(lambda x:x+‘_sb‘,name)for i inres:print(i)

其他内置函数

详细请查看http://www.runoob.com/python/python-built-in-functions.html

1.abs() 取绝对值

2.布尔运算

bool()

将括号内元素转换为布尔值

all()

将括号内元素全部进行布尔运算,全真才为真

any()

将括号内元素全部进行布尔运算,一个真则真

3.进制转换

bin()

转为二进制

hex()

转为16进制

oct()

转为8进制

4.bytes()查看多少字节,可指定编码解码,也可不指定

name = ‘您好‘

print(bytes(name ,encoding = ‘utf-8‘,decode‘utf-8))

5.ASCII码处理

chr()

打印ASCII码

ord()

与chr()相反,解asci码

6.数字处理

divmod()

传入两个参数,取商与余

pow()

可穿三个参数,最少传2个,若传pow(3,3,2)则求3的3次方后对2取余

round()

四舍五入

7.查看函数使用

dir()

查看参数的属性

help

查看函数的使用

8.eval

第一个功能就是把字符串中的数据结构提取出来

第二个功能就是把字符串中表达式计算

9.hash:可hash的数据类型就是不可变数据类型

10.isinstance:输入两个参数,一个是变量,一个 是指定数据类型,查看是否变量是否为指定类型

11.globals()和locals() 联合print()打印本地与局部

12.max()与min()

for循环依次去出元素比较,若开头已比较出结果则后面不比较(比较字符串时或其他)

注意不可有多种数据类型

其返回的是内存地址

12.1.max函数处理的是可迭代对象,相当于一个for循环取出每个元素进行比较。不同数据类型间不能进行比较

12.2.每个元素进行比较,若字符串则从第一个字符开始,若第一个位置分出大小,则后面不比较

#终极玩法

people=[

{‘name‘ =‘haha‘, ‘age‘ = 100}

{‘name‘ = ‘echo‘ , ‘age‘ = 500}

]print(max(people,key=lambd dic:dic[‘age‘]))

key 代表告诉max通过什么方法去比较出每个对象的大小

13.zip() 拉链:输入两个参数,这两个参数为序列然后一一对应转为元组,有多不显示不报错,返回内存地址要用list查看

14.reverse 反转 ,可以反转列表

15.slice 切片:指定切片

l = ‘hello‘s1= slice(1,4,2)print(l(s1))print(s1.start)print(s1.end)print(s1.step) #查看步长

16.sorted 排序:本质比较大小,不同类型不能排序

17 sum :求和

18.type : 查看参数是那种类型

python函数中的变量_Python中的函数与变量相关推荐

  1. python中函数可以赋值给一个变量_python中函数赋值给变量时的问题注意详解

    变量赋值是我们在日常开发中经常会遇到的一个问题,下面这篇文章主要给大家介绍了关于python中将函数赋值给变量时需要注意的一些问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的 ...

  2. python中变量类型在程序中可以改变_Python中的变量和数据类型,python,及

    变量 变量的定义: 在程序中,有时我们需要对2个数据进行求和,那么该怎样做呢? 大家类比一下现实生活中,比如去超市买东西,往往咱们需要一个菜篮子,用来进行存储物品,等到所有的物品都购买完成后,在收银台 ...

  3. python函数传值还是地址_python中给函数传参是传值还是传引用

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  4. python 获取值类型用于定义变量_Python中的变量和简单数据类型

    变量: 变量是存储在内存中的值,在创建变量时会在内存中开辟一个空间. 变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符串. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存 ...

  5. python zip是什么意思_Python中zip()函数的解释和可视化

    作者丨爱学习的胡同学 来源丨机器学习算法与Python实战(tjxj666) zip()的作用 先看一下语法: zip(iter1 [,iter2 [...]]) -> zip object P ...

  6. python怎么宏定义符号变量_python中定义宏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 什么是宏? 宏类似python中的函数,可以传参数进去,但不能有返回值! 在实际 ...

  7. python中的变量_Python中的变量

    python中的变量 This lesson deals with variables. Those who already know some programming must be familia ...

  8. python定义函数后怎么输出_python中如何定义函数返回值

    返回值简介: 简单介绍print和return的区别,print仅仅是打印在控制台,而return则是将return后面的部分作为返回值作为函数的输出,可以用变量接走,继续使用该返回值做其它事. 函数 ...

  9. python中setattr用法_python中hasattr()、getattr()、setattr()函数的使用

    引言: 在阅读源码时,有很多简写的形式,其中一个比较常用的就是getattr()用来调用一个类中的变量或者方法,相关联的hasattr().getattr().setattr()函数的使用也一并学习了 ...

最新文章

  1. 《实用机器学习》——1.4 本书概述
  2. AI+遥感智能解译,赋能智慧城市规划革新(人工智能案例)
  3. redis 缓存过期默认时间_redis缓存过期机制
  4. java+多线程菜鸟_java多线程
  5. Qt文件编码转换工具(三) Qt界面设计
  6. js中的DOM操作汇总
  7. oracle 查询dbid,查看oracle 数据库的DBID
  8. 从淘宝CFO到接棒马云 张勇是如何在12年里成为阿里董事局主席的
  9. 仅从设计和原理等技术角度看,Windows和Linux哪个系统更先进?
  10. 使用Name Mangler快速为批量文件重命名
  11. 【C++】将(数组)数据写入csv文件
  12. 提升研发效率 保障数据安全——阿里云宣布数据管理DMS企业版正式商业化 1
  13. appium环境搭建全套
  14. crr树不同步数期权定价 matlab,CRR二叉树模型及例题
  15. php程序 导出表格文件后缀,PHPExcel生成Excel文件---提示导出文件或者文件扩展名不一致,或导出的文件或文件扩展名无效...
  16. Ubuntu-图形界面和字符界面切换快捷键
  17. 整理最全的图床集合——三千图床
  18. 学习中的一些笔记,不懂的时候再来翻翻(持续更新)
  19. JS ListBox动态加载数据
  20. 非易失内存技术NVDIMM

热门文章

  1. 新浪页游助手 选不了服务器,传奇世界霸服 新浪页游助手随身版有妙招
  2. 对象储存防止被搬运恶意盗刷流量解决方法
  3. VsCode快捷键高级使用
  4. android 计步器毕设论文,基于单片机的计步器.doc
  5. iPhone如何登陆QQ邮箱20230208
  6. 阿里大于 DEMO(java)
  7. 基于QT的网络五子棋游戏
  8. 数控直流电压源的设计与制作
  9. noscript 标签的用处
  10. 微信小程序订单管理源码_【程序源代码】微信小程序商城管理系统