精华内容
下载资源
问答
  • 闲话: 上次第一期更完了之后,博主觉得题目貌似还是相对来说trl。 于是博主觉得在这一期除了介绍母...生成函数有普通型生成函数和指数型生成函数两种,其中普通型用的比较多。 形式上说,普通型生成函数用于解决...

    闲话:

    上次第一期更完了之后,博主觉得题目貌似还是相对来说trl。

    于是博主觉得在这一期除了介绍母函数以外,还带来了一波富有思维量的 毒瘤题 水题。

    嗯,就这样吧。闲话不多说,现在就开讲了!

     

    定义:

    生成函数即母函数,是组合数学中尤其是计数方面的一个重要理论和工具。

    生成函数有普通型生成函数和指数型生成函数两种,其中普通型用的比较多。

    形式上说,普通型生成函数用于解决多重集的组合问题,而指数型母函数用于解决多重集的排列问题。

    母函数还可以解决递归数列的通项问题(例如使用母函数解决斐波那契数列的通项公式)。

     

    对于任意数列   

    即用如下方法与一个函数联系起来:

    则称G(x)是数列的生成函数

    (注意:数列可以是有限的也可以是无限的,母函数也一样)

     

    (以上两段摘自百度百科~~~)

     

    嗯,这就是基本定义了。

    不知各位看官们有没有理解呢?

    想必应该是没有的,博主本人在第一次看到这些定义的时候也是一脸懵逼。

     

    那么既然如此,就通过上一些例题帮助大家理解,

    然后博主在立足于这个定义,

    给各位一边解释例题的证明,

    一边补充讲解这些定义吧。

     

    那么,一波例题即将发车啦!

    请各位系好安全带,并确认自己已经清楚上面例题内容。

    为保证您的出行安全,如若您还有迷惑,请自行下车回看(向上翻)。

    列车即将发车。下一站,例题!

     

    例题:

     

    (1)使用母函数法求Fib通项。

            写在前面:

            博主首先声明,如果只是为了证明Fib数列绝对不需要什么鬼母函数。

            如果您是高中生,请您使用特征根法手撕本题。

            如果您是初中生,这个问题就有一些困难了。

            不过不要紧,如果您知道n次方差公式,您还是能够求出结论的。

            并另外给您一个传送咒语:

            传送!!!

            这是一篇介绍初中生写的纯初等的方式解决Fib通项的文章,

            不过应该还有学生习作的性质,毕竟还扯了一些闲话。

           (不过不要紧啦,反正本章随笔介绍的重点是用母函数法来做)

            好了,关于Fib问题的 闲扯 介绍就先到这里,下面将用母函数法怎么搞。

     

    解: 对于Fib数列{1, 1, 2, 3, 5, 8, 13, 21, 34,......,} 

            我们有生成函数(记不记得,又名母函数)F(x) = x + x2 + 2*x3 + 3*x4 + 5*x5 + ...... + Fib(n)*xn + ......

            (换句话说,就是构造一个函数,使得它的n次方系数与Fib(n)形成一个一 一对应关系)

            (那为啥要这样构造呢?那当然有这样做的意义。这个意义后面自然就会显现。)

            嗯,下面继续我们的求解。根据Fib的递推式 Fib(n+2) == Fib(n+1) + Fib(n),我们可知,

            F(x) + x*F(x) == F(x)/x  - 1;                ···························································· (1)式

            (这是显然的。请读者在草稿本上画上几项,就容易发现其显然性。)

            (额。。。算我没说这句话吧还是稍微讲一下当凑字。)

                           

                             对于这个子问题的解释(各位巨佬们大可考虑自行跳过):

                             首先我们看等式左边:

                             F(x) = x  +  x +  2*x +  3*x +  5*x5 +  ......  +  Fib(n)*xn  +  ......

                                +                                            +

                         x*F(x) =         x +     x +   2*x4 +  3*x5 +  ......  +  Fib(n-1)*xn + ......      

                                                                             =

                                       x + 2*x+  3*x +  5*x+  8*x5 +  ......  +  (Fib(n-1)+Fib(n))  Fib(n+1) *xn  +  ......

                                      (说过了Fib(n+2) == Fib(n+1) + Fib(n)嘛!)                        

                              然后我们再来看等式右边

                              F(x)/x = x1-1 + x2-1 +  2*x3-1 +  3*x4-1 + 5*x5-1 +  ......  +  Fib(n)*xn-1 + Fib(n+1)*xn  ......                                                  

                              减去1之后,蓝色的多余部分显然就没有了。

                              然后我们对比每一项的系数(粉色部分),是不是发现,这两个函数是完全相同的?

                                这样不就证完了么?是不是很显然。

     

            好了,然后回归证明吧。

           我们把(1)式移项变形变形,是不是就得到了F(x) = -x /(x2+x+1)

           因为分母这方程的两个根下面会频繁用,不过这个分式啊根式啊什么的写起来太复杂,

           我们这里就用 λ1 和 λ2 表示这个方程的两根吧。

           也就是说,x2+x+1 == (x-λ1)*(x-λ2)

           那么我们对变形后的(1)再进行拆分,显然有F(x) = A/(x-λ1)  +  B/(x-λ2); A,B的意义同上面的λ。

          (就是当某个式子经常要使用却又比较复杂,我们常常会设一个量来表示。这可以类似理解成OI里的define) 

           然后我们会注意到 (1-x)-1 == 1 + x + x2 + x3 + x4 + ... + xn + ... (就是这样无限的加下去)

           (这一步非常关键,也是一种经典的构造方法。就可以把分数的多项式与整数型式的来进行对应系数比较。)

           就可以容易地推出Fib的通项就是 Fib(i) = -A/λ1 * λ1-i  +  -B/λ2 * λ2-i

           然后把A, B, λ1, λ2 算出来带进去就可以得到Fib的通项了。

                         

                         下面继续讲清楚这个证明中看起来尚有模棱(leng)两可的地方。(其实已经挺清楚了诶) 

                         先说一下这个结论吧,(1-x)-1 == 1 + x + x2 + x3 + x4 + ... + xn + ...

                         很显然对吧…     好吧,如果您觉得不是很显然,没关系,换个元,令k=x-1

                         然后就是要证明 k /(k-1) == 1 + k-1 + k-2 + k-3 + k-4 + k-5 + … + k-n + ……

                         对这个式子,套个等比数列求和考虑个极限就OK了。(如不知道请出门右转百度)

                         (其实不需要换元,不过换元还是貌似更方便初学者理解)

     

                         嗯,这个式子就说到这里。

                         不过然后怎么样呢?(其实我承认之前写的时候因为紧着去吃饭跳了点步,不过不影响阅读吧QAQ

                         好吧,那我就继续细讲一讲通过这个式子是怎么构造变换的。

                         首先,我们有F(x) = A/(x-λ1)  +  B/(x-λ2);(上面刚刚说明了)

                         然后我们考虑把λ1和λ2提出来构造(x-1)-1(这是一种非常常用的手法)

                         式子是不是就变换成了 A/[λ1*(x*λ1-1 - 1)]  +  B/[λ2*(x*λ2-1 - 1)],

                         也就是 (-A*λ1-1) * (1 - x*λ1-1)-1  +  (-B*λ2-1) * (1 - x*λ2-1)-1

                         然后我们就会惊奇的发现:我们构造出了两个(1-x)-1 的形式!(亮亮部分)

                         (好吧,其实一点也不惊奇。感觉自己沙壁一样…

                         然后就带公式呗,再写成西格玛的形式,就显然是:

                         F(x) == (-A*λ1-1) * Σ0<=k<=+∞ (x/λ1)k + (-B*λ2-1) * Σ0<=k<=+∞ (x/λ2)k;               ···························································· (2)式

                         又由题设,我们知道:

                         F(x) == x + x2 + 2*x3 + 3*x4 + 5*x5 + ...... + Fib(n)*xn + ......

                         这样不是特别方便对比,于是写成西格玛的形式,显然就是

                         F(x) == Σ1<=k<=+∞ Fib(k) * xk;               ···························································· (3)式

                         两个函数显然是同一个函数(只是不同的变换),

                         所以它们的对应系数显然是会相等的。

                         对比xi的系数,

                         由(2)式,得出xi的系数为-A/λ1 * λ1-i  +  -B/λ2 * λ2-i

                         由(3)式,得出xi的系数为 Fib(i);

                         又因为对应系数相同,所以上述两式恒等。

                         然后呢?我们发现了什么?

                         嘿嘿嘿… 您仔细瞧一瞧看一看。

                         这不就是Fib(i)的表达了么!!!                     

                         有没有顿悟之下想砸电脑的冲动?!!

                        (巨佬请仔细越过上面几句沙壁的话)

                         现在您应该清楚了用母函数法证明Fib通项的巧妙全程吧!

                        (如仍然不清楚,好心的博主回无限给您重复(只要往上翻就行了)

     

            第一题的证明(这也叫做证明?你要是竞赛答案写的这么繁琐肯定爆0)就到这里了。

           下面说明一下上面刚刚提到的一个拓展到了-1的“二项式定理?”(又叫做无穷缩比数列求和公式)

           其实这个还有一个应用更广泛的拓展定理,长这样:

           (1-x)-n-1 == Σ0<=k<=+∞ C(n+k, n) * xk

           这个结论非常有用,值得(应该)牢记

           证明的话非常简单。

           由n=0的形式对等式左右两边求n阶导就行了。

           (不知道导数的出门右转百度)

           (还是别出去了,就当我没说。百度上那么简略的讲解您看得懂也是神奇了…)

           (没有关系,高中老师会讲的QAQ)

     

            所以,既然这里都已经讲到了负次幂的泰勒展开

           (就是这个玩意从等式左边的样子展成等式右边的样子的过程叫做泰勒展开,又名泰勒张开等。名字啦,不要太在意。)

            要不就把分数幂的泰勒展开给讲掉吧!(这俩玩意在母函数里都用得极为广泛!)

            那现在就开讲了:

     

           (上图片摘自百度)

            这个的证明要用到高等数学,中学对此不做要求。

            如果您有兴趣,可以买一本同济大学的微积分教材。

            应该是在第一本的第四章吧,(哎,博主trl,真的记不太清…尬……)

            反正在第二换元法的后面讲到了Euler第二积分,又名Gamma函数 。

            这里讲到了阶乘向实数域的推广,并由这些导出了一系列结论(广义二项式定理也在其中)。

            嗯,就是这样。                其实并不需要管它啦!

            数竞都不要求会证(但要求掌握…也是醉了。)

            接下来博主可能会考虑添加关于广义二项式定理构造的题目,这就更方便大家理解啦!

                

            让我们再回顾一下第一题的证明全思路。(逻辑链)

            其实如果真正想这道题应该是这样想的。

            首先,注意到Fib数列是无限的。

            所以我们要考虑一种打开后是无限项的构造。

            然后我们再注意到Fib数列的递推关系,并由此得出F(x)关于x的方程。

            后面呢其实都是关于这个方程的求解以及一系列变换,

            发现往负指数张开的路是走的通的。

            然后就这么推下去呗,

            就可以一步步推出来咯。

     

            所以本质上,母函数是一种算两次思想。

            第一次是我们所构造出的需要求的东西

            第二次则是先把第一次的作为条件,

            通过递推关系啊,特征啊什么的一系列题设条件搞上去,

            然后变换变换变换再变换,把它变成第二种样子的式子。

            再利用到它实际上是与第一次是同一个式子这个本质,

            就会知道它们的函数值对应相等,对应系数相等一系列锐利的性质,

            就基本上可以导出所要求的啦!

           

            所以熟练掌握母函数的其一条件就是要有极强的变换能力。

            换句话说,就是得精通代数以及组合方面的各类公式直接的转换,

            还最好要有丰厚的知识储备和灵敏的嗅觉,

            这样就能够帮助你在解题的时候能够清楚地明确方向,

            并且势如破竹地朝那个方向推进。

     

            所以说,朋友,如果您有兴趣,继续往下看吧QAQ!

       

            那么第一道母函数例题和相关内容就介绍到这里了。 

            这也就意味着您已经入门了。

            那么这也就意味着,接下来的内容,

            将不再以 OI- 的速度讲解了,

            开始以 OI+/数竞- 的速率讲解了。

            是不是您对母函数的了解也更清楚了呢?

            那就让我们来趁热打铁,再来一题!

     

     

    (2)使用母函数法推导第二类Stirling数的通项。

     

             首先科普一下什么是第二类Stirling数吧。

             第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为
                  或者          (显然是摘自度娘的嘻嘻)

             好了,这个定义应该还是讲的蛮清楚。.

             直接上一个由定义衍生出的结论——

             第二类Stirling数满足递推关系:

             

              感性理解一下:这个结论是不是很显然?

              

     
     
     

     

    转载于:https://www.cnblogs.com/charlotte-Y/p/9897340.html

    展开全文
  • 入门javascript函数

    2017-10-13 10:02:52
     函数对于一个上了一二十年学的人来说是再熟悉不过的一个东西了,上初中的时候我们就会一次函数,例如y=kx+b(k,b是常数,k≠0);如:y=2x+3,这就是一个一次函数的例子,我们可以把这个一次函数转变为一个...
    作者:王先帅
    1.函数的理解
       函数对于一个上了一二十年学的人来说是再熟悉不过的一个东西了,上初中的时候我们就会一次函数,例如 y=kx+b(k,b是常数,k≠0);如:y=2x+3,这就是一个一次函数的例子,我们可以把这个一次函数转变为一个javascript函数:function linearFun(x){y=2*x+3;return y};这就是一个一次函数的javascript函数,我们可以调用这个函数,使用定义的函数名,如linearFun(2),这里的y就返回了7,很简单,小学生都会的算数题目y=2*2+3,y=7;你可以在控制台里做一个输出;好了,这里就不多做解释了。
                                                                          
    2.参数
      如上一小节所示,function linearFun(x){y=2*x+3;return y};这里的linearFun(x),中的x,就是这个函数的参数,下面再来一个稍微复杂一点的例子,
    function sum(a,b,c){var z=a+b+c;return z};这个例子是先带入一下,这里的参数就是a,b,c,所以说函数的参数是想传多少就传多少,但是这个函数有一个弊端就是函数里面只写了三个参数,那么如果我想求4个数的sum怎么办,如:我想求sum(1,2,3,4),怎么办呢,没办法,这个函数弊端就凸显出来了,可复用性很低。那么重头戏来了,如何解决呢?看下一段代码:
    function Sum(){
    var i,arr=0;
    for(i=0;i<=arguments.length;i++){
      arr+=arguments[i];
    };
    return arr;
    };
    这段代码就稍微复杂一点了,不过也比较好理解,这段代码和上面那段代码有着相似之处就是求和,不过这段代码你想传任何数量的值进去都可以,我们在控制台打印一下:
                                                                                   
    与上面那个函数相比这个函数的复用性就很高,虽然是一小段代码不过里面用到的东西还是很多的,例如for循环,arguments对象,for循环应该有任何语言基础的人都知道,这里不多做解释了,arguments在你没有理解javascript对象之前你就暂且把它理解成一个数组对象吧,这个数组对象存储的是你传进来的Sum函数的参数,例如你传进来的参数使(1,2,3,4,5,6,7),那么这个arguments就是[1,2,3,4,5,6,7];(数组我在我的另一篇文章里面已经做了入门讲解)。知道了这些,这段代码就很容易理解了.arr+=arguments[i]就和arr=arr+arguments[i],懂了吧,循环数组中的数值并进行累加,就这么简单,这个数组是可变的,你传啥数组就是啥;这节一不小心讲多了。
    3.变量的作用域
    讲到函数就不的不讲变量,讲到变量就不得不讲变量的作用域,变量就是字面意思,这里就不多做解释了,重要的是变量的作用域,先做一个字面解释在做一个代码解释:字面解释就是定义一个变量,再定义一个函数,这个变量在函数的外面:例如:var a=1;function showA(){alert(a)};这里就会弹出1.为什么呢?因为这时候的变量a就是全局变量,即声明在所有函数外面的变量,同样所有函数也能调用这个变量,相反的是局部变量,即,声明在函数内部的变量,只能在本身函数内部访问,函数外部及其他函数无法访问。下面来一个例子:
    var a=1;
    function Fun(){
    var b=2;
    alert(a);
    };
    alert(b);
                                                               
    结果就显而易见了,Fun函数可访问外部的a变量;但是在函数外部alert(b)时就会报错,因为b变量是局部变量,除函数Fun本身可访问外部无法访问。
    4.回调函数
      函数的参数在第二节我已经讲过了,其实函数的参数也可以是一个函数,这就涉及到函数的回调,下面我们来通过几个例子来解释一下函数的回调:
    第一个例子:
    function Mul(a,b,c){
    var i,arr=[];
    for(i=0;i<3;i++){
    arr[i]=arguments[i]*3;
    }
    return arr;
    }
    Mul(1,2,3);
                                                                           
    这里返回值是一个数组[3,6,9];但是如果我要把这个返回的数组传递给另一个函数怎么办呢?例如我想把这个返回的数组传递个另一个函数,让数组里面的所有值都加1;
    代码如下:
    function addOne(a){
    return a+1;
    };
    var arrOne=[];
    for(i=0;i<3;i++){
    arrOne[i]=addOne(arr[i])
    };
                                                                              
    具体代码如上所示,其实也就是把上面两段代码合并到一起,将Mul函数的返回值赋值给arrone数组,然后调用addOne函数将arrone数组依次加1,这样就实现了不同函数之间的传参。是不是看花眼了,没事,不用担心,下面我们来利用回掉函数来对这个例子进行改写:
      
    function Mul(a,b,c,callback){
    var i,arr=[];
    for(i=0;i<3;i++){
    arr[i]=callback(arguments[i]*3);
    }
    return arr;
    }
    上面这串代码与之前的代码有着很大的相似度,唯一的区别就是在Mul函数后面又加了一个参数callback,上面我也说了,函数的参数可以传一个数,也可以传一个函数,那么这个callback就是一个函数。下面我来用控制台对这个例子进行输出;
                                                                                                
    大家看上面的代码,Mul函数传递了四个参数,最后一个callback就是他的回调函数,我们可以事先将这个函数定义好,也可以使用匿名函数来代替Mul(1,2,3,function(a){return a+1});
    这样一个简单的回调函数示例就写好了,现在我再把回调函数的定义说一下:回调函数就是把第一个函数传递给第二个函数,并且由第二个函数来执行的第一个函数,那么这个第一个函数就是回调函数。这里的addOne就是所谓的回调函数;
    5.函数的其他特例
    5.1函数的返回值
    其实每一个函数的执行都会有一个返回值,这个返回值你可以自己定义,例如:function a(){alert("A");return "A"};这个函数在执行之后就会返回一个字符“A”,当然函数的返回值也可以是一个函数,例如function a(){alert("A");return function(){alert("b")}},这个函数在执行完之后就会返回function(){alert("b")};那么我们进行两次执行例如:a();这个是执行alert(“A”)那个函数,返回alert("b");那么再一次执行a()(),就是执行两遍a函数就会执行到 function(){alert("b")};这个代码段。
    5.2函数的重写
    上面一个小结我们已经了解到了函数的返回值,其实函数也是可以进行重写的,你只需要把函数的返回值再次赋给本身就可以进行函数的重写,例如:
    function a(){
    alert("a");
    a=function(){
    alert("b");
    }
    }
    上面的这段代码非常的简单,当你调用a的时候会alert(‘a’)出来,同时又把alert("b")赋值给a函数,这样a函数的值就会改变,所以当你再一次调用a的时候alert就不再是a,而是b。
      其实上面的五个小节我仅仅带大家了解了函数的基础内容,函数最重要的内容其实是“闭包”,“闭包”我会在后期用单独一篇文章来带大家了解。
     
    展开全文
  • 阅读目录一 数学定义的函数与python...本节作业一 数学定义的函数与python中的函数初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么...

    阅读目录

    一 数学定义的函数与python中的函数

    二 为何使用函数

    背景提要

    三 函数和过程

    四 函数参数

    五 局部变量和全局变量

    六 前向引用之'函数即变量'

    七 嵌套函数和作用域

    八 递归调用

    九 匿名函数

    十 函数式编程

    十一 内置函数

    十二 本节作业

    一 数学定义的函数与python中的函数

    初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数。自变量x的取值范围叫做这个函数的定义域

    例如y=2*x

    python中函数定义:函数是逻辑结构化和过程化的一种编程方法。

    copycode.gif

    1 python中函数定义方法:

    2

    3 def test(x):

    4 "The function definitions"

    5 x+=1

    6 return x

    7

    8 def:定义函数的关键字

    9 test:函数名

    10 ():内可定义形参

    11 "":文档描述(非必要,但是强烈建议为你的函数添加描述信息)

    12 x+=1:泛指代码块或程序处理逻辑

    13 return:定义返回值

    调用运行:可以带参数也可以不带

    函数名()

    copycode.gif

    补充:

    1.编程语言中的函数与数学意义的函数是截然不同的俩个概念,编程语言中的函数是通过一个函数名封装好一串用来完成某一特定功能的逻辑,数学定义的函数就是一个等式,等式在传入因变量值x不同会得到一个结果y,这一点与编程语言中类似(也是传入一个参数,得到一个返回值),不同的是数学意义的函数,传入值相同,得到的结果必然相同且没有任何变量的修改(不修改状态),而编程语言中的函数传入的参数相同返回值可不一定相同且可以修改其他的全局变量值(因为一个函数a的执行可能依赖于另外一个函数b的结果,b可能得到不同结果,那即便是你给a传入相同的参数,那么a得到的结果也肯定不同)

    2.函数式编程就是:先定义一个数学函数(数学建模),然后按照这个数学模型用编程语言去实现它。至于具体如何实现和这么做的好处,且看后续的函数式编程。

    二 为何使用函数

    背景提要

    现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏空了所有的知识量,写出了以下代码

    copycode.gif

    1 while True:

    2 if cpu利用率 > 90%:

    3 #发送邮件提醒

    4 连接邮箱服务器

    5 发送邮件

    6 关闭连接

    7

    8 if 硬盘使用空间 > 90%:

    9 #发送邮件提醒

    10 连接邮箱服务器

    11 发送邮件

    12 关闭连接

    13

    14 if 内存占用 > 80%:

    15 #发送邮件提醒

    16 连接邮箱服务器

    17 发送邮件

    18 关闭连接

    copycode.gif

    上面的代码实现了功能,但即使是邻居老王也看出了端倪,老王亲切的摸了下你家儿子的脸蛋,说,你这个重复代码太多了,每次报警都要重写一段发邮件的代码,太low了,这样干存在2个问题:

    代码重复过多,一个劲的copy and paste不符合高端程序员的气质

    如果日后需要修改发邮件的这段代码,比如加入群发功能,那你就需要在所有用到这段代码的地方都修改一遍

    你觉得老王说的对,你也不想写重复代码,但又不知道怎么搞,老王好像看出了你的心思,此时他抱起你儿子,笑着说,其实很简单,只需要把重复的代码提取出来,放在一个公共的地方,起个名字,以后谁想用这段代码,就通过这个名字调用就行了,如下

    copycode.gif

    def 发送邮件(内容)

    #发送邮件提醒

    连接邮箱服务器

    发送邮件

    关闭连接

    while True:

    if cpu利用率 > 90%:

    发送邮件('CPU报警')

    if 硬盘使用空间 > 90%:

    发送邮件('硬盘报警')

    if 内存占用 > 80%:

    发送邮件('内存报警')

    copycode.gif

    你看着老王写的代码,气势恢宏、磅礴大气,代码里透露着一股内敛的傲气,心想,老王这个人真是不一般,突然对他的背景更感兴趣了,问老王,这些花式玩法你都是怎么知道的? 老王亲了一口你儿子,捋了捋不存在的胡子,淡淡的讲,“老夫,年少时,师从京西沙河淫魔银角大王 ”, 你一听“银角大王”这几个字,不由的娇躯一震,心想,真nb,怪不得代码写的这么6, 这“银角大王”当年在江湖上可是数得着的响当当的名字,只可惜后期纵欲过度,卒于公元2016年, 真是可惜了,只留下其哥哥孤守当年兄弟俩一起打下来的江山。 此时你看着的老王离开的身影,感觉你儿子跟他越来越像了。。。

    总结使用函数的好处:

    1.代码重用

    2.保持一致性,易维护

    3.可扩展性

    三 函数和过程

    过程定义:过程就是简单特殊没有返回值的函数

    这么看来我们在讨论为何使用函数的的时候引入的函数,都没有返回值,没有返回值就是过程,没错,但是在python中有比较神奇的事情

    copycode.gif

    1 def test01():

    2 msg='hello The little green frog'

    3 print msg

    4

    5 def test02():

    6 msg='hello WuDaLang'

    7 print msg

    8 return msg

    9

    10

    11 t1=test01()

    12

    13 t2=test02()

    14

    15

    16 print 'from test01 return is [%s]' %t1

    17 print 'from test02 return is [%s]' %t2

    copycode.gif

    总结:当一个函数/过程没有使用return显示的定义返回值时,python解释器会隐式的返回None,

    所以在python中即便是过程也可以算作函数。

    copycode.gif

    1 def test01():

    2 pass

    3

    4 def test02():

    5 return 0

    6

    7 def test03():

    8 return 0,10,'hello',['alex','lb'],{'WuDaLang':'lb'}

    9

    10 t1=test01()

    11 t2=test02()

    12 t3=test03()

    13

    14

    15 print 'from test01 return is [%s]: ' %type(t1),t1

    16 print 'from test02 return is [%s]: ' %type(t2),t2

    17 print 'from test03 return is [%s]: ' %type(t3),t3

    copycode.gif

    总结:

    返回值数=0:返回None

    返回值数=1:返回object

    返回值数>1:返回tuple

    四 函数参数

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

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

    1036857-20161129115700052-1285769893.png

    3.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)

    4.默认参数

    5.参数组

    五 局部变量和全局变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

    当全局变量与局部变量同名时:

    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

    copycode.gif

    1 name='lhf'

    2

    3 def change_name():

    4 print('我的名字',name)

    5

    6 change_name()

    7

    8

    9 def change_name():

    10 name='帅了一笔'

    11 print('我的名字',name)

    12

    13 change_name()

    14 print(name)

    15

    16

    17

    18 def change_name():

    19 global name

    20 name='帅了一笔'

    21 print('我的名字',name)

    22

    23 change_name()

    24 print(name)

    copycode.gif

    六 前向引用之'函数即变量'

    copycode.gif

    1 def action():

    2 print 'in the action'

    3 logger()

    4 action()

    5 报错NameError: global name 'logger' is not defined

    6

    7

    8 def logger():

    9 print 'in the logger'

    10 def action():

    11 print 'in the action'

    12 logger()

    13

    14 action()

    15

    16

    17 def action():

    18 print 'in the action'

    19 logger()

    20 def logger():

    21 print 'in the logger'

    22

    23 action()

    copycode.gif

    七 嵌套函数和作用域

    看上面的标题的意思是,函数还能套函数?of course

    copycode.gif

    1 name = "Alex"

    2

    3 def change_name():

    4 name = "Alex2"

    5

    6 def change_name2():

    7 name = "Alex3"

    8 print("第3层打印",name)

    9

    10 change_name2() #调用内层函数

    11 print("第2层打印",name)

    12

    13

    14 change_name()

    15 print("最外层打印",name)

    copycode.gif

    此时,在最外层调用change_name2()会出现什么效果?

    没错, 出错了, 为什么呢?

    作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变

    copycode.gif

    1 例一:

    2 name='alex'

    3

    4 def foo():

    5 name='lhf'

    6 def bar():

    7 print(name)

    8 return bar

    9

    10 func=foo()

    11 func()

    12

    13

    14 例二:

    15 name='alex'

    16

    17 def foo():

    18 name='lhf'

    19 def bar():

    20 name='wupeiqi'

    21 def tt():

    22 print(name)

    23 return tt

    24 return bar

    25

    26 func=foo()

    27 func()()

    copycode.gif

    八 递归调用

    古之欲明明德于天下者,先治其国;欲治其国者,先齐其家;欲齐其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知,致知在格物。物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平。

    在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身

    copycode.gif

    1 def calc(n):

    2 print(n)

    3 if int(n/2) ==0:

    4 return n

    5 return calc(int(n/2))

    6

    7 calc(10)

    8

    9 输出:

    10 10

    11 5

    12 2

    13 1

    copycode.gif

    递归特性:

    1. 必须有一个明确的结束条件

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    堆栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html

    尾递归优化:http://egon09.blog.51cto.com/9161406/1842475

    九 匿名函数

    匿名函数就是不需要显式的指定函数

    copycode.gif

    1 #这段代码

    2 def calc(n):

    3 return n**n

    4 print(calc(10))

    5

    6 #换成匿名函数

    7 calc = lambda n:n**n

    8 print(calc(10))

    copycode.gif

    你也许会说,用上这个东西没感觉有毛方便呀, 。。。。呵呵,如果是这么用,确实没毛线改进,不过匿名函数主要是和其它函数搭配使用的呢,如下

    copycode.gif

    1 l=[3,2,100,999,213,1111,31121,333]

    2 print(max(l))

    3

    4 dic={'k1':10,'k2':100,'k3':30}

    5

    6

    7 print(max(dic))

    8 print(dic[max(dic,key=lambda k:dic[k])])

    copycode.gif

    copycode.gif

    1 res = map(lambda x:x**2,[1,5,7,4,8])

    2 for i in res:

    3 print(i)

    4

    5 输出

    6 1

    7 25

    8 49

    9 16

    10 64

    copycode.gif

    十 函数式编程

    峰哥原创面向过程解释:

    函数的参数传入,是函数吃进去的食物,而函数return的返回值,是函数拉出来的结果,面向过程的思路就是,把程序的执行当做一串首尾相连的函数,一个函数吃,拉出的东西给另外一个函数吃,另外一个函数吃了再继续拉给下一个函数吃。。。

    例如:

    用户登录流程:前端接收处理用户请求-》将用户信息传给逻辑层,逻辑词处理用户信息-》将用户信息写入数据库

    验证用户登录流程:数据库查询/处理用户信息-》交给逻辑层,逻辑层处理用户信息-》用户信息交给前端,前端显示用户信息

    函数式编程:

    http://egon09.blog.51cto.com/9161406/1842475

    11 高阶函数

    满足俩个特性任意一个即为高阶函数

    1.函数的传入参数是一个函数名

    2.函数的返回值是一个函数名

    十一 内置函数

    1036857-20161129121211131-1892084999.png

    内置参数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii

    十二 本节作业

    有以下员工信息表

    1036857-20161129121429506-935740238.png

    当然此表你在文件存储时可以这样表示

    1 1,Alex Li,22,13651054608,IT,2013-04-01

    现需要对这个员工信息文件,实现增删改查操作

    可进行模糊查询,语法至少支持下面3种:select name,age from staff_table where age > 22

    select * from staff_table where dept = "IT"

    select * from staff_table where enroll_date like "2013"

    查到的信息,打印后,最后面还要显示查到的条数

    可创建新员工纪录,以phone做唯一键,staff_id需自增

    可删除指定员工信息纪录,输入员工id,即可删除

    可修改员工信息,语法如下:UPDATE staff_table SET dept="Market" WHERE where dept = "IT"

    注意:以上需求,要充分使用函数,请尽你的最大限度来减少重复代码!

    展开全文
  • 一 数学定义的函数与python中的函数初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的...

    一 数学定义的函数与python中的函数

    初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数。自变量x的取值范围叫做这个函数的定义域

    例如y=2*x

    python中函数定义:函数是逻辑结构化和过程化的一种编程方法。

    copycode.gif

    1 python中函数定义方法:

    2

    3 def test(x):

    4 "The function definitions"

    5 x+=1

    6 return x

    7

    8 def:定义函数的关键字

    9 test:函数名

    10 ():内可定义形参

    11 "":文档描述(非必要,但是强烈建议为你的函数添加描述信息)

    12 x+=1:泛指代码块或程序处理逻辑

    13 return:定义返回值

    调用运行:可以带参数也可以不带

    函数名()

    copycode.gif

    补充:

    1.编程语言中的函数与数学意义的函数是截然不同的俩个概念,编程语言中的函数是通过一个函数名封装好一串用来完成某一特定功能的逻辑,数学定义的函数就是一个等式,等式在传入因变量值x不同会得到一个结果y,这一点与编程语言中类似(也是传入一个参数,得到一个返回值),不同的是数学意义的函数,传入值相同,得到的结果必然相同且没有任何变量的修改(不修改状态),而编程语言中的函数传入的参数相同返回值可不一定相同且可以修改其他的全局变量值(因为一个函数a的执行可能依赖于另外一个函数b的结果,b可能得到不同结果,那即便是你给a传入相同的参数,那么a得到的结果也肯定不同)

    2.函数式编程就是:先定义一个数学函数(数学建模),然后按照这个数学模型用编程语言去实现它。至于具体如何实现和这么做的好处,且看后续的函数式编程。

    二 为何使用函数

    背景提要

    现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏空了所有的知识量,写出了以下代码

    copycode.gif

    1 while True:

    2 if cpu利用率 > 90%:

    3 #发送邮件提醒

    4 连接邮箱服务器

    5 发送邮件

    6 关闭连接

    7

    8 if 硬盘使用空间 > 90%:

    9 #发送邮件提醒

    10 连接邮箱服务器

    11 发送邮件

    12 关闭连接

    13

    14 if 内存占用 > 80%:

    15 #发送邮件提醒

    16 连接邮箱服务器

    17 发送邮件

    18 关闭连接

    copycode.gif

    上面的代码实现了功能,但即使是邻居老王也看出了端倪,老王亲切的摸了下你家儿子的脸蛋,说,你这个重复代码太多了,每次报警都要重写一段发邮件的代码,太low了,这样干存在2个问题:

    代码重复过多,一个劲的copy and paste不符合高端程序员的气质

    如果日后需要修改发邮件的这段代码,比如加入群发功能,那你就需要在所有用到这段代码的地方都修改一遍

    你觉得老王说的对,你也不想写重复代码,但又不知道怎么搞,老王好像看出了你的心思,此时他抱起你儿子,笑着说,其实很简单,只需要把重复的代码提取出来,放在一个公共的地方,起个名字,以后谁想用这段代码,就通过这个名字调用就行了,如下

    copycode.gif

    def 发送邮件(内容)

    #发送邮件提醒

    连接邮箱服务器

    发送邮件

    关闭连接

    while True:

    if cpu利用率 > 90%:

    发送邮件('CPU报警')

    if 硬盘使用空间 > 90%:

    发送邮件('硬盘报警')

    if 内存占用 > 80%:

    发送邮件('内存报警')

    copycode.gif

    你看着老王写的代码,气势恢宏、磅礴大气,代码里透露着一股内敛的傲气,心想,老王这个人真是不一般,突然对他的背景更感兴趣了,问老王,这些花式玩法你都是怎么知道的? 老王亲了一口你儿子,捋了捋不存在的胡子,淡淡的讲,“老夫,年少时,师从京西沙河淫魔银角大王 ”, 你一听“银角大王”这几个字,不由的娇躯一震,心想,真nb,怪不得代码写的这么6, 这“银角大王”当年在江湖上可是数得着的响当当的名字,只可惜后期纵欲过度,卒于公元2016年, 真是可惜了,只留下其哥哥孤守当年兄弟俩一起打下来的江山。 此时你看着的老王离开的身影,感觉你儿子跟他越来越像了。。。

    总结使用函数的好处:

    1.代码重用

    2.保持一致性,易维护

    3.可扩展性

    三 函数和过程

    过程定义:过程就是简单特殊没有返回值的函数

    这么看来我们在讨论为何使用函数的的时候引入的函数,都没有返回值,没有返回值就是过程,没错,但是在python中有比较神奇的事情

    copycode.gif

    1 def test01():

    2 msg='hello The little green frog'

    3 print msg

    4

    5 def test02():

    6 msg='hello WuDaLang'

    7 print msg

    8 return msg

    9

    10

    11 t1=test01()

    12

    13 t2=test02()

    14

    15

    16 print 'from test01 return is [%s]' %t1

    17 print 'from test02 return is [%s]' %t2

    copycode.gif

    总结:当一个函数/过程没有使用return显示的定义返回值时,python解释器会隐式的返回None,

    所以在python中即便是过程也可以算作函数。

    copycode.gif

    1 def test01():

    2 pass

    3

    4 def test02():

    5 return 0

    6

    7 def test03():

    8 return 0,10,'hello',['alex','lb'],{'WuDaLang':'lb'}

    9

    10 t1=test01()

    11 t2=test02()

    12 t3=test03()

    13

    14

    15 print 'from test01 return is [%s]: ' %type(t1),t1

    16 print 'from test02 return is [%s]: ' %type(t2),t2

    17 print 'from test03 return is [%s]: ' %type(t3),t3

    copycode.gif

    总结:

    返回值数=0:返回None

    返回值数=1:返回object

    返回值数>1:返回tuple

    四 函数参数

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

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

    1036857-20161129115700052-1285769893.png

    3.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)

    4.默认参数

    5.参数组

    1560722-20190115211750449-275722068.png

    五 局部变量和全局变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

    当全局变量与局部变量同名时:

    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

    copycode.gif

    1 name='lhf'

    2

    3 def change_name():

    4 print('我的名字',name)

    5

    6 change_name()

    7

    8

    9 def change_name():

    10 name='帅了一笔'

    11 print('我的名字',name)

    12

    13 change_name()

    14 print(name)

    15

    16

    17

    18 def change_name():

    19 global name

    20 name='帅了一笔'

    21 print('我的名字',name)

    22

    23 change_name()

    24 print(name)

    copycode.gif

    六 前向引用之'函数即变量'

    copycode.gif

    1 def action():

    2 print 'in the action'

    3 logger()

    4 action()

    5 报错NameError: global name 'logger' is not defined

    6

    7

    8 def logger():

    9 print 'in the logger'

    10 def action():

    11 print 'in the action'

    12 logger()

    13

    14 action()

    15

    16

    17 def action():

    18 print 'in the action'

    19 logger()

    20 def logger():

    21 print 'in the logger'

    22

    23 action()

    copycode.gif

    七嵌套函数和作用域

    1560722-20190115212634421-1444370311.png

    看上面的标题的意思是,函数还能套函数?of course

    copycode.gif

    1 name = "Alex"

    2

    3 def change_name():

    4 name = "Alex2"

    5

    6 def change_name2():

    7 name = "Alex3"

    8 print("第3层打印",name)

    9

    10 change_name2() #调用内层函数

    11 print("第2层打印",name)

    12

    13

    14 change_name()

    15 print("最外层打印",name)

    copycode.gif

    此时,在最外层调用change_name2()会出现什么效果?

    没错, 出错了, 为什么呢?

    作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变

    1560722-20190118210639773-418121659.png

    1560722-20190118211450602-824206683.png

    1560722-20190118211731698-843704204.png

    return 函数的返回值 None表示test1无返回值。

    1560722-20190118212014656-1268765927.png

    函数调用

    1560722-20190118212057753-488629031.png

    地址

    1560722-20190118212247132-1558400664.png

    1560722-20190118212310213-434552076.png

    作用域

    1560722-20190118212657232-1387445157.png

    1560722-20190118212727637-2039231973.png

    1560722-20190119094047487-566539340.png

    foo()()()==4个#号的一串

    1560722-20190118212706139-470757324.png

    解释图

    copycode.gif

    1 例一:

    2 name='alex'

    3

    4 def foo():

    5 name='lhf'

    6 def bar():

    7 print(name)

    8 return bar

    9

    10 func=foo()

    11 func()

    12

    13

    14 例二:

    15 name='alex'

    16

    17 def foo():

    18 name='lhf'

    19 def bar():

    20 name='wupeiqi'

    21 def tt():

    22 print(name)

    23 return tt

    24 return bar

    25

    26 func=foo()

    27 func()()

    copycode.gif

    八 递归调用

    古之欲明明德于天下者,先治其国;欲治其国者,先齐其家;欲齐其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知,致知在格物。物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平。

    在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身

    copycode.gif

    1 def calc(n):

    2 print(n)

    3 if int(n/2) ==0:

    4 return n

    5 return calc(int(n/2))

    6

    7 calc(10)

    8

    9 输出:

    10 10

    11 5

    12 2

    13 1

    copycode.gif

    ContractedBlock.gif 递归问路

    1560722-20190116120838445-4290394.png

    例子

    1560722-20190116121003042-1432711845.png

    流程图

    1560722-20190116121027508-1846601674.png

    1560722-20190116121102213-817369285.png

    例子,加流程

    1560722-20190116121405111-1092021919.png

    res=ask_way(person_list)

    需要一个等待值,才能运行下面代码

    相当于将图中彩色代码块调用重新运行一次。

    递归特性:

    1. 必须有一个明确的结束条件

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    堆栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html

    尾递归优化:http://egon09.blog.51cto.com/9161406/1842475

    ContractedBlock.gif 二分查找

    复习

    1560722-20190116125007082-1178993012.png

    1560722-20190116125024213-1531373396.png

    1560722-20190116125039687-663738738.png

    1560722-20190116125751101-1766507581.png

    递归调用图

    nonlocal和golbal的作用一样

    九 匿名函数

    匿名函数就是不需要显式的指定函数

    copycode.gif

    1 #这段代码

    2 def calc(n):

    3 return n**n

    4 print(calc(10))

    5

    6 #换成匿名函数

    7 calc = lambda n:n**n

    8 print(calc(10))

    copycode.gif

    你也许会说,用上这个东西没感觉有毛方便呀, 。。。。呵呵,如果是这么用,确实没毛线改进,不过匿名函数主要是和其它函数搭配使用的呢,如下

    copycode.gif

    1 l=[3,2,100,999,213,1111,31121,333]

    2 print(max(l))

    3

    4 dic={'k1':10,'k2':100,'k3':30}

    5

    6

    7 print(max(dic))

    8 print(dic[max(dic,key=lambda k:dic[k])])

    copycode.gif

    copycode.gif

    1 res = map(lambda x:x**2,[1,5,7,4,8])

    2 for i in res:

    3 print(i)

    4

    5 输出

    6 1

    7 25

    8 49

    9 16

    10 64

    copycode.gif

    1560722-20190119135331721-1161807723.png

    基本形式

    1560722-20190119135434871-963043621.png

    1560722-20190119135447009-694767373.png

    1560722-20190119135517992-753951000.png

    1560722-20190119135748572-1150912084.png

    1560722-20190119135805597-722739034.png

    多个函数编译步骤需要()

    匿名函数的是一个结果

    十 函数式编程

    峰哥原创面向过程解释:

    函数的参数传入,是函数吃进去的食物,而函数return的返回值,是函数拉出来的结果,面向过程的思路就是,把程序的执行当做一串首尾相连的函数,一个函数吃,拉出的东西给另外一个函数吃,另外一个函数吃了再继续拉给下一个函数吃。。。

    例如:

    用户登录流程:前端接收处理用户请求-》将用户信息传给逻辑层,逻辑词处理用户信息-》将用户信息写入数据库

    验证用户登录流程:数据库查询/处理用户信息-》交给逻辑层,逻辑层处理用户信息-》用户信息交给前端,前端显示用户信息

    函数式编程:

    http://egon09.blog.51cto.com/9161406/1842475

    11 高阶函数

    满足俩个特性任意一个即为高阶函数

    1.函数的传入参数是一个函数名

    2.函数的返回值是一个函数名

    1560722-20190119161318017-1750334806.png

    1560722-20190119161329924-1125743788.png

    1560722-20190119161345169-768536670.png

    1560722-20190119161357208-393905578.png

    1560722-20190119161409613-1340019918.png

    1560722-20190119161425838-2089172588.png

    1560722-20190119161435968-64848018.png

    1560722-20190119161446304-1910986526.png

    ContractedBlock.gif map函数

    1560722-20190119182141399-2009894663.png

    1560722-20190119182158309-245636932.png

    1560722-20190119182232984-1669451599.png

    1560722-20190119182518124-196865879.png

    1560722-20190119182534484-1775871026.png

    1560722-20190119182545325-1212477497.png

    1560722-20190119182603094-1675220800.png

    1560722-20190119182614500-293088922.png

    1560722-20190119182630324-1895291097.png

    1560722-20190119182641930-1540050379.png

    1560722-20190119182700794-113958481.png

    1560722-20190119182712869-214949417.png

    map函数的用法:返回的是一个map对象,不是直接输出,可以通过for 循环或者list()来显示。

    ContractedBlock.gif reduce函数

    1560722-20190121141419603-2107647982.png

    1560722-20190121141431616-15195353.png

    1560722-20190121141441241-1899644976.png

    1560722-20190121141459943-33912170.png

    1560722-20190121141513204-1096877979.png

    1560722-20190121141527752-797668032.png

    1560722-20190121141612427-514757041.png

    1560722-20190121141630792-884842839.png

    1560722-20190121141643324-971397265.png

    1560722-20190121141655397-362756594.png

    ContractedBlock.gif filter函数

    在Python内建函数中,有一个和map()函数用法类似、却可以用来过滤元素的迭代函数,这个函数就是filter()。它的函数原型是:filter(function,itearable)

    filter返回的是一个filter对象,可以通过list()或者for循环取出内容。 注意:传入的函数返回值必须是布尔类型。若是真则保留元素,假则过滤掉这元素

    1560722-20190120224957929-1619890119.png

    1560722-20190120225012640-2069727339.png

    1560722-20190120225021534-2097261445.png

    1560722-20190120225042639-1781401372.png

    1560722-20190120225052244-491049347.png

    1560722-20190120225117410-2009584843.png

    1560722-20190120225137989-1078965715.png

    ContractedBlock.gif 总结

    十一 内置函数

    1036857-20161129121211131-1892084999.png

    ContractedBlock.gif View Code

    1560722-20190121151438794-52931929.png

    1560722-20190121151459156-986108688.png

    1560722-20190121151529118-94044534.png

    1560722-20190121151543121-646363650.png

    1560722-20190121151601871-2017439336.png

    1560722-20190121151617556-525484860.png

    1560722-20190121151642301-792804320.png

    1560722-20190121151708163-1178363565.png

    1560722-20190121151722092-1758910574.png

    1560722-20190121151740848-657559240.png

    1560722-20190121151757775-1570110574.png

    1560722-20190121151810290-1288175719.png

    1560722-20190121151829045-494541653.png

    1560722-20190121151847368-1429935421.png

    1560722-20190121151859016-1304245565.png

    1560722-20190121151914222-1554599450.png

    1560722-20190121151927569-360475150.png

    1560722-20190121151942333-690726304.png

    1560722-20190121152000323-1190420693.png

    内置参数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii

    十二 本节作业

    有以下员工信息表

    1036857-20161129121429506-935740238.png

    当然此表你在文件存储时可以这样表示

    1 1,Alex Li,22,13651054608,IT,2013-04-01

    现需要对这个员工信息文件,实现增删改查操作

    可进行模糊查询,语法至少支持下面3种:select name,age from staff_table where age > 22

    select * from staff_table where dept = "IT"

    select * from staff_table where enroll_date like "2013"

    查到的信息,打印后,最后面还要显示查到的条数

    可创建新员工纪录,以phone做唯一键,staff_id需自增

    可删除指定员工信息纪录,输入员工id,即可删除

    可修改员工信息,语法如下:UPDATE staff_table SET dept="Market" WHERE where dept = "IT"

    注意:以上需求,要充分使用函数,请尽你的最大限度来减少重复代码!

    1560722-20190104000936852-57842127.jpg

    1560722-20190104000943093-1186721548.jpg

    1560722-20190104000949058-1843624909.jpg

    1560722-20190104000954182-546703097.jpg

    1560722-20190104000958978-2134267563.jpg

    1560722-20190104001003888-1803080447.jpg

    1560722-20190104001009093-1617400274.jpg

    1560722-20190104001013462-1767408486.jpg

    1560722-20190104001018083-2001383476.jpg

    1560722-20190104001022862-1881413279.jpg

    1560722-20190104001027587-927047296.jpg

    1560722-20190104001032473-12378437.jpg

    1560722-20190104001037363-419256214.jpg

    1560722-20190104001044368-759270606.png

    1560722-20190104001049993-1003061347.jpg

    1560722-20190104001056172-663095660.jpg

    1560722-20190104001102540-1613227812.jpg

    1560722-20190104001109693-914042073.jpg

    1560722-20190104001115593-834916929.jpg

    1560722-20190104001121247-1890567905.jpg

    1560722-20190104001126302-2106701887.jpg

    1560722-20190104001131843-1392771976.jpg

    1560722-20190122135104335-371578286.png

    1560722-20190122135124520-1630732591.png

    1560722-20190122135146471-1681300058.png

    1560722-20190122135228145-324877014.png

    1560722-20190122135247707-1305119150.png

    1560722-20190122135313503-155897562.png

    1560722-20190122135327412-864010137.png

    1560722-20190122135354772-140911972.png

    1560722-20190122135411320-718213005.png

    1560722-20190122135447696-1162612291.png

    1560722-20190122135527587-1662606123.png

    1560722-20190122135540793-547461239.png

    1560722-20190122135553866-1602363138.png

    1560722-20190122135617037-2112337597.png

    1560722-20190122135629517-522705720.png

    1560722-20190122135650558-1359251323.png

    1560722-20190122135713100-2080184123.png

    1560722-20190122135730267-423656592.png

    1560722-20190122135745282-2065219051.png

    1560722-20190122135757785-26695710.png

    1560722-20190122135808782-1279110020.png

    1560722-20190122135824903-251823364.png

    1560722-20190122135837154-1860449492.png

    1560722-20190122135850363-1233546159.png

    1560722-20190122135903651-89816390.png

    1560722-20190122135915501-271822410.png

    1560722-20190122135928767-735044465.png

    1560722-20190122135945117-1729338055.png

    1560722-20190122135957154-1723520453.png

    1560722-20190122140014019-1567860595.png

    1560722-20190122140031488-502260469.png

    1560722-20190122140051190-899868794.png

    1560722-20190122140107029-269025346.png

    1560722-20190122140224434-322097428.png

    1560722-20190122140417512-1051966164.png

    1560722-20190122140434529-1110652274.png

    1560722-20190122140446579-1354075591.png

    1560722-20190122140457877-741304626.png

    1560722-20190122140508707-1546790983.png

    1560722-20190122140521217-592549397.png

    1560722-20190122140533598-942766336.png

    1560722-20190122140547522-1145203753.png

    1560722-20190122140603000-2147103579.png

    展开全文
  • 函数式编程-入门

    2018-03-19 10:43:11
    大家对函数式编程有一个概念,为后面学习函数式编程提供基础。 介绍 函数式编程不过是相比于传统的面向过程和面向对象的一种新的编程方法而已。 他的出现并不是为了取代谁,也不会取代。他的出现只是为了改善传统的 ...
  • 《三角函数入门》涉及到的所有知识点都没有超出高中数学范围,其间还有不少是对初中知识点的复习。总之,尽量把入门门槛降低以适合每个初学者。而《三角函数入门》其实也是以笔者在高中任教时的讲义为基础的。...
  • 因为不论是哪种类型,对于刚入门的小白而言其实意义并不大。 首先,编程语言一般根据其运行的过程不同分为三类。 第一类:解释型 解释型:写好的代码交给解释器,由解释器逐行的进行解释运行。由于程序是运行在解释...
  • 针对在校大学生的C语言入门学习——函数 为什么要使用函数 如果你没有接受过系统的训练就能主动想要封装函数,说明你在编程上是一个天才,千万不要辜负自己的天赋!函数在语法上并不难理解,但是什么时候使用函数才...
  • Cocos2d入门--2-- 三角函数的应用 其实,三角函数的知识点是初中的数学基础。但是在编程里合理的利用的话,也会很好玩的,可以制作出很多有趣的动画特效。 首先要注意的是 角度 和 弧度 的转换。 360度 = 2...
  • 不对不对,接下来是假期过后开始进入学习状态啦,Python的学习才刚刚入门,接下来正是进阶的关键时期,在此写下Python的重中之重:函数与模块 这篇博客,希望大家从这篇博客里有所收获。 同C/C++一样,Python中的...
  • 确实,从上面那个例子来看,x 和 y 的关系的确是拟合成了一条直线(参见下图): 而且,在上例中,我们最开始的假设是 y = a + bx ——大家回顾一下初中数学,在我们刚学坐标系的时候,最早学的就是如何在直角坐标...
  • 该系列文章:学一门编程语言正在变得越来越容易,只要念过高中(甚至是初中、小学),能熟练聊qq和懂得一点点office软件的人,入门一门编程语言都不在话下。我们跟别人沟通,靠的是语言,无论是说出来还是写出来,也...
  • 《python入门,编程基础概念介绍(变量,条件,函数,循环)》 《python中的数据类型(list,tuple,dict,set,None)》 学一门编程语言正在变得越来越容易,只要念过高中(甚至是初中、小学),能熟练聊qq和懂得...
  • 其实,三角函数的知识点是初中的数学基础。但是在编程里合理的利用的话,也会很好玩的,可以制作出很多有趣的动画特效。 首先要注意的是 角度 和 弧度 的转换。 360度 = 2×PI弧度 180度 = PI弧度 所以30度的正弦...
  • 现在我们如果要求 n 的阶乘: 千万别告我你不知道什么阶乘,可能你需要回去问下你的初中数学老师。 n! = 1 * 2 * 3 * ... * n 看懂了哇,想想看代码怎么写。 想不出来还是看我写的吧: def factorial(n): if n == 1...
  • 在编程中,会经常用到数学计算,所以C++将常用的数学计算,例如求正余弦等,封装成函数(正是我们在3.2 数学计算中学习到的),我们只需要写入简单的语句就可以执行所需要的功能,这正是函数的意义。在这一章的学习...
  • 所以google官方推荐你只要代码有三个以上的if分支,就使用when来代替if/else语句 例: var school = "小学" var student = when(school){ "小学" -> "小学生" "初中" -> "初中生" "高中" -> "高中生" "大学" ->...
  • [初中教育]C语言程序设计入门篇单 词 main 主函数 int 整型 float 浮点型 char 字符型 printf 输出函数 scanf 输入函数 if 如果 else 否则 for while 当……时候 swith case 案例 default 默认 break 跳出 C语言程序...
  • 本博客适合高中学生入门编程知识学习,从高中的数学概念转换到其python实现,提高自身对编程的学习兴趣。 import numpy as np import matplotlib.pyplot as plt %matplotlib inline # 在jupyter notebook显示图片 1...
  • 图文并茂的通达信编程教程,涵盖初级、中级、高级,心之所向必定学的明白,另外附录了通达信全部函数表,以及常用的88条选股公式,现学现用,希望你能喜欢
  • 2020-03-22三角函数辅助角公式_三角函数复习中的“滑过”现象高三数学的一轮复习时,教师们往往只注意知识点复习是否全面,而使一些重要的、本质的东西在不经意间“滑过”,可说是“赢了起点,却失去了终点”,实在令...
  • 保存网页 先分析流程1,爬取网页,baseurl 就是我们要爬虫的网页网址,往下走,调用了 getData(baseurl) , 我们来看 getData方法 for i in range(0, 10): # 调用获取页面信息的函数,10次 url = baseurl + str(i *...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,547
精华内容 1,018
关键字:

初中函数入门