python基础语法_学习笔记(四) _函数

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

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

一、局部变量和全局变量

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

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

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

       

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

  3.关键字 global

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

      

    运行结果是:

      

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

      

      运行结果如下:

        

二、函数参数

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

    1.形参变量:

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

    2.实参:

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

    

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

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

     

    运行结果:

     

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

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

     

    运行结果:

       

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

      

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

       

     运行结果:

       

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

      

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

 三、递归

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

    

    运行结果:

    

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

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

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

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

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

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

       

      

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

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

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

      

      

原文地址:https://www.cnblogs.com/coldMoon0915/p/10763870.html