Python初学(6)——Python的函数

来源:互联网 发布:龙门铣床的编程好编码 编辑:程序博客网 时间:2024/06/06 00:14

这一篇笔记,学习Python的函数

函数基础

 

函数相关的语句和表达式

语句

例子

Calls

Myfunc(“spam”,”eggs”,meat=ham)

def,

def adder(a,b=1,*c):

return

return a+b+c[0]

global

def changer():

   global x;x=’new’

nonlocal

def changer():

   nonlocal x;x=’new’

yield

def squares(x):

   for i in range(x):yield i**2

lambda

Funcs=[lambda x: x**2,lambda x:x*3]


编写函数

1def是可执行代码。

  Python的函数是由一个新的语句编写的,即def。不像c这样的编译语言,def是以供可执行的语句——函数并不存在,直到Python运行了def后才存在。事实上,在if语句、while循环甚至是其他的def中嵌套是合法的(甚至在某些场合还是很有效)。在典型的操作中,def语句在模块文件中编写,并自然而然地在模块文件第一次被导入的时候生成定义的函数。

 

2def创建了以供对象并且将其赋值给某一个变量名。

  当Python运行到def语句时,它将会生成一个新的函数对象并将其赋值给这个函数名。就像所有的赋值一样函数名变成了某一个函数引用。函数名称并没有什么神奇——就像你将看到的那样,函数对象可以赋值给其他的变量名,保存在列表之中。函数也可以通过lambda表达式来创建。

 

3lambda创建一个对象但将其作为结果返回。

  也可以用lambda表达式创建函数,这一功能允许我们把函数定义内联到语法上一条def语句不能工作的地方。

 

4return 将结果对像发送给调用者。

  当函数被调用时,其调用者停止运行直到这个函数完成了它的工作,之后函数才将控制权返回给调用者。函数是通过return语句将计算得到的值传递给调用者的,返回值为函数调用结果。

 

5yield向调用者发回一个结果对象,但是记住它离开的地方。

  像生成器这样的函数可以通过yield语句来返回值,并挂起他们的状态以便稍后能够恢复状态。

 

6global声明了一个模块级的变量并被赋值。

  在默认情况下,所有在一个函数中被赋值的对象,是这个函数的本地变量,并且仅在这个函数运行的过程中存在。为了分配一个可以在整个模块中都可以使用的变量,函数需要在global语句中将它列举出来。通常情况下,变量名往往需要关注它的作用域(也就是变量存储的地方),并且是通过实赋值语句将变量名绑定作用域的。

 

7nonlocal声明了将要赋值的一个封闭的函数变量。

  类似的,Python3.0中添加的nonlocal语句允许封闭的函数作为保留状态的一个地方——当一个函数调用的时候,信息被记住了——而不必使用共享的全局名称。

 

8,函数是通过赋值(对象引用)传递的。在Python中,参数通过赋值传递给了函数(也就是说,就像我们所学过的,使用对象引用)。Python的模式中调用者以及函数通过引用共享对象,但是改变传递的可变对象可以改变调用者共享的那个对象。

 

9,参数、返回值以及变量并不是声明。

   就像在Python中所有的一样,在函数中并没有类型约束。实际上,从一开始函数并不需要声明:可以传递任意类型的参数给函数,函数也可以返回任意类型的对象。其结果就是,函数常常可以用在很多类型的对象身上,任意支持兼容接口(方法和表达式)的对象都能使用,无聊它们是什么类型。


详细范例

def语句

 def语句将创建一个函数对象并将其赋值给一个变量名。def语句一般格式如下:

  def <name>(arg1,arg2,... argN):

     <statements>

  就像所有的多行Python语句一样,def包含了首行并有一个代码块跟随在后边,这个代码块通常都会缩进(或者就是冒号后边简单的一句)。而这个代码块就成为了函数的主体——也就是每当调用函数的Python所执行的语句。

 

  def的首行定义了函数,赋值给了函数对象,并在括号中包含了0个或以上的参数(有些时候成为是形参)。在函数调用的时候,在首行的参数名赋值给了括号中的传递的对象。

 

  函数主体往往包含了一条return语句。

 

def <name>(arg1,arg2,... argN):

  ...

  return <value>

  Pythonreturn语句可以在函数主体的任何地方出现。它表示函数调用的结束,并将结果返回至函数调用处。函数也可以不反回结果。如果没有return,函数一直执行到函数结束,从技术角度来讲,一个没有返回值的函数自动返回一个none对象,但是这个值往往是被忽略的。

  函数也许会有yield语句,这在每次都会产生一系列值是被用到。 

 

第一个例子:定义和调用



 

前面def 开始为定义,后面的x=times(3.14,4)为调用。

 

第二个例子:寻找序列的交集



定义了一个intersect函数,里面一个for 循环语句块,一个if判断语句。注意缩进对齐。

 

本地变量

  前面例子中,函数题里面的res,x,参数seq1,seq2,都是本地变量,所谓的本地变量就是在函数体里面有用,出了函数体就没用了,无法使用。有其他语句学习经验的应该能发现这个就是其他语言的局部变量。在某个代码块有用,出了代码块就没用了。


0 0
原创粉丝点击