Python之函数的基本概念

上一篇为大家定义了一个简单的函数,这一篇向大家介绍一下Python的函数基本概念其实我也不会(笑)

函数的分类

首先在Python中函数可以分成四类分别为:

1. 无参数,无返回值
这种函数不需要传入参数,也不需要返回值,最简单的例子就是

def a():
    print("nihao")
a()

直接调用函数便可以输出结果。
2. 有参数,无返回值

def a(x,y):
    sum = x + y
    print(sum)
a(1,2)

3. 无参数,有返回值

def a():
    x = 1
    y = 2
    c = x + y
    return(c)
print(a())

4. 有参数,有返回值

def a(x,y):
    c = x + y
    return(c)
print(a(4,2))
在变量调用的过程中就涉及到了全局变量与局部变量的区别

首先我们需要弄明白什么是全局变量,什么是局部变量。
全局变量是在整个文件中声明的变量,在全局范围内都可以引用,局部变量很明显只适用于局部,如果在全局中使用局部变量,就会报错。

函数的调运过程

首先函数的调运过程被称为压栈,当一个函数执行完毕之后便会执行弹栈的操作。
那么栈是什么东西呢?
栈大家可以理解成一种是数据表,并且数据先进后出。
具体的调运过程涉及到底层所以就不细说了
那我们就来看一下全局参数和局部参数

A = 100
def sum():
    a = 50
    print( A + a)
sum()
print( A + a)

在这段代码中可以看出,定义了一个全局变量A和局部变量a,在外都调用函数sum,可以输出小a的值,外部直接输出a+A就没有办法输出了,所以在全局中无法直接使用局部变量。

函数的参数

首先我们得分清实参和形参的区别
实参与实参
定义中的参数列表成为形式参数,只是一种符号表达,简称形参
调用时写的参数是实际参数,是实实在在的传入的值,简称实参

默认参数
当你给一个函数定义参数的时候,你预先定义的参数会变成默认参数,当你调运函数的时候不去填入参数,函数会直接使用默认的参数

def sum(x = 10,y = 20):
    print( x + y)
sum(y=11)

当你值改变y的值的时候,x的值就自动采用了默认的参数值。

命名参数
命名参数其实就叫关键词参数谁还没个小名呢
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,所以可以大胆的往里面传了(误)
下面我们就做一个实例

def num(x,y,**kw):
    print(x,y,kw)

num(1,2,sum="3")

这里在末尾定义了一个关键字参数,你调用参数时,最后以list的形式进行输入,函数就会识别并且将它输出。

可变参数
名字一听就是个渣男参数啊
当然可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple,还记得tuple的特点吗?它和列表差不多一样,但是唯一不同的是里面的参数不可以修改偶。

def sum(*a):
    i = 0
    for n in a:
        i = i + n 
    return i
print(sum(1,2,3))

这段代码可以接收你输入的值,并且把它们加起来神奇吧神奇个屁

万能参数
就是组合参数,在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

f1(1,2,3,4,5,6)

函数的递归

递归顾名思义,简称套娃,在自己的函数里调用自己

def print_num(num):
    print(num)
    if num==1:
        return
    print_num(num-1)
print_num(3)

递归的效率并不高,当递归次数少的时候速度还可以,但是到很多次数时就很慢了。
它们的最大次数为10000,所以带套~~ 还是不舒服啊~~ 。递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

lambda表达式(匿名函数)

所谓匿名函数,就是没有名字的函数,匿名函数冒号后面的表达式有且只能有一个,注意:是表达式,而不是语句,匿名函数自带return,而return的结果就是表达式的计算后的结果。

lambda num1 , num2 : num1 + num2
sum = lambda num1 , num2 : num1 + num2
print(sum(10 , 20))

你可能感兴趣的:(Python)