Python学习教程(Python学习视频_Python学习路线):Day06函数和模块的使用

  

  Python学习教程(Python学习视频_Python学习路线):函数和模块的使用   

  

  在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解。   

  

           

  

  事实上,上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案。想到这一点问题的答案就呼之欲出了。   

  

           

  

  可以用Python的程序来计算出这个值,代码如下所示。   

     <前>   “““输入M和N计算C (M, N)“““m =, int(输入(& # 39;m =, & # 39;))   n =, int(输入(& # 39;n =, & # 39;))   fm =, 1 for  num 拷贝范围(1,m  +, 1):   ,,,fm  *=num   fn =, 1 for  num 拷贝范围(1,n  +, 1):   ,,,fn  *=num   fmn =, 1 for  num 拷贝范围(1,m 作用;n  +, 1):   ,,,fmn  *=, numprint (fm //, fn //, fmn)   之前      

        函数的作用   

  

  不知道大家是否注意到,在上面的代码中,我们做了3次求阶乘,这样的代码实际上就是重复代码。编程大师马丁先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题。对于上面的代码来说,我们可以将计算阶乘的功能封装到一个称之为“函数”的功能模块中,在需要计算阶乘的地方,我们只需要“调”用这个“函数”就可以了。   

  

        定义函数   

  

  在Python中可以使用   <代码>   def      关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数,这一点和数学上的函数非常相似,程序中函数的参数就相当于是数学上说的函数的自变量,而函数执行完成后我们可以通过   <代码>   返回      关键字来返回一个值,这相当于数学上说的函数的因变量。   

  

  在了解了如何定义函数后,我们可以对上面的代码进行重构,所谓重构就是在不影响代码执行结果的前提下对代码的结构进行调整,重构之后的代码如下所示。   

     <前>   def 阶乘(num):,,,,,,,,,,,求阶乘,,,,,,,,:param  num:,非负整数,,,,::返回,num的阶乘,,,,,,,   ,,,result =1   ,,,for  n 拷贝范围(1,num  +, 1):   ,,,,,,,result  *=, n ,,, return 结果   m =, int(输入(& # 39;m =, & # 39;))   n =, int(输入(& # 39;n =, & # 39;)) #,当需要计算阶乘的时候不用再写循环求阶乘而是直接调用已经定义好的函数打印(阶乘(m),//,阶乘(n),//,阶乘(m 安康;n))   之前      
  

     ,Python的数学模块中其实已经有一个阶乘函数了,事实上要计算阶乘可以直接使用这个现成的函数而不用自己定义。下面例子中的某些函数其实Python中也是内置了,我们这里是为了讲解函数的定义和使用才把它们又实现了一遍,实际开发中不建议做这种低级的重复性的工作。   

     

        函数的参数   

  

  函数是绝大多数编程语言中都支持的一个代码的“构建块”,但是Python中的函数与其他语言中的函数还是有很多不太相同的地方,其中一个显著的区别就是Python对函数参数的处理,在Python中,函数的参数可以有默认值,也支持使用可变参数,所以Python并不需要像其他语言一样支持      函数的重载      ,因为我们在定义一个函数的时候可以让它有多种不同的使用方式、下面是两个小例子。   

     <前>   得到random  import  randintdef  roll_dice (n=2):,,,,,,,,,,,,,,,,,,: param  n:,的个数,,,,:返回:,n颗点数之和,,,,,,,   ,,,total =0   ,,,for  _ 拷贝范围(n):   ,,,,,,,total  +=, randint (1, 6),,,, return  totaldef 添加(=0,,b=0,, c=0):,,,, return  a  +, b  +, c#,如果没有指定参数那么使用默认值摇两颗打印(roll_dice()) #,摇三颗印(roll_dice(3))打印(add())打印(添加(1))打印(添加(1,2)打印(添加(1,,2,,3))#,传递参数时可以不按照设定的顺序进行传递打印(添加(c=50,,=100,, b=200))   

Python学习教程(Python学习视频_Python学习路线):Day06函数和模块的使用