zoukankan      html  css  js  c++  java
  • 2019.4.16 函数篇

    第五章 函数---178页

    函数  ---  递归    还有什么吗   参数,返回值

    对哦其实,有了数据,数据类型,控制语句

    就已经足够了  完全够解决很多的问题了  那为什么还要函数呢?函数拿来干嘛?

    因为我们要少写一写重复的代码,然后函数就诞生了  我们把函数封装到里边

    这样函数就是重用的模块了   也只是增加了函数调用,传递参数,返回计算结果

    底层内存分析才是上道吗

    值得一提的是,Python 中有一类函数称为匿名函数,除了没有函数名,与正常函数无异。
    匿名函数语法格式为:lambda[arg1,arg2,...]:expression
    匿名函数适用场合:代码中存在一次函数引用的场合
    匿名函数调用方式:匿名函数定义时直接被调用

    函数就是一个模块啊  就是把前面我们学习的数据,字典,列表,控制语句包裹起来

    然后给个名字,当我们再次使用这个东西的时候,再调用  function 函数,功能

    内置函数

    标准库函数 import导入库

    第三方库函数  python社区,下载安装之后,import语句导入

    用户自定义函数

    先定义后调用

    万物皆对象 ----函数也是对象    栈    堆   内存存储

    68. 形参和实参_文档字符串-函数注释

      参数一定要对应,有就一定要传的,文档注释。help(函数名.__doc__)

    69.返回值详解

      可以有返回值,因为要对返回的值再进行操作嘛

      还有一个功能就是结束函数执行    就是这两个作用 

      可以作为一个列表,元祖,字典返回的

    70.函数也是对象_内存分析

      我们可以看出变量c和pritn_star 都是指向了同一个函数对象,因此,执行

      c(3),print_star(3) 的效果是完全一致的。圆括号意味着调用函数,没有圆括号

      的情况下,python会把函数当做普通对象

      定义函数的时候,对象已经建好了,所以每次调用的时候,不用再重建函数了

      函数是对象,所有可以用作参数和返回值   内部的存储就容易理解了  递归,装饰器

    71 全局变量  局部变量

      当我在函数中定义global是就会改变全局变量的值

      局部变量存在栈帧里边,函数消失,局部变量也消失

      在局部变量中不能直接用全局变量的,因为在局部中没定义多,所以认为的是全局的变量

      用global的时候,就指定了他是全局变量的a  locals()globals()全局变量不仅只有自己定义的 

    73.传递可变对象_内存分析

          他都是根据内存的存储来告诉我们为什么相等, 传递可变对象的引用

         一般我们传的是不可变的对象  字符串,int 元祖  因为不能做变量名,做了变量名会重新创建这个变量名的

      传参本质:从实参到形参的赋值操作   所以在python中参数的传递都是“引用传递”不是值传递

      传的是地址   都是叫做引用地址的赋值  记得局部变量在函数消失之后而消失

    74.传递不可变参数  

       在“赋值操作”,由于不可变对象无法修改系统会新创建一个对象

       所以在以前的  n = n+1  没次都会重新的创建对象吗

    75.深浅拷贝

        那请问我在什么时候会用到这个鬼东西,深拷贝不会改变源对象值

        为了更了解参数传递的底层原理吗?

        浅拷贝:只拷贝自己,自己下面的不考虑

        深拷贝:全部的都会拷贝,子代什么的

        对象的引用      [2,3,4[6,7]]   [6,7]是子对象吗    他们的子列表还是共用的

        浅拷贝,只拷贝第一个

        

       对象引用指向的问题  地址  他们是如何分配的  如何指向的,记得局部变量 会消失的

      

      内存中怎么存的   栈  堆    变量名  地址(id)type  value

    75 传递不可变对象包含的子对象是可变的情况   这就是浅拷贝了

       传递不可变对象是浅拷贝

       对哦  以前好像都没注意参数的位置  还有局部变量,全局变量的东西

       卧槽  它里面嵌套了列表  列表是可变的  

    77.参数的类型1

     位置参数  默认参数  关键字传参(命名参数)

      关键字传参可以不考虑位置,会根据变量找的

      默认值参数放到位置参数后面

     可变参数:*param,将多个参数收集到一个元祖对象中

          **param,将多个参数收集到一个字典对象中

      输出进行格式的改变是一定要想起format()

    78.参数的类型2

      可变参数:当位置参数匹配完了,剩下的就是元祖,字典的了

      强制命名参数:再带星号的“可变参数”后面增加新的参数,必须是“强制命名参数”

    79.lambda表达式和匿名函数

      有意思,它不需要返回值吗?

      lambda就是匿名函数吗? 只有一个表达式吗? 

      def都不需要,只需要lambda  函数也是对象,只是调用的方法不一样而已

      其他的都一样  有些东西都是一样的  只是可能加了点皮  退一步其实都一样的 

      对象   对象的引用  都是对象  都可以引用地址

    80.eval()函数用法

      针对字符串的

    81递归函数_调用内存分析-栈帧的创建

      什么是递归函数列,就是自己调自己

      方法也是函数啊  也在函数中使用  也是递归吗?

      利用的是栈的原理  先进后出   就是栈的内存原理

      两个条件:递归什么时候结束,一般用于返回值,不再自己调用自己

           把第N步的值和第n-1步相关联

      依次结束,因为要等上面的结束完下面的才能关闭   每个函数的内容都会执行一次的

      有意思的递归  12345  54321

    要等上边返回来结果,然后才能结束

    分析几何都可以用递归画出来

    83嵌套函数(内部函数)

      闭包会用到    怎么作用呢   在内部嵌套的话呢   def  这个函数式局部变量的

      所以在外边是不能调用的   只能在内部    数据隐藏吗

    84.nonlocla 关键字

      函数的嵌套,当想内函数使用外函数时的变量是  可以使用nonlocla关键字

      每个函数都有自己的局部变量

      很像global

    85 LEGB规则

      我想起来了,就是什么呢?找一个变量的时候呢,要先从函数内部开始

      一个个的往外  局部,嵌套(闭包),模块,内置

    函数总结:参数,作用域,递归,返回值,闭包

  • 相关阅读:
    【Spring源码解读】bean标签中的属性(二)你可能还不够了解的 abstract 属性和 parent 属性
    【效率工具】史上最好用的SSH一键登录脚本,第三版更新!
    WebGL简易教程——目录
    写技术博客的一些心得体会
    空间直线与球面相交算法
    three.js中帧缓存的使用
    curl使用小记(二)——远程下载一张图片
    curl使用小记(一)
    three.js中场景模糊、纹理失真的问题
    关于three.js中的矩阵更新
  • 原文地址:https://www.cnblogs.com/Py-king/p/10720377.html
Copyright © 2011-2022 走看看