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

《简洁python教程》总结(三)- 函数、模块

2013-10-06 
《简明python教程》总结(三)-- 函数、模块函数 函数通过def关键字定义,参数在函数定义的圆括号对内指定,用逗

《简明python教程》总结(三)-- 函数、模块
函数 函数通过def关键字定义,参数在函数定义的圆括号对内指定,用逗号分割 示例:#!/usr/bin/python
# Filename: func_param.py
def printMax(a, b):
    if a > b:
        print a, 'is maximum'
    else:
        print b, 'is maximum'
printMax(3, 4)# directly give literal values
x = 5
y = 7
printMax(x, y)
 输出$ python func_param.py4 is maximum7 is maximum 全局变量与局部变量 局部变量在函数定义内声明变量的时候,它与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的。示例#!/usr/bin/python
# Filename: func_local.py
def func(x):
    print 'x is', x
    x = 2
    print 'Changed local x to', x
x = 50
func(x)
print 'x is still', x输出$ python func_local.pyx is 50Changed local x to 2x is still 50  全局变量为一个定义在函数外的变量赋值,需告诉Python这个变量名不是局部的,而是全局 的。使用global语句完成这一功能,表明使用的变量为外面的块定义的。没有global语句,是不可能为定义在函数外的变量赋值的示例#!/usr/bin/python
# Filename: func_global.py
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输出$ python func_global.pyx is 50Changed global x to 2Value of x is 2 默认参数值为一些函数的参数提供一些默认的值。当函数调用时未指定该形参对应的实参时,则使用函数定义时 为形参定义的默认值注:函数定义时,参数的默认值应从右向左给出。同C/C++方式。 如 func(a,b=1,c=2)正确,func(a=1,b,c=2)错误 关键参数对于函数的参数,只想指定其中的一部分,那么可以通过命名来为这些参数赋值——这被称作关键参数 ——我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。 例#!/usr/bin/python
# 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)输出$ python func_key.pya is 3 and b is 7 and c is 10a is 25 and b is 5 and c is 24a is 100 and b is 5 and c is 50  Docstrings--文档字符串DocStrings是一个重要的工具,帮助程序文档更加简单易懂,应该尽量使用它。可以在程序运行的时候,从函数恢复文档字符串!示例:#!/usr/bin/python
# 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__输出$ python func_doc.py5 is maximumPrints the maximum of two numbers.        The two values must be integers. 分析:在函数的第一个逻辑行的字符串是这个函数的 文档字符串 。注意,DocStrings也适用于模块和类文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。使用__doc__ (注意双下划线)调用printMax函数的文档字符串属性(属于函数的名称)。help()抓取的即为函数的__doc__属性建议:对所写的任何正式函数编写文档字符串。
模块 模块基本上就是一个包含了所有定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。作用:重用其他程序中的函数和变量。即模块可以从其他程序输入以便利用它的功能。 例:使用标准库模块 sys模块#!/usr/bin/python
# Filename: using_sys.py
import sys
print 'The command line arguments are:'
for i in sys.argv:
    print i
print '\n\nThe PYTHONPATH is', sys.path,'\n'输出$ python using_sys.py we are argumentsThe command line arguments are:using_sys.pyweareargumentsThe PYTHONPATH is ['/home/swaroop/byte/code', '/usr/lib/python23.zip','/usr/lib/python2.3', '/usr/lib/python2.3/plat-linux2','/usr/lib/python2.3/lib-tk', '/usr/lib/python2.3/lib-dynload','/usr/lib/python2.3/site-packages', '/usr/lib/python2.3/site-packages/gtk-2.0'] 分析:import sys  告诉Python,我们想要使用sys这个模块。sys模块包含了与Python解释器和它的环境有关的函数。当Python执行import sys语句的时候,它在sys.path变量中所列目录中寻找sys.py模块。如果找到了这个文件,这个模块的主块中的语句将被运行,然后这个模块将能够被你使用 。sys.path包含输入模块的目录名列表。sys.path的第一个字符串是空的——这个空的字符串表示当前目录也是sys.path的一部分,这与PYTHONPATH环境变量是相同的。这意味着可以直接输入位于当前目录的模块。否则,你得把你的模块放在sys.path所列的目录之一。 字节编译的.pyc文件 输入一个模块相对来说是一个比较费时的事情,Python做了一些技巧,以便使输入模块更加快一些。一种方法是创建 字节编译的文件 ,这些文件以.pyc作为扩展名。字节编译的文件与Python变换程序的中间状态有关(是否还记得Python如何工作的介绍?)。当下次从别的程序输入这个模块的时候,.pyc文件是十分有用的——它会快得多,因为一部分输入模块所需的处理已经完成了。另外,这些字节编译的文件也是与平台无关的。  创建自己的模块#!/usr/bin/python
# Filename: mymodule.py
def sayhi():
    print 'Hi, this is mymodule speaking.'
version = '0.1'
# End of mymodule.py记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。 调用模块示例#!/usr/bin/python
# Filename: mymodule_demo.py
import mymodule
mymodule.sayhi()
print 'Version', mymodule.version输出$ python mymodule_demo.pyHi, this is mymodule speaking.Version 0.1 使用  from...import  (from x import a,b,c  表示从模块 x中 导出 变量/函数 a,b,c)#!/usr/bin/python
# Filename: mymodule_demo2.py
from mymodule import sayhi, version
# Alternative:
# from mymodule import *
sayhi()
print 'Version', version输出同上 dir()函数内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。当为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表 例:#!/usr/bin/env python
#filename:mymodule.py
import sys
def sayhi():
    print 'Hi, this is mymodule speaking.'
 
version = '0.1'
 
print dir()
print dir(sys)返回:其中 第一个[]内的属性为当前模块的,第二个[]内的属性为 sys模块的['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'sayhi', 'sys', 'version']['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'py3kwarning', 'pydebug', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions'] 

热点排行