一. 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。 上一课里提到了Python的很多内置函数。在此主要讲自定义函数。

1. 定义函数的规则:

以def关键词开头,后接函数标识符名称和圆括号()。 注意用规范的函数名

任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

函数的第一行语句可以文档字符串—用于存放函数注释说明。

函数内容以冒号起始,并且缩进。

return结束函数,选择性地返回一个值。不带表达式的return相当于返回 None。无返回可以省略return.

默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。

例1:

import time
import sys
def logging(message, filename='E:\\log.log'):
try:
print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + " " + message
fso = open(filename, 'a')
fso.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + " " + message+ '\n' + '\n')
fso.close()
except:
err = ''.join(traceback.format_exception(*sys.exc_info()))
       print err

2. 参数:

1). 必备参数

logging("test", filename='E:\\logtest.log'). 例1中的message为必备参数

2). 命名参数

logging(message = "my message", filename='E:\\logtest.log').

3). 缺省参数

例1中的filename参数如果不传入参数,会被认为是默认值。

logging("my message")

4). 不定长参数

加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。

如例1中的traceback.format_exception(*sys.exc_info())

3. 匿名函数

python 使用 lambda 来创建匿名函数。

1). lambda只是一个表达式,函数体比def简单很多。

2). lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

3). lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。

4). 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

5). lambda函数的语法只包含一个语句,如下:

  lambda [arg1 [,arg2,.....argn]]:expression

例2:

summ = lambda arg1,arg2: arg1 + arg2
summ(1,2)

4. 变量的作用域:

1). 全局变量

2). 局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

例3:

total = 0; # 全局变量
def summ( arg1, arg2 ):
total = arg1 + arg2; # total在这是局部变量.
print "函数内局部变量 : ", total
return total; summ( 10, 20 );
print "函数全局变量 : ", total

二. 模块

模块能够有逻辑地组织Python代码段。把相关的代码分配到一个模块能让代码更易用,更易懂。

模块也是Python对象,具有随机的名字属性用来绑定或引用。

模块就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。

1. 导入模块

1). import, 想使用Python源文件,只需在另一个源文件里执行import语句。import module1[, module2[,... moduleN]

如: import function1

当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。

搜索路径是一个解释器会先进行搜索的所有目录的列表。需要把import命令放在脚本的顶端.

2). from ... import

from语句让你从模块中导入一个指定的部分到当前命名空间中: from modname import name1[, name2[, ... nameN]]

如: from pywinauto.application import Application

3). from ... import *

把一个模块的所有内容全都导入到当前的命名空间也是可行的. from modname import *

如: from DataSources.PublicVariables import *

2. 定位模块

当你导入一个模块,Python解析器对模块位置的搜索顺序是:

1). 当前目录

2). 如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。

3). 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

4). PYTHONPATH变量

作为环境变量,PYTHONPATH由装在一个列表里的许多目录组成。PYTHONPATH的语法和shell变量PATH的一样。

在Windows系统,典型的PYTHONPATH如下:

set PYTHONPATH=c:\python20\lib;

在UNIX系统,典型的PYTHONPATH如下:

set PYTHONPATH=/usr/local/lib/python

(Note: sys.path是python的搜索模块的路径集,是一个list, 可以在python 环境下使用sys.path.append(path)添加相关的路径,但在退出python环境后自己添加的路径就会自动消失)

3. 命名空间和作用域

一个Python表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。

每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样。

Notes: 如果要给全局变量在一个函数里赋值,必须使用global语句。

4. dir()

dir()函数一个排好序的字符串列表,内容是一个模块里定义过的名字。dir(module_name)

返回的列表容纳了在一个模块里定义的所有模块,变量和函数.

5. reload()

当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。

因此,如果你想重新执行模块里顶层部分的代码,可以用reload()函数。该函数会重新导入之前导入过的模块。reload(module_name)

6. Python中的包

包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。

Notes: 必须在包目录下创建文件 __init__.py

Course2-Python函数和模块的更多相关文章

  1. 洗礼灵魂,修炼python(11)--python函数,模块

    前面的章节你如果看懂了,基本算是入门了七八了,不过如果你以为python就这么点东西,你觉得很简单啊,那你就错了,真正的东西在后面,前面我说的几大核心其实也不是多么高深多么厉害的,那些东西是基础很常用 ...

  2. 二. python函数与模块

    第四章.内置函数与装饰器详解 1.内置函数补充1 注:红色圆圈:必会:  紫红色方框:熟练:   绿色:了解 callable() 判断函数是否可以被调用执行 def f1(): pass f1() ...

  3. Python 函数和模块

    200 ? "200px" : this.width)!important;} --> 介绍 在python中也存在函数的概念,标准的函数我们可以叫内置函数,这类函数可以直接 ...

  4. python函数,模块及eclipse使用

    一.eclipse的使用 1.作用 (1)最好用的IDE (2)可调式debug (3)查看可执行过程 (4)可查看源代码 2.安装eclipse及配置 目录安装Pythonpython for ec ...

  5. Python——函数,模块,简单文件读写

    函数(function)定义原则: 最大化代码重用,最小化代码冗余,流程符合思维逻辑,少用递归; 函数的定义方法: def function_name(param_1, param_2): ..... ...

  6. python函数与模块(装饰器,文件处理,迭代器等)

    os模块 os.system('命令') 利用python调用系统命令,命令可以是以列表或者元组内的元素形式* res import os res=os.system('ipconfig') prin ...

  7. Python——函数,模块,简单文件读写(python programming)

    函数(function)定义原则: 最大化代码重用,最小化代码冗余,流程符合思维逻辑,少用递归; 函数的定义方法: def function_name(param_1, param_2): ..... ...

  8. python函数,模块及eclipse配置python开发环境

    一.eclipse的使用 1.作用 (1)最好用的IDE (2)可调式debug (3)查看可执行过程 (4)可查看源代码 2.安装eclipse及配置 目录安装Pythonpython for ec ...

  9. Python函数-导入模块的顺序及原理

    引入 当python导入模块,执行import语句时,到底进行了什么操作?按照python的文档,她执行了如下的操作: 第一步,创建一个新的module对象(它可能包含多个module) 第二步,把这 ...

  10. python函数、模块、包

    一.函数 定义函数: def fun_name(para_list): coding def fun_name(para_list): coding return xxx 使用函数,fun_name( ...

随机推荐

  1. 从一个简洁的进度刻度绘制中了解自定义View的思路流程

    先看效果(原谅我的渣像素),进度的刻度.宽度.颜色可以随意设定: [项目github地址: https://github.com/zhangke3016/CircleLoading] 实现起来并不难, ...

  2. 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版)

    ===================================================== 最简单的基于libVLC的例子文章列表: 最简单的基于libVLC的例子:最简单的基于lib ...

  3. UNIX网络编程——使用select函数的TCP和UDP回射服务器程序

    服务器程序: #include <sys/wait.h> #include <string.h> #include <string.h> #include < ...

  4. HBase作为存储方案

    HBase存储特点 * Client 1. 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息. * Zookeeper: 1. 选举集群中的Master, ...

  5. windbg分析运行在64位环境下的32位程序的dump

    windbg命令如下 1.   .load wow64exts 2.   !sw 3.   ~* kvnf

  6. (四十九)Quartz2D自定义控件

    利用Quartz2D来自定义UIImageView: 模仿UIImageView: 设置frame,设置图片. 注意一个细节,自定义的imageView,应该通过重写set方法来设置图片并且重绘,否则 ...

  7. 【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410

    作者 : 万境绝尘 转载请著名出处 终于拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...

  8. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十二)

    自己的游戏自己更需要多玩,这样才能首先发现不足的地方.所以本猫到现在已经忍一个地方很久了,就是弹出moneyLayer后每次都要输入数字才能关闭,这多少让人不爽.于是本篇我们就修正这个小小的不便. 首 ...

  9. 【翻译】Sencha Ext JS 5发布

    原文:Announcing Sencha Ext JS 5 简介 我代表Sencha和整个Ext JS团队,很自豪的宣布,在今天,Sencha Ext JS 5发布了.Ext JS 5已经迈出了一大步 ...

  10. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19913755 . 一. Android资源文件简介 1 ...