人工智能之Python09 函数

python中的函数就像乐高中的小积木一样,通过组合可以形成各种功能的产品,千里之行,起于函数。
函数就是把代码打包成不同形状的乐高积木,以便可以发挥想象力进行随意拼装和反复使用。

定义函数

在python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,返回值用return表示。

简单来说,一个程序可以按照不同功能的实现,分割成许许多多的代码块,每一个代码块就可以封装成一个函数。

eg:

def sum(a,b):
    return a + b

print(sum(1,2))

# 输出是
3

空函数

如果想定义一个什么事也不做的空函数,可以用pass语句:

def empty():
    pass
print(empty())

参数

函数被设计之初是没有参数的,很快就带来很多麻烦,为了每次调用函数可以有不同的实现,加入了参数的概念。多个参数使用逗号隔开

形参和实参

参数从调用的角度来说,可以分为形式参数和实际参数。

  • 形参:函数创建和定义过程中小括号里的参数
  • 实参:函数在被调用的过程中传递进来的参数

可变参数

有时候并不清楚这个函数需要多少个参数,这时候可以定义成可变参数,在参数前面加上星号(* param

def test(* params):
    print("可变参数的长度:",len(params))
    print("可变参数:",params)

注释

单行注释

python的单行注释使用#

eg:

# 这里是python的单行注释

文档注释

使用”“”注释内容”“”表示多行注释;

扫描二维码关注公众号,回复: 2508148 查看本文章

给函数写文档是为了让别人可以更好的理解自己的函数,所以这是一个好习惯。充足的文档注释即方便了自己复查代码,也方便别人理解自己的代码。因为中大型项目往往需要多人团队配合才能够完成,只有充足的文档注释才能够更利于大家代码的衔接。

返回值

有些场景需要知道我们调用函数之后的结果如何,因此函数有了返回值,可以使用return 返回我们需要的数据;

多返回值

python支持返回多个值

eg:

def test():
    return 5,'test'
def test():
    return [5,'test']

如果没有指定返回的数据类型,默认是元组

global关键字

全局变量的作用域是整个模块,也就是代码段内所有的函数内部都可以访问到全局变量。

但是需要注意:在函数内部仅仅去访问全局变量就好,不要试图去修改它。因为Python会使用屏蔽的方式”保护“全局变量:一旦函数内部视图修改全局变量,Python就会在函数内部自动创建一个跟全局变量一模一样名字的局部变量,这样修改的结果只会修改到局部变量,而不会影响到全局变量。

count = 10
def test():
    count = 20
    print(count)

test()
print(count)

但如果确实想在函数内部修改全局变量,可以使用global实现;

count = 10
def test():
    global count = 20
    print(count)

test()
print(count)

内嵌函数

Python的函数定义是可以嵌套的,也就是允许在函数内部创建另一个函数,这种函数叫做内嵌函数或者内部函数。

def func01() :
    print('正在调用func01方法')
    def func02() :
        print('正在调用func02方法')

闭包(closure)

闭包是函数式编程的一个重要的语法结构,函数式编程是一种编程范式,著名的函数式编程语言就是LISP语言(主要应用于绘图和人工智能,一直被认为是天才程序员使用的语言)

Python中的闭包从表现形式上定义为:如果在一个函数内部,对再外部作用域但不是再全局作用域的变量进行引用,那么内部函数就被认为是闭包。

eg:

def funX(x):
    def funY(y):
        return x * y
    return funY

funX(10)(20)

在闭包中,外部函数的局部变量对应内部函数的局部变量,相当于全局变量和局部变量的关系,在内部函数中,你只能对外部函数的局部变量进行访问,但不能进行修改;

在Python3以前并没有直接的解决方案,只能间接的通过容器类来存放,因为容器类不是放在栈里,所以不会被”屏蔽“调。

容器类-字符串,列表,元组

在python3中,如果希望在内部函数里可以修改外部函数里的局部变量值,那么也有一个关键字可以使用,就是nonlocal,方式跟global一样

def funX():
    x = 10
    def funY():
        nonlocal x
        x *= x
        return x
    return funY

funX()()

匿名函数

Python允许使用lambda关键字来创建匿名函数。我们提到一个新的关键字

什么是lambda?

def func(x):
    return 2 * x + 1

func(5)
# 等价于
func = lambda x : 2 * x + 1
func(5)

lambda表达式的语法非常精简(:左边放原函数的参数,可以有多个参数,用逗号,隔开即可;冒号右边是返回值)

lambda好处:
1. Python写一些执行脚本时,使用lambda可以省下定义函数的过程
2. 对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,不用考虑取名字的问题
3. 简化代码的可读性

猜你喜欢

转载自blog.csdn.net/u012806787/article/details/79317372