初识Python(二)
函数
函数通过def
关键字定义。def关键字后跟一个函数的 标识符 名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。
def max(a,b):
if a>b:
print a
else:
print b
max(3,5)
5
使用global语句,可以将一个变量声明为全局变量,即使在函数内部也可以为函数外部的变量赋值
x=10
def func():
global x
x=20
print x
func()
20
默认参数值,当用户没有给相应参数提供值时将采用默认的参数值,对于没有默认值的参数必须提供值
>>> def say(a,b=2):
print a*b
>>> say('hello')
hellohello
>>> say('hello',3)
hellohellohello
关键参数,用户可以在使用时通过名称来给自己想赋值的参数赋值
>>> def say(a,b=23,c=32):
print 'a is',a,'b is',b,'c is',c
>>> say(a=12,c=12)
a is 12 b is 23 c is 12
return语句,默认Python每个函数最后都暗含一个return None语句,表示该函数没有任何返回值
>>> def say():
return 3
>>> say()
3
文档字符串,类似于函数,类等的说明
>>> def say():
'''这是一个函数
用于返回一个字符串'''
print 'aaa'
>>> help(say)
Help on function say in module __main__:
say()
这是一个函数
用于返回一个字符串
>>> print say.__doc__ 另一种查看文档字符串的方法 注意双下划线
这是一个函数
用于返回一个字符串
模块
如果你想要在其他程序中重用很多函数,就需要使用模块,模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。
模块可以从其他程序 输入 以便利用它的功能。这也是我们使用Python标准库的方法。首先,我们将学习如何使用标准库模块。
>>> import sys 导入sys模块
>>> print 'path is',sys.path 使用sys模块中的path变量
path is ['C:\\Python23\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python23.zip', 'C:\\Python23', 'C:\\Python23\\DLLs', 'C:\\Python23\\lib', 'C:\\Python23\\lib\\plat-win', 'C:\\Python23\\lib\\lib-tk', 'C:\\Python23\\lib\\site-packages']
当一个模块被第一次输入的时候,这个模块的主块将被运行。假如我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的__name__属性完成。每个Python模块都有它的__name__
,如果它是'__main__'
,这说明这个模块被用户单独运行,我们可以进行相应的恰当操作。
if __name__ == '__main__':
print 'This program is being run by itself'
else:
print 'I am being imported from another module'
创建你自己的模块是十分简单的,你一直在这样做!每个Python程序也是一个模块。你已经确保它具有.py
扩展名了。
def
sayhi
():
print
'Hi, this is mymodule speaking.'
version =
'0.1'
上面是一个 模块 的例子。你已经看到,它与我们普通的Python程序相比并没有什么特别之处。我们接下来将看看如何在我们别的Python程序中使用这个模块。
记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path
所列目录之一。
import
mymodule
mymodule.sayhi()
print
'Version'
, mymodule.version
你可以使用内建的dir
函数来列出模块定义的标识符。标识符有函数、类和变量。
>>> def say():
return None
>>> x=10
>>> dir()
['__builtins__', '__doc__', '__name__', 'say', 'x']
当你为dir()
提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdout__', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info', 'exc_traceback', 'exc_type', 'exc_value', 'excepthook', 'exec_prefix', 'executable', 'exit', 'exitfunc', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'hexversion', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'version', 'version_info', 'warnoptions', 'winver']
注意,输入的模块同样是列表的一部分。
>>> import sys
>>> def say():
return None
>>> x=10
>>> dir()
['__builtins__', '__doc__', '__name__', 'say', 'sys', 'x']