python教程26python函数式编程:函数定义和调用
Posted 陈东尧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python教程26python函数式编程:函数定义和调用相关的知识,希望对你有一定的参考价值。
东尧爱分享
这是东尧每天一篇文章的第26天
东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福。
函数概念和调用
概念
在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合。定义一个函数时,需要指定函数的名称并写下一系列程序语句。之后,就可以用名称来“调用”这个函数。
02
调用函数
函数名加括号就可以调用函数,如果函数需要传递参数,那么就传入对应的参数即可。
2
定义函数(创建函数)
定义函数
使用def语句定义一个函数,def语句后面跟着函数的名称,然后是一对小括号,括号里面可以填写函数需要的参数,最后是冒号结束,然后下一行缩进开始写函数体的内容。
def foo(): # 定义函数
print('hello world')
foo() # 调用函数
函数的命名规范跟变量的命名规范一样,开始只能是字母或下划线,后面可以是数字、字母和下划线。注意的是函数名称不要跟系统的关键字以及自带的内建函数重名。
02
参数和返回值
函数的参数就是一个变量名,这个变量名可以在函数的内部使用,它的值是从外面传入进来的。定义函数时的变量名一般称为形参,调用函数时传入的值叫实参。
def hello(name): # 此处的name是形参
print('hello %s' % name)
name = input('请输入您的名字:')
hello(name) # 此处input传入的字符为实参
hello('东尧02') # 此处“东尧02”为实参
结果:
请输入您的名字:东尧
hello 东尧
hello 东尧02
函数的参数可以有很多个,传入函数参数的数量一定要跟定义函数时一致,顺序也是要对应,如果顺序不对应,那么可能得到的结果就不是预期的那样了。
def myadd(a,b): # 可以有多个参数
return a+b # 返回值到函数外
print(myadd(3,4)) # 传入参数数量必须与定义时数量一致
结果:
7
函数的参数可以给定默认值,给有默认值的参数必放在没有默认值参数列表的后面。如果有默认值,那么在函数调用的时候可以不填,不填的话就使用默认的值。
def myrange(start=0,end=0,step=1): # 模拟range生成列表的函数
result = []
x = 0
while end > 0:
result.append(x)
x += step
end -= step
return result
print(myrange()) # 留空则使用默认值
print(myrange(1,10,2)) # 未使用变量名赋值则默认按顺序赋值
print(myrange(end=10,step=2,start=1)) # 使用变量名赋值可以不按顺序填入
结果:
[]
[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]
使用return语句返回内容到函数外,return语句可以返回所有的数据类型,可以返回一个或多个。如果没有写return 语句,函数的默认返回值是None
def sizeyunsuan(a,b):
nadd = a + b
sub = a - b
mux = a * b
div = a / b
# 这里看起来时返回了多个数值,但其实是将这些返回值组成了一个元组进行返回的
return nadd,sub,mux,div
print(sizeyunsuan(20,4))
x,y,z,t = sizeyunsuan(20,4) # 元组拆包
print(x,y,z,t)
结果:
(24, 16, 80, 5.0)
24 16 80 5.0
03
关键字参数和非关键字参数
在函数声明的时候,如果我们给定了参数一个默认值,那么这个参数也称为关键字参数,在函数声明和调用时没有指定变量名的参数就是非关键字参数。
我们在调用函数的时候也可以通过变量名来给对应的参数赋值,不管这个参数是否有默认值。但是需要注意的是,没有指定变量名的参数必需是在前面的(关键字参数一定要放在非关键字参数后面),假如关键字参数在前面,系统会报错:
def sizeyunsuan(a=10,b): # 关键字参数在非关键字参数前面系统会报错
nadd = a + b
sub = a - b
mux = a * b
div = a / b
return nadd,sub,mux,div
print(sizeyunsuan(20,4))
结果:
File "D:/learning/python/learning/test1.py", line 3
def sizeyunsuan(a=10,b): # 关键字参数在非关键字参数前面系统会报错
^
ntaxError: non-default argument follows default argument
将a和b的位置互换后结果如下:
(24, -16, 80, 0.2)
对比图如下:
04
接收可变长参数
当我们不能确定用户到底输入多少个参数的时候,那么我们就不能在函数定义的时候确定参数的个数,这样的话就不能很好的处理用户的输入。python提供了一种很好的办法来解决这个问题。使用*arg来接收多个非关键字参数,用**kargs来接收多个关键字参数。
*arg接收多个非关键字参数:
def func(a,*num):
print('a=',a)
print('num=',num)
func(3)
# 除了第一个6有参数a来接收以外,剩下没有参数可接收的值全都传入*num中
func(6,5,8,4)
结果:
a= 3
num= ()
a= 6
num= (5, 8, 4)
**kargs接收多个关键字参数:
def func1(**key):
print(key)
func1(a=1,b=2,c=3)
结果:
{'a': 1, 'b': 2, 'c': 3}
我们可以将*arg和**kargs同时使用来接收非关键词参数和关键字参数时,但需要注意的依然是关键字参数必须放在后面:
def func2(a,b,*key1,**key):
print(a,b,key1,key)
func2(1,2,3,4,5,e=6,c=7)
结果:
1 2 (3, 4, 5) {'e': 6, 'c': 7}
最后我们来总结一下,函数的四种类型:
没有参数;
没有返回值没有参数;
有返回值有参数;
没有返回值有参数,有返回值;
python的函数式编程其实不止这一种函数创建方法,另外还有匿名函数lambda。当我们需要实现一些很小的功能的时候,如果使用def声明一个函数就会显得比较复杂了,这种情况下就可以使用lambda来为我们创建一些小的功能函数。这个功能在明天的教程里东尧将继续为您详解,欢迎继续关注。
陈东尧
SEO网络营销大咖
学干货,想赚钱找东尧
长按二维码添加东尧私人号
以上是关于python教程26python函数式编程:函数定义和调用的主要内容,如果未能解决你的问题,请参考以下文章