欢迎光临散文网 会员登陆 & 注册

【Python系列】5. 函数与变量作用域

2021-07-14 16:20 作者:doubleyong  | 我要投稿

一、函数

函数:有一定功能的代码块

函数作用:提高利用率(重复使用)、封装(模块化)


语法

    def 函数名(参数列表):

         函数体(代码块)


调用

     函数名(参数)


分类

     有无参数:有参函数、无参函数

     有无返回值:有返回值函数、 无返回值函数


参数

        形参:定义函数时申明的参数

        实参:调用函数时传递的参数


        注:形参相当于复制实参,引用类型的复制,形参改变了,实参也会变

         值类型的复制,形参不会改变实参


参数参型

默认参数(形参后赋值,这个值称为默认值)

       默认值,要在必须参数的后面


必须参数(没有设置默认值的就是必须参数)


关键字参数(指定形参的名字来传递值)

student(age=18,name='doubleyong')


不定长参数 (*变量名, *后面的变量是元组类型)

注:不定长的参数也必须放到参数的后面

def student(name, *info)    # 变量info 是元组类型


返回值

return 值

函数没有return 时, 返回None

注:return 可以返回多个值,并且将多个返回值,装到一个元组中


  def add(num1,num2):

      return num1,num2,num1+num2

  result = add(5,3)

  print(result)    # result 为元组类型,结果为:(5,3,8)



二、变量作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。


变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

L (Local) 局部作用域

E (Enclosing) 闭包函数外的函数中

G (Global) 全局作用域

B (Built-in) 内建作用域


以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。



全局变量   or   局部变量

python中,只有模块(module)、类(class)、函数(def、lambda),会产生新的作用域


if(True):

     x = 5

print(x)

注:python中, 直接写if结构它是不会产生作用域的,所以x打印出来是5.


函数里定义的是局部变量,局部变量,当前函数可以访问

函数外定义是全局变量, 全局变量,所有的函数都可以访问,不能修改,要修改,必须在前面加global


x = 5

def change():

    global x

    x=10

change()

print(x)


函数里,要修改全局变量,变量前加global

如果要修改不是自己的变量,加nonlocal,它是向上找,最先找到谁就是谁。

nonlocal, 不能找到全局的变量


y = 5

def a():

    y = 10

    def b():

        # y=11

        def c():

            nonlocal y

            y=18

            print('c函数中的y',y)

        c()

        print('b函数中的y',y)

    b()

    print('a函数中的y',y)


a()

print('全局中的',y)


注: nolocal会向上找,找到上级的变量后,进行修改,但是不会找到全局变量,只限在def内定义的变量

【Python系列】5. 函数与变量作用域的评论 (共 条)

分享到微博请遵守国家法律