python(18): 函数基本知识(第12章)
时间:2006-03-01 来源:newsim
函数几乎是每一种编程语言都会有的一种结构,python也不例外。然而,python中的函数也有几点与一般的函数概念不一样。在python中,“一切皆对象”,函数在python中也是一种对象。因此,一个函数对象可以使用赋值语句赋给一个变量,也可以作为一个成员存贮在一个list中。函数分为两种,一种是普通函数,一种是匿名函数。使用函数的最基本需求是为了重用代码。来看看它们的形式:
在python中,def语句与其他的语句,比如:print,都是可以执行的。def语句的作用是把函数体的内容打包用于创建一个函数对象,然后把这个函数对象赋给函数名。这里有一个隐式的赋值的过程。def语句可以出现在一个模块(一个.py文件)的任何地方,比如出现在if语句中。同时,由于函数也是一个对象,因此下面的几种操作也是完全可以的:
总之,函数也是一种对象,def的作用是创建一个函数对象,并把这个函数对象赋给一个标识符,这一标识符就成为了函数名。lambda的作用只是创建一个函数对象,但并没有一个赋值过程。函数的调用方式是函数名加上一对小括号,小括号中是传递给函数的参数。
在python中,参数的传递是通过赋值来传递的。也就是说像上面的例子的第6行,有一个n=5这样一个隐性的赋值过程。这时有一个问题需要注意,比如:
对于函数还有一个"本地变量"的概念,也就是说在一个函数内部定义的标识符,只在这个函数被调用时存在。如果一个函数要对它所处模块的变量进行赋值操作,那么就需要用到global语句,比如:global S,这条语句的意思是从模块中引入变量S。(下一篇会详细介绍这方面的内容)
从上面提到的几个例子中也可以看到,在定义函数时并没有在任何地方标明参数是什么类型,返回的是什么类型。这也表明,可以把任何类型的对象传给函数,函数也可以返回任何对象,一个函数可以在不同的条件下返回不同类型的值,这也是python灵活性的表现之一。比如:
再重复一句,在python中,一切皆对象。
- def <Name>(arg1, arg2...):
... - lambda x: x*2
在python中,def语句与其他的语句,比如:print,都是可以执行的。def语句的作用是把函数体的内容打包用于创建一个函数对象,然后把这个函数对象赋给函数名。这里有一个隐式的赋值的过程。def语句可以出现在一个模块(一个.py文件)的任何地方,比如出现在if语句中。同时,由于函数也是一个对象,因此下面的几种操作也是完全可以的:
- if x ==0:
- def npower(n): x**2
- else:
- def npower(n): x**3
- nload = npower
- nload(5)
- L = [npower, nload]
总之,函数也是一种对象,def的作用是创建一个函数对象,并把这个函数对象赋给一个标识符,这一标识符就成为了函数名。lambda的作用只是创建一个函数对象,但并没有一个赋值过程。函数的调用方式是函数名加上一对小括号,小括号中是传递给函数的参数。
在python中,参数的传递是通过赋值来传递的。也就是说像上面的例子的第6行,有一个n=5这样一个隐性的赋值过程。这时有一个问题需要注意,比如:
- pp = lambda x: x.append(5)
- L = range(3)
- pp(L)
- def pw(x): x+=1
- one = 1
- pt(one)
对于函数还有一个"本地变量"的概念,也就是说在一个函数内部定义的标识符,只在这个函数被调用时存在。如果一个函数要对它所处模块的变量进行赋值操作,那么就需要用到global语句,比如:global S,这条语句的意思是从模块中引入变量S。(下一篇会详细介绍这方面的内容)
从上面提到的几个例子中也可以看到,在定义函数时并没有在任何地方标明参数是什么类型,返回的是什么类型。这也表明,可以把任何类型的对象传给函数,函数也可以返回任何对象,一个函数可以在不同的条件下返回不同类型的值,这也是python灵活性的表现之一。比如:
- def calBook(n):
- if n%2 == 0:
- return n**2
- else:
- return False
- def haveStar(f):
- return f * 2
再重复一句,在python中,一切皆对象。
相关阅读 更多 +