《Python基础教程》(6)

时间:2021-08-16 18:41:41

创建函数:记录函数:文档字符串。__doc__是函数属性。内建的help函数:在交互解释器中使用它,可以得到关于函数,包括它的文档字符串的信息。

参数魔法:在函数内为参数赋予新值不会改变外部任何变量的值,在try_to_change内,参数n获得了新值,但是它没有影响到name变量。n实际上是一个完全不同的变量,具体的工作方式类似于下面这样。结果是显而易见的。当变量n改变时,变量name不变。同样,当在函数内部把参数重绑定(赋值)时,函数外的变量不会受到影响。(参数存储在局部作用域。)

《Python基础教程》(6)

               字符串(以及数字和元组)是不可变的。即无法被修改(也就是说只能用新的值覆盖)。所以它们做参数的时候也就无需多做介绍。但是考虑一下如果将可变的数据结构如列表用作参数的时候会发生什么:本例中,参数被改变了。当两个变量同时引用一个列表时,它们的确是同时引用一个列表。就是这么简单。如果想避免出现这种情况,可以复制一个列表的副本。当在序列中做切片的时候,返回的切片总是一个副本。因此,如果你复制了整个列表的切片,将会得到一个副本(相等但是不相同)

《Python基础教程》(6)《Python基础教程》(6)

1、使用函数改变数据结构(比如列表或字典)是将程序抽象化的好方法。

2、在某些语言中,重绑定参数并且使这些改变影响到函数外的变量是很平常的事情。但在Python中这是不可能的:函数只能修改参数对象本身。

关键字参数和默认值:1、位置参数

                              2、关键字参数:主要作用在于可以明确每个参数的作用,关键字参数最厉害的地方在于可以在函数中给参数提供默认值

《Python基础教程》(6)《Python基础教程》(6)《Python基础教程》(6)

收集参数:用户可以给函数提供多个参数(*params),星号的意思是‘收集其余的位置参数’,将结果作为元组打印出来,长度为1的元组有个逗号。如果不提供任何供收集的元素,params就是个空元组。但是,并不能处理关键字参数。我们需要另外一个能处理关键字参数的’‘收集’操作—‘**’。

《Python基础教程》(6)《Python基础教程》(6)

反转过程:星号只是在定义函数(允许使用不定数目的参数)或者调用(‘分割’字典或者序列)时才有用。

《Python基础教程》(6)

练习使用参数:多加练习,加以掌握

《Python基础教程》(6)《Python基础教程》(6)

《Python基础教程》(6)

作用域:除了全局作用域外,每个函数调用都会创建一个新的作用域。这里的foo()函数改变(重绑定)了变量x,但是在最后的时候,x并没有变。这是因为当调用foo的时候,新的命名空间被创建了,它作用于foo内的代码块。赋值语句x=42只在内部作用域(局部命名空间)起作用,所以它并不影响外部(全局)作用域中的x。函数内的变量被称为局部变量(可以在函数内部直接访问全局变量,谨慎使用全局变量)。

读取全局变量一般来说并不是问题。但是,1、如果局部变量或者参数的名字和想要访问的全局变量名相同的话,就不能直接访问了。全局变量会被局部变量屏蔽。如果确实需要的话,可以使用globals函数获取全局变量值。2、重绑定全局变量。

《Python基础教程》(6)《Python基础教程》(6)

函数嵌套:一个函数位于另外一个里面,外层函数返回里层函数。也就是说函数本身被返回了,但并没有被调用。重要的是,返回的函数还可以访问它的定义所在的作用域。每次调用外层函数,它内部的函数都被重新绑定,factor变量每次都有一个新的值。

递归:两个经典:阶乘和幂。

         阶乘的数学定义:1、1的阶乘是1,

                                 2、大于1的数n的阶乘=n-1的阶乘 * n

         幂的数学定义:1、对于任意数字x来说,power(x,0)是 1

                              2、对于任何大于0的数来说,power(x,n)是x乘以(x,n-1)的结果

《Python基础教程》(6)《Python基础教程》(6)

         二分查找:bisect模块。