不用重复造轮子之python函数

函数是由代码组成的预先定义好的代码块,编写函数主要是便于提高代码的复用性,函数一般包括函数名、形参或实参和返回结果
想象生活中的例子,我们每天都是需要吃饭,一日三餐。做饭需要自己准备食材,一般咱们都是需要提前到超市购买,比如,今天我要吃土豆炖牛腩,我需要在超市去买到土豆和牛肉,按照一定的方法做我想做的菜,我们不需要先去种土豆、养牛等行为。
在上面的例子中,做饭的食材是预先都有的,先准备好再使用。

人===>程序员
做饭准备的食材 ===>函数

1、函数的分类

1.1、内置函数

为了方便开发人员,针对一些常用的功能,python解释器已经为我们定义好了的函数即内置函数。对于内置函数,我们可以拿来就用而无需事先定义,如len(),sum(),max(),min()等等

1.2、自定义函数

自定义函数是因为内置函数所能提供的功能是有限的,这就需要我们自己根据需求,事先定制好我们自己的函数来实现某种功能,以后,在遇到应用场景时,调用自定义的函数即可。

2、定义函数

1、函数使用的原则:先定义,再调用
函数即“变量”,“变量”必须先定义后引用。未定义而直接引用函数,就相当于在引用一个不存在的变量名,在使用函数时,一定区分函数的定义阶段和调用阶段。
2、定义函数的三种形式

  1. 无参:应用场景仅仅只是执行一些操作,比如打印操作
  2. 有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计大小、类型等

在函数定义时无参,意味着调用时也无需传入参数
在函数定义时有参,意味着调用时则必须传入参数

3、调用函数

函数的调用非常好理解,调用:即现有找到函数的名字,然后根据函数的名字来调用相关的代码,并根据代码返回相应的值或者字段。
在调用函数阶段需要经过一系列的操作,最后要拿到一个明确的结果,但是函数必须要有返回值
通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
那么你肯定要问了,函数在什么时候不需要有返回值?
调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值,通常情况下,无参函数不需要有返回值,仅仅打印相关结果即可。

4、函数对象

知道了如何调用函数,咱们来说说函数对象。在python中函数是第一类对象,即函数可以当作数据传递。
除此之外,还是还有很多特性。比如下面四点

  • 函数可以被引用
  • 函数可以当作参数传递
  • 函数返回值可以是函数
  • 函数可以当作容器类型的元素

函数的功能还是非常强大,利用函数的以上特性,可以优雅的取代if条件,使代码的利用率和效率更高效。

5、函数的命名空间和作用域

5.1 函数的命名空间

在python中,命名空间是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。

内置命名空间:python解释器,即python解释器一启动就可以使用的名字,他们是存储在内置命名空间中
全局命名空间:即我们写的代码但不是函数中的代码,他是在程序从上往下被执行的过程中一次加载进内存的,防止了我们设置的所有变量名和函数名
局部命名空间:即我们在函数内部定义的名字,当调用函数的时候才会产生这个名称空间,随着函数执行的结束,这个命名空间也就结束了。

那么知道了函数的命名空间后咱们在python中如何使用呢。

在局部:可以使用全局、内置命名空间中的名称
在全局:可以使用内置命名空间中的名字,但是不能使用局部中的名字
在内置:不能使用局部和全局中的名字

在使用的时候有些需要注意的地方,比如
内置命名空间 > 全局命名空间 > 局部命名空间,如果需要得名字自身,就不需要向上级寻找了,如果自身没有,则向上一级寻找,如果最后内置的命名空间中都没有的话,程序就报错。

max=1
def f1():
    min=2
    def x2():
        min =3
        print(min)
    f2()
f1()
print(min)
#备注命名空间:局部名称空间--->全局名称空间--->内置名称空间

5.2 函数的作用域

函数的作用域,有全局作用域和局部作用域。
全局作用域:作用在全局,内置和全局命名空间中的名字是全局作用域
局部作用域:作用在局部,函数(局部命名空间中的名字是局部作用域)
对于不可变数据类型,在局部中是可以查看全局中的变量的,但是不可以修改,如果想要修改的话,需要在程序一开始的时候需要声明全局变量,如果在局部中声明了一个全局变量,那么这个变量在局部中的所有操作在全局中也有效。

x=10
def f1():
    def f2():
        print(x)
    return f2
x=50
def f3(func):
    x=2
    func()
x=500
f3(f1())

#备注:函数的作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关

!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值