python基础学习笔记(七)

系统 1771 0

python基础学习笔记(七)

2013-04-24 00:16  虫师 阅读( ... ) 评论( ... ) 编辑 收藏

 

本章介绍如何将语句组织成函数,这样,可以告诉计算机如何做事。

 

下面编写一小段代码计算婓波那契数列(前两个数的和是第三个数)

                fibs = [0,1]   
                
                  #
                
                
                   定义一个列表,初始内容是0,1
                
                
                  for
                
                 i 
                
                  in
                
                 range(8):  
                
                  #
                
                
                  循环8次
                
                
  fibs.append(fibs[-2]+fibs[-1])  
                
                  #
                
                
                  append在末尾追加一个数,这个是它前面两个数的和
                
                
                  #
                
                
                  输入
                
                
>>>
                
                   fibs

                
                
                  #
                
                
                  输出
                
                
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
              

因为赋完值 fibs 已经有两个数了( 0 1 ),所以循环 8 次之后,列表有 10 个数,两个数相加等于第 3 个数。

是不是觉得应该由我们输入来控制打印多少个数?只用把程序小变一下就行了。

                fibs = [0,1
                
                  ]
num 
                
                = input(
                
                  '
                
                
                  How many fibonacci numbers do you want?
                
                
                  '
                
                
                  )

                
                
                  for
                
                 i 
                
                  in
                
                 range(num-2
                
                  ):
    fibs.append(fibs[
                
                -2]+fibs[-1
                
                  ])

                
                
                  print
                
                
                   fibs

                
                
                  #
                
                
                  输入
                
                
>>>
                
                   
How many fibonacci numbers do you want?
                
                12

                
                  #
                
                
                  输出
                
                
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
              

 

 

抽象

  抽象有可以节省很多工作,它使得计算机程序可以让人读懂的关键。计算机喜欢处理精确和具体的指令,但人不同,我们更喜欢丢进去一个东西,计算机就能反馈给我们想要的结果,而不是由我们一步一步的告诉它怎么做。因此,上面的代码抽象一点,应该是这样的:

 

                num = input(
                
                  '
                
                
                  How many fibonacci numbers do you want?
                
                
                  '
                
                
                  )

                
                
                  print
                
                 fibs
              

 

那计算机怎么知道要怎么做?我们可以把处理的过程封装成函数,在我们每次用到时只用调用这个函数就可以了。

 

 

创建函数

  函数是可以调用的,它执行某种行为并且返回一个值。内建的 callable 函数可以用来判断函数是否可调用:

                >>> 
                
                  import
                
                
                   math

                
                >>> x = 1
>>> y =
                
                   math.sqrt

                
                >>>
                
                   callable(x)  
False

                
                >>>
                
                   callable(y)
True
                
              

备注: callable  python3.0 中不再可用。

 

那如何定义一个函数呢?使用 def 语句即可:

                >>> 
                
                  def
                
                
                   hello(name):
    
                
                
                  return
                
                
                  '
                
                
                  hello.
                
                
                  '
                
                +name+
                
                  '
                
                
                  !
                
                
                  '
                
                
                  #
                
                
                  我们定义了一个hello函数,它会将输入的内容前面加“hello.”后面加“!”,并返回给用
                
                
                  
#
                
                
                
>>> 
                
                  print
                
                 hello(
                
                  '
                
                
                  world
                
                
                  '
                
                
                  )
hello.world!

                
                >>> 
                
                  print
                
                 hello(
                
                  '
                
                
                  zhangsan
                
                
                  '
                
                
                  )
hello.zhangsan!
                
              

 

不错吧!再回过头去想想怎样把返回婓波那契数列定义成一个函数。如下:

                
                  #
                
                
                  定义fibs函数,用于婓波那契数列
                
                
>>> 
                
                  def
                
                
                   fibs(num):
    result 
                
                = [0,1
                
                  ]
    
                
                
                  for
                
                 i 
                
                  in
                
                 range(num-2
                
                  ):
        result.append(result[
                
                -2]+result[-1
                
                  ])
    
                
                
                  return
                
                
                   result


                
                
                  #
                
                
                  直接调用fibs函数
                
                
>>> fibs(10
                
                  )
[0, 
                
                1, 1, 2, 3, 5, 8, 13, 21, 34
                
                  ]

                
                >>> fibs(15
                
                  )
[0, 
                
                1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
              

 

 

局部变量

  当函数定义生命变量的时候,函数内所生命的变理只在其函数内有效,与函数外具有相同名称的其他变量没有任何关系

                
                  #
                
                
                  局部变量
                
                
                  def
                
                
                   func(x):
    
                
                
                  print
                
                
                  '
                
                
                  x is
                
                
                  '
                
                
                  ,x
    x 
                
                =2    
                
                  #
                
                
                   x=2只在func函数内其作用
                
                
                  print
                
                
                  '
                
                
                  Changed local x to
                
                
                  '
                
                
                  ,x
    
x 
                
                = 50
                
                  
func(x)   
                
                
                  #
                
                
                  func函数并没有返回数据过来。
                
                
                  print
                
                
                  '
                
                
                  x is still
                
                
                  '
                
                
                  ,x


                
                
                  #
                
                
                  输出
                
                
>>>
                
                   
x 
                
                
                  is
                
                 50
                
                  
Changed local x to 
                
                2
                
                  
x 
                
                
                  is
                
                 still 50
              

 

 

global  语句

  如果想把一个变量声名为 全局的,则可以使用 global 语句。

                
                  def
                
                
                   func():
    
                
                
                  global
                
                
                   x

    
                
                
                  print
                
                
                  '
                
                
                  x is
                
                
                  '
                
                
                  ,x
    x 
                
                = 2
    
                
                  print
                
                
                  '
                
                
                  Changed local x to
                
                
                  '
                
                
                  ,x

x 
                
                =50
                
                  
func()

                
                
                  print
                
                
                  '
                
                
                  Value of x is 
                
                
                  '
                
                
                  ,x

                
                
                  #
                
                
                  输出
                
                
x 
                
                  is
                
                 50
                
                  
Changed local x to 
                
                2
                
                  
Value of x 
                
                
                  is
                
                  2
              

global  语句被用来生命 是全局,因此在执行完 func 函数后, x 的值已经发生了改变,并且作用于整个程序,因此最后的输入结果为 2

 

 

默认参数

  对于一些参数,我们希望它的一些参数是可选的,如果用户不想要为这些参数提供值的话,这些参数就使用默认值。

                
                  def
                
                 say(message,times=1
                
                  ):
    
                
                
                  print
                
                 message*
                
                  times

say(
                
                
                  '
                
                
                  Hello
                
                
                  '
                
                
                  )
say(
                
                
                  '
                
                
                  World
                
                
                  '
                
                ,5
                
                  )

                
                
                  #
                
                
                  输出
                
                
>>>
                
                   
Hello
WorldWorldWorldWorldWorld
                
              

 

定义的 say 函数的第两个参数就是可选的,默认为 times=1 ;也就是将两个参数相乘输出。

 

注意:只有在形参表末尾的那些参数可以有默认参数,如 def func(a=5,b)  是无效的。

 

 

 

关键参数

  如果某个函数有许多参数,而我们只想指定其中的一部分,那么可以使用名字(关键字)而不是位置来给函数指定实参。 ---- 这被称作 关键参数

                
                  def
                
                 func(a,b=5,c=10
                
                  ):
    
                
                
                  print
                
                
                  '
                
                
                  a is
                
                
                  '
                
                ,a, 
                
                  '
                
                
                  and b is
                
                
                  '
                
                ,b,
                
                  '
                
                
                  and c is
                
                
                  '
                
                
                  ,c

func(
                
                3,7
                
                  )
func(
                
                24,c=32
                
                  )
func(c
                
                =23,a=14
                
                  )

                
                
                  
#
输出 >>> a is 3 and b is 7 and c is 10 a is 24 and b is 5 and c is 32 a is 14 and b is 5 and c is 23

这样做,我就不必担心参数的顺序,使用函数变得更加简单。假设其它函数都有默认值,我们可以只给自己想要的参数赋值。

 

 

递归:

  有用的递归函数 ...  等等,什么是无用的递归?先来看一个函数的定义:

                
                  def
                
                
                   recursion()
    
                
                
                  return
                
                 recursion()
              

 

显然,它什么也干不了,程序的执行不断申请内存,直接内存耗尽,程序崩溃。

接着,有用的递归函数包含以下几个部分:

  • 当函数直接返回值时有基本实例(最小可能性问题)
  • 递归实例,包括一个或者多个问题最小部分的递归调用。

 

下面通过递归函数来计算一个 n 的阶, n*(n-1)*(n-2)*....*1

                
                  def
                
                
                   f(n):
    
                
                
                  if
                
                 n == 1
                
                  :
       
                
                
                  return
                
                 1
    
                
                  else
                
                
                  :
        
                
                
                  return
                
                 n*f(n-1)
              


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论