带你走进 @ 机器人时代
Discover 点击上面蓝色文字,关注我们
Python函数入门:在编程中,经常会遇到重复编写代码的情况,将这些经常重复编写的代码封装起来构成函数,需要的时候就可以调用,这样就节省了我们大量的时间和精力。
来看一个简单的例子:
def res(a): print(a) a=5 #调用函数打印a的值 res(a) 运行结果: 5
这是一个简单的函数应用,如果我们想专门处理一个字符串,把它们拆成单词表,用函数专门实现呢?
#把字符串拆成单词表 def chai(p): for i in p.split(' '): print(i) a=input('请输入你要拆分的句子:') #调用函数打印单词表 chai(a) 运行结果: 请输入你要拆分的英文句子:这是 一个 迭代器 这是 一个 迭代器
这样看起来,好像写个函数也没有多省事吧?
不过,我们想一想,如果把函数放在另外一个文件里,假如我们命名为fs.py当我们其他文件要调用这个功能的时候,只需要import fs 就可以调用这个功能,是不是瞬间觉得很轻松?
上面的例子中,我们输入的变量是a,传递到函数里面后,a的值就替换了函数里面p的值,这就叫传递参数。
Python函数传递参数有形参和实参两种传递,在上面的例子中chai(p)就是形参,而我们调用时chai(a)就是实参。
在传递参数的时候有两种方式:一种是传值,另一种是引用(地址,如列表型变量)传递,引用传递后,改变形参的值,实参的值也会一同改变。下例:
#参数的传递:传值和引用(传址) def demo(n) : n += n print("形参值为:",n) print("-------值传递-----") a = "蜀门" print("a的值为:",a) demo(a) print("实参值为:",a) print("-----引用传递-----") a =[1,2,3] print("a的值为:",a) demo(a) print("实参值为:",a) 运行结果: -------值传递----- a的值为:蜀门 形参值为:蜀门蜀门 实参值为:蜀门 -----引用传递----- a的值为:[1, 2, 3] 形参值为:[1, 2, 3, 1, 2, 3] 实参值为:[1, 2, 3, 1, 2, 3]
仔细分析运行结果,我们发现,引用传递之后,实参的值也跟着改变了!原来的值是[1,2,3],传递之后变成了[1,2,3,1,2,3]。
为什么会这样呢?原来传值的时候,是把传的值复制一份副本交给函数,所以无论函数内部对参数值如何修改,都不会改变实际值;
虽然形参的底层实现也是传值,但函数的在操作的时候还是将原来的值改变了。所以,如果我们要修改函数外的某些数据,我们可以把这些数据包装成列表、字典等可变对象,然后把列表、字典等可变对象作为参数传入函数,在函数中通过列表、字典的方法修改它们。
注意,我们在调用函数的时候,调用函数时传入实际参数的数量、位置和数据类型都必须和定义函数时保持一致,当然如果使用关键字参数来调用,可以改变位置。
如果在定义函数的时候使用了默认值,如:
def c_atr(s=0):print(s)
def c_atr(s=0): print(s) c_atr() 输出: 0
即使不输入参数,函数使用默认的值。值得注意的是当定义一个有默认值参数的函数时,有默认值的参数必须位于所有没默认值参数的后面。
如果希望传入多个参数,但又不想在定义函数的时候写明确,可以考虑可变参数:
def c_atr(u,*y): print(u,y) for i in y: print(i,end='')#在一行内输出 c_atr(1,2,3,4,5) 输出结果: 1 (2, 3, 4, 5) 2345
可以看出,函数将可变参数自动识别为一个元组输出。
def c_atr(*u,y): print(u,y) for i in u: print(i,end='') c_atr(1,2,3,4,5,y=6) 输出结果: (1, 2, 3, 4, 5) 6 12345
可见,可变参数是可以写在前面,但这样的话,后面的普通参数必须用关键字参数进行传递,否则Python会报错,大家可以自己测试一下。
除了可变参数,我们还可以传入字典:
def c_atr(x,*y,**z): print(x,y,z) c_atr(1,2,3,r=8) 输出结果: 1 (2, 3) {'r': 8}
一个*号的可变参数默认的是一个空元组,而两个*号的可变参数默认的是一个空字典,这样对于一些复杂的函数应用,可以更加灵活。
此外,Python 还支持逆向参数收集,即直接将列表、元组、字典作为函数参数,Python 会将其进行拆分,把其中存储的元素按照次序分给函数中的各个形参:
#逆向参数收集 def c_atr(c,b,a): print(a,b,c) list=[1,2,3] c_atr(*list) 输出结果: 3 2 1
注意函数的顺序,大家可以自行测试改变顺序,会发生什么变化。
有时候,我们需要函数执行操作后返回一些结果,那么我们使用return语句来实现:
#return输出 def c_atr(a): s=a*a return s print(c_atr(8)) 输出结果: 64
使用return的时候要注意,在函数中可以多次出现,但只要执行了第一个,整个函数就会自动跳出,从而结束函数的执行,可以在多个判断条件中使用:
def c_atr(a): if a<8: return a*a else: return a**a print(c_atr(7)) print(c_atr(9)) 输出结果: 49 387420489
函数可以返回多个值:
#多个返回值 def c_atr(a): s=a*a p=a**a return s,p print(c_atr(7))#返回一个元组 输出结果: (49, 823543)
函数的基础用法今天就介绍到这里,下次我们介绍一些更高级的用法。
每天坚持学习,这样每天都能进步一点点!!
往期回顾:
来来来,送你一个金牌销售机器人,7X24小时不休,不要工资免费用!RPA技术在旅行社销售业务中如何凤凰涅槃??【工资翻三倍】系列:一招搞定九宫图片切割机器人,让你的朋友圈更加炫酷!本文引用和摘录相关内容,请联系侵删。
- END -
最后,文章有帮助到你的话【点赞在看】激励我们分享更多的干货!
还没有评论,来说两句吧...