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.age2. 创建对象
class1 = MyBaseClass("zhangsan",22)
class2 = MyBaseClass("zhaosi",24)
class1.displayBaseClass()
print MyBaseClass.count3. 内置类属性
- dict类的属性,包含一个字典,由类的数据属性组成
- doc类的文档字符串
- name类名
- module类定义所在的模块
- bases类的所有父类构成元素(元组)
4. 对象销毁
自动的垃圾回收机制,在调用del时并不一定立刻销毁对象,需要其引用数量降为0.
del class15. 类的继承
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
                
                









