首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python 系统学习札记(三)-function

2013-03-06 
python 系统学习笔记(三)---function函数:一、什么是函数很多时候,Python程序中的语句都会组织成函数的形式

python 系统学习笔记(三)---function
函数:

一、什么是函数

很多时候,Python程序中的语句都会组织成函数的形式。通俗地说,函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字,这样,我们就可以通过函数名在程序的不同地方多次执行(这通常叫做函数调用),却不需要在所有地方都重复编写这些语句。另外,每次使用函数时可以提供不同的参数作为输入,以便对不同的数据进行处理;函数处理后,还可以将相应的结果反馈给我们。

有些函数是用户自己编写的,通常我们称之为自定义函数;此外,系统也自带了一些函数,还有一些第三方编写的函数,如其他程序员编写的一些函数,我们称为预定义的Python函数,对于这些现成的函数用户可以直接拿来使用。

二、为什么使用函数

我们之所以使用函数,主要是出于两个方面的考虑:一是为了降低编程的难度,通常将一个复杂的大问题分解成一系列更简单的小问题,然后将小问题继续划分成更小的问题,当问题细化为足够简单时,我们就可以分而治之。这时,我们可以使用函数来处理特定的问题,各个小问题解决了,大问题也就迎刃而解了。二是代码重用。我们定义的函数可以在一个程序的多个位置使用,也可以用于多个程序。此外,我们还可以把函数放到一个模块中供其他程序员使用,同时,我们也可以使用其他程序员定义的函数。这就避免了重复劳动,提供了工作效率。

基本语法
def fun(n,m,...)
 ....
 ....
 ....
 (return n)

关于return
1,return可以有,可以没有,
2,没有return的方法返回None,
3,return后面没有表达式也是返回None,
4,函数无法到达结尾也返回None。
关于变量与方法
1,定义的方法名会在“当前符号表”中注册,这样系统就知道这个方法名为一个方法,将

方法赋值给一个变量,这个变量则变成了对应的方法。
2,与我们以前学习的程序层次一样的,每个层次都有自己的符号表。内层符号表是可以

使用外层符号表中的东西,但是已经不是一个层次的,所以没有什么关系,意思是说,

上层联系下层只能通过参数,下层联系上层只能是返回值。并且到现在为止,我们只知

道有值传递。也就是说,函数内部与外部完全没有什么关系。
3,也就是说,到现在为止,函数层与上层之间没有任何关系,它有自己的符号表,参数

只能从上层得到值,却不能改变上层的内容,一切在函数内部使用的变量都是函数本身

的与上层无关。也就是说函数基本不能主动改变上层的东西。

 

函数是重用的程序段。它们允许你给一块语句一个名称,然后你可以在你的程序的任何地方使用这个名称任意多次地运行这个语句块。这被称为调用函数。我们已经使用了许多内建的函数,比如len和range。

函数通过def关键字定义。def关键字后跟一个函数的标识符名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。

1、定义函数:

例如:

# Filename: function1.py    def sayHello():     print('Hello World!') # block belonging to the function # End of function    sayHello() # call the function sayHello() # call the function again 


 

# Filename: func_param.py def printMax(a, b): if a > b: print(a, 'is maximum') elif a == b: print(a, 'is equal to', b) else: print(b, 'is maximum') printMax(3, 4) # directly give literal values x = 5y = 7 printMax(x, y) # give variables as arguments

输出:

C:\Users\Administrator>python D:\python\func_param.py
4 is maximum
7 is maximum
工作原理:

这里,我们定义了一个称为printMax的函数,这个函数需要两个形参,a和b。我们使用if..else语句找出两者之中较大的一个数,并且打印较大的那个数。
在第一个printMax使用中,我们直接把数,即实参,提供给函数。在第二个使用中,我们使用变量调用函数。printMax(x, y)使实参x的值赋给形参a,实参y的值赋给形参b。在两次调用中,printMax函数的工作完全相同。

3、局部变量:

当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。

例如:

# Filename: func_local.py    x = 50   def func(x):     print('x is', x)     x = 2    print('Changed local x to', x)    func(x) print('x is still', x) 


 

# Filename: func_global.py x = 50 def func(): global x print('x is', x) x = 2 print('Changed global x to', x) func() print('Value of x is', x)

输出:

C:\Users\Administrator>python D:\python\func_global.py
x is 50
Changed global x to 2
Value of x is 2
工作原理:

global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。
你可以使用同一个global语句指定多个全局变量。例如global x, y, z。

5、外部变量:

上面我们已经知道如何使用局部变量和全局变量,还有一个外部变量是在以上两种变量之间的变量。当我们在函数内声明了外部变量则在函数中就可见了。

由于任何东西在python内都是可执行代码,所以你可以在任何位置定义函数,就如以下例子中的func_inner()定义在func_outer()内也是可以的。

以下例子说明如何使用外部变量:

# Filename: func_nonlocal.py def func_outer(): x = 2 print('x is', x) def func_inner(): nonlocal x x = 5 func_inner() print('Changed local x to', x) func_outer()
# Filename: func_default.py def say(message, times = 1): print(message * times) say('Hello') say('World', 5)


 

# Filename: func_key.py def func(a, b=5, c=10): print('a is', a, 'and b is', b, 'and c is', c) func(3, 7) func(25, c=24) func(c=50, a=100)


 

# Filename: total.py def total(initial=5, *numbers, **keywords): count = initial for number in numbers: count += number for key in keywords: count += keywords[key] return count print(total(10, 1, 2, 3, vegetables=50, fruits=100))
# Filename: keyword_only.py def total(initial=5, *numbers, extra_number): count = initial for number in numbers: count += number count += extra_number print(count) total(10, 1, 2, 3, extra_number=50) total(10, 1, 2, 3) # Raises error because we have not supplied a default argument value for 'extra_number'


 

# Filename: func_return.py def maximum(x, y): if x > y: return x elif x == y: return 'The numbers are equal' else: return y print(maximum(2, 3))

输出:

C:\Users\Administrator>python D:\python\func_return.py
3
工作原理:

maximum函数返回参数中的最大值,在这里是提供给函数的数。它使用简单的if..else语句来找出较大的值,然后返回那个值。
注意,没有返回值的return语句等价于return None。None是Python中表示没有任何东西的特殊类型。例如,如果一个变量的值为None,可以表示它没有值。
除非你提供你自己的return语句,每个函数都在结尾暗含有return None语句。通过运行print someFunction(),你可以明白这一点,函数someFunction没有使用return语句,如同:

def someFunction(): passprint(someFunction())
输出就是None。

提示:python已经包含了一个被称作max的内建函数,它的功能即是寻找最大值,你可以尽可能使用这个函数。

11、文档字符串(DocStrings):

Python有一个很奇妙的特性,称为文档字符串,它通常被简称为docstrings。DocStrings是一个重要的工具,由于它帮助你的程序文档更加简单易懂。你甚至可以在程序运行的时候,从函数恢复文档字符串!

例如:

# Filename: func_doc.py def printMax(x, y): '''Prints the maximum of two numbers. The two values must be integers.''' x = int(x) # convert to integers, if possible y = int(y) if x > y: print(x, 'is maximum') else: print(y, 'is maximum') printMax(3, 5) print(printMax.__doc__)

输出:

C:\Users\Administrator>python D:\python\func_doc.py
5 is maximum
Prints the maximum of two numbers.     The two values must be integers.
工作原理:

在函数的第一个逻辑行的字符串是这个函数的文档字符串。同时,DocStrings也适用于模块和类,我们会在后面相应的章节学习它们。
文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。 强烈建议在函数中使用文档字符串时遵循这个惯例。
你可以使用__doc__(注意双下划线)调用printMax函数的文档字符串属性(属于函数的名称)。Python把每一样东西都作为对象,包括这个函数。
如果你已经在Python中使用过help(),那么你已经看到过DocStings的使用了!它所做的只是抓取函数的__doc__属性,然后整洁地展示给你。你可以对上面这个函数尝试一下——只是在你的程序中包括help(printMax)。记住按q退出help。
自动化工具也可以以同样的方式从你的程序中提取文档。因此,我们强烈建议你对你所写的任何正式函数编写文档字符串。随你的Python发行版附带的pydoc命令,与help()类似地使用DocStrings。

 

以上修改格式自

http://www.cnblogs.com/wanglikai91/archive/2011/11/05/2236778.html (这是python 简明教程的笔记)

 

热点排行