Python基础4 函数、模块和对象
- 一、函数的定义及调用
- 二、传参
- 1. 参数
- 2. 匿名函数
- 3. 返回值
- 三、模块
- 四、作用域
- 五、dir()函数
- 六、globals()和locals()函数
- 七、reload()函数
- 八、python中的包
- 九、创建类
- 1. 类的定义
- 2. 创建对象
- 3. 内置类属性
- 4. 对象销毁
- 5. 类的继承
- 6. 一些通用的方法
- 7. 运算符重载
- 8. 属性方法的可见性
一、函数的定义及调用
定义
def printme( str ):
"打印传入的字符串到标准显示设备上"
print str
return
调用
printme("测试一下怎么样")
二、传参
所有参数(自变量)在Python里都是按引用传递。
1. 参数
必备参数
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def printme( str ):
"打印任何传入的字符串"
print str;
return;
#调用printme函数
printme("必须传参");
关键字参数
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def printme( str ):
"打印任何传入的字符串"
print str;
return;
#调用printme函数
printme( str = "My string");
默认参数
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print "Name: ", name;
print "Age ", age;
return;
#调用printinfo函数
printinfo( age=50, name="miki" );
printinfo( name="miki" );
不定长参数
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 可写函数说明
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print "输出: "
print arg1
for var in vartuple:
print var
return;
# 调用printinfo 函数
printinfo( 10 );
printinfo( 70, 60, 50 );
2. 匿名函数
使用lambda来创建匿名函数
#!/usr/bin/python
# -*- coding: UTF-8 -*-
sum = lambda arg1, arg2: arg1 + arg2;
# 调用sum函数
print "相加后的值为 : ", sum( 10, 20 )
print "相加后的值为 : ", sum( 20, 20 )
3. 返回值
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def sum( arg1, arg2 ):
# 返回2个参数的和."
total = arg1 + arg2
print "函数内 : ", total
return total;
# 调用sum函数
total = sum( 10, 20 );
print "函数外 : ", total
三、模块
使用import,在一个源文件里包含另一个源文件。
使用 from … import 可以从模块中导入一个指定部分到当前命名空间中。
使用from modname import * 导入指定模块的所有部分。
定位模块搜索顺序是:
当前目录
shell变量PYTHONPATH下的每个目录、
Python的默认路径,unix下为/usr/local/lib/python
四、作用域
要在函数内部使用外部定义的变量,需要使用global
#!/usr/bin/python
# -*- coding: UTF-8 -*-
Money = 2000
def AddMoney():
# 想改正代码就取消以下注释:
# global Money
Money = Money + 1
print Money
AddMoney()
print Money
五、dir()函数
dir()函数是一个排好序的字符串列表,内容是一个模块里定义过的名字。如:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 导入内置math模块
import math
content = dir(math)
print content;
六、globals()和locals()函数
根据调用地方的不同,globals()和locals()函数可被用来返回全局 局部命名空间里的名字。
如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名;
如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字;
两个函数返回的都是字典。
七、reload()函数
一个模块被导入到一个脚本,顶层的代码只会被执行一次。使用reload函数可以重新执行。
八、python中的包
把模块放到目录里,采用import目录的形式,加载目录里的模块。包需要使用__init__.py定义。
Phone/init.py
from Pots import Pots
from Isdn import Isdn
from G3 import G3
导入包:
import Phone
九、创建类
1. 类的定义
class ClassName:
'类的帮助信息'
class_suite #类体
使用ClassName.__doc__查看类的帮助信息。
类示例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class MyBaseClass:
'基类'
count= 0
def __init__(self, name, age):
self.name = name
self.age= age
MyBaseClass.count+= 1
def displayCount(self):
print "Total count %d" % MyBaseClass.count
def displayBaseClass(self):
print "Name : ", self.name, ", age: ", self.age
2. 创建对象
class1 = MyBaseClass("zhangsan",22)
class2 = MyBaseClass("zhaosi",24)
class1.displayBaseClass()
print MyBaseClass.count
3. 内置类属性
- dict类的属性,包含一个字典,由类的数据属性组成
- doc类的文档字符串
- name类名
- module类定义所在的模块
- bases类的所有父类构成元素(元组)
4. 对象销毁
自动的垃圾回收机制,在调用del时并不一定立刻销毁对象,需要其引用数量降为0.
del class1
5. 类的继承
class SecondClass(MyBaseClass):
def __init__(self):
print "子类构造方法"
def childMethod(self):
print "子类方法"
子类可重写父类的方法。
6. 一些通用的方法
- init(self) 构造函数
- del(self) 析构函数
- repr(self) 转化为供解释器读取的形式
- str(self) 将值转换为适合阅读的形式
- cmp(self,x) 对象比较
7. 运算符重载
暂时用不到,以后用到再看。
8. 属性方法的可见性
- 类的私有属性:
两个下划线开头,内部使用时要用:
self.__private_attr - 类的方法
类内部,使用def为类定义一个方法,必须包含参数self,且为第一个参数。 - 类的私有方法
使用__private_method定义,内部调用时使用self.__private_methods
Python不允许实例化的类访问私有数据,但可以使用object._className_attrName来访问属性。
本文参考:
http://www.runoob.com/python/python-functions.html