python教程26python函数式编程:函数定义和调用

Posted 陈东尧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python教程26python函数式编程:函数定义和调用相关的知识,希望对你有一定的参考价值。

东尧爱分享


这是东尧每天一篇文章的第26天


东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福。


1

函数概念和调用

01

 概念

在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合。定义一个函数时,需要指定函数的名称并写下一系列程序语句。之后,就可以用名称来“调用”这个函数。

02

 调用函数

函数名加括号就可以调用函数,如果函数需要传递参数,那么就传入对应的参数即可。


2

定义函数(创建函数)

01

 定义函数

使用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

【python教程26】python函数式编程(一):函数定义和调用


函数的参数可以给定默认值,给有默认值的参数必放在没有默认值参数列表的后面。如果有默认值,那么在函数调用的时候可以不填,不填的话就使用默认的值。

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]

【python教程26】python函数式编程(一):函数定义和调用


使用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

【python教程26】python函数式编程(一):函数定义和调用


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)


对比图如下:

【python教程26】python函数式编程(一):函数定义和调用


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)

【python教程26】python函数式编程(一):函数定义和调用


**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函数式编程:函数定义和调用的主要内容,如果未能解决你的问题,请参考以下文章

python函数式编程

Python 高级教程之函数式编程

廖雪峰的Python系列教程——函数式编程之偏函数

简明python教程 --C++程序员的视角:函数式编程特殊类方法测试及其他

Python进阶-函数式编程

教程 | 十分钟学会函数式 Python