接着上次得笔记,今天还是继续函数的相关学习,局部变量、全局变量、默认值参数、参数组

关键字、 深拷贝、浅拷贝、内置函数等

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

一、局部变量和全局变量

  全局变量与局部变量两者的本质区别就是在于作用域

  1.局部变量: 只在函数内部生效,这个函数就是这个变量的作用域,

  2.全局变量:作用域是整个程序

       python基础语法_学习笔记(四) _函数 随笔 第1张

  上图中的num是全部变量,num1 是局部变量

  3.关键字 global

    如果真想要在函数体内修改全局变量的值,就是要使用global关键字

      python基础语法_学习笔记(四) _函数 随笔 第2张

    运行结果是:

      python基础语法_学习笔记(四) _函数 随笔 第3张

   注:如果全局标量没有定义,而只是在函数内部用global 关键字定义变量,在函数外部调用,会报错,提示该函数没有定义

      python基础语法_学习笔记(四) _函数 随笔 第4张

      运行结果如下:

        python基础语法_学习笔记(四) _函数 随笔 第5张

二、函数参数

    参数能让你的函数更灵活,还可以根据调用时传参的不同来决定函数内部的执行流程,函数的参数是分形参实参

    1.形参变量:

      只有在被调用时,才分配内存单元,在调用结束时,即可释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调函数后,则不能再使用该形参变量

    2.实参:

      可以时常量、变量、表达式、函数等,无论实参是何种类型的量,再进行函数调用时,他们必须有确定的值,以便把这些值传送给形参,因此应先预先用赋值、输入等办法使参数获得确定的值

    python基础语法_学习笔记(四) _函数 随笔 第6张

    3.函数形参中* 号的作用

      可变参数,一个* 号传参,返回的是一个元组

     python基础语法_学习笔记(四) _函数 随笔 第7张

    运行结果:

     python基础语法_学习笔记(四) _函数 随笔 第8张

    4.函数形参中** 号的作用

      可变参数,函数的形参中有两个** 号,函数返回的是一个字典

     python基础语法_学习笔记(四) _函数 随笔 第9张

    运行结果:

       python基础语法_学习笔记(四) _函数 随笔 第10张

    5.参数* 和** 联合用法,*是不需要关键字传参的,所以* 参数必须再 ** 参数前面,而且只有用关键字传参数了,就不能用没有关键字的参数传参。如下图:

      python基础语法_学习笔记(四) _函数 随笔 第11张

    6.调用的时候用*号,代表的是解包(解的是字符串、元组、列表等有序的数据类型)

       python基础语法_学习笔记(四) _函数 随笔 第12张

     运行结果:

       python基础语法_学习笔记(四) _函数 随笔 第13张

    7.指定传参的类型,格式如下:

      python基础语法_学习笔记(四) _函数 随笔 第14张

      :str 是指定要传参数的类型,但是如果不按照指定的类型传参数,也是可以的,不会报错

 三、递归

    递归 ,函数自己调用自己 最深999次,y也是循环的一种,但是能用循环,别用递归

    python基础语法_学习笔记(四) _函数 随笔 第15张

    运行结果:

    python基础语法_学习笔记(四) _函数 随笔 第16张

四、python 中的复制,深拷贝和浅拷贝

    在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用

    深拷贝和浅拷贝的区别: 浅拷贝不会开辟新的内存地址,深拷贝会新开劈新的内存地址

    1.浅拷贝:浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素

    2.深拷贝:深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本(另开辟内存)

      下图中有两中浅拷贝和深拷贝的方式:

       python基础语法_学习笔记(四) _函数 随笔 第17张

      python基础语法_学习笔记(四) _函数 随笔 第18张

      l5 = copy.copy(li) # 如果是一层的话,算深拷贝,但是数据中又加一层,就不行,所以也算浅拷贝

   3.globals()  打印该模块中所有的变量

   4. locals()  打印该方法中所有的变量

 

      

 

 

 

      

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄