Python 学习笔记二 函数、模块和对象

来源:互联网 发布:大数据的四大特征 编辑:程序博客网 时间:2024/05/21 16:00

Python 学习笔记二 函数、模块和对象


定义函数

def printme( str ):   "打印传入的字符串到标准显示设备上"   print str   return

调用:

printme("测试一下怎么样")

传参

所有参数(自变量)在Python里都是按引用传递。

参数

  • 必备参数
#!/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 );

匿名函数

使用lambda来创建匿名函数

#!/usr/bin/python# -*- coding: UTF-8 -*-sum = lambda arg1, arg2: arg1 + arg2;# 调用sum函数print "相加后的值为 : ", sum( 10, 20 )print "相加后的值为 : ", sum( 20, 20 )

返回值

#!/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 = 2000def AddMoney():   # 想改正代码就取消以下注释:   # global Money   Money = Money + 1print MoneyAddMoney()print Money

dir()函数

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

#!/usr/bin/python# -*- coding: UTF-8 -*-# 导入内置math模块import mathcontent = dir(math)print content;

globals()和locals()函数

根据调用地方的不同,globals()和locals()函数可被用来返回全局 局部命名空间里的名字。
如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名;
如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字;
两个函数返回的都是字典。

reload()函数

一个模块被导入到一个脚本,顶层的代码只会被执行一次。使用reload函数可以重新执行。

python中的包

把模块放到目录里,采用import目录的形式,加载目录里的模块。包需要使用init.py定义。
Phone/init.py

from Pots import Potsfrom Isdn import Isdnfrom G3 import G3 

导入包:
import Phone

创建类

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

创建对象:

class1 = MyBaseClass("zhangsan",22)class2 = MyBaseClass("zhaosi",24)class1.displayBaseClass()print MyBaseClass.count

内置类属性

  • dict 类的属性,包含一个字典,由类的数据属性组成
  • doc 类的文档字符串
  • name 类名
  • module 类定义所在的模块
  • bases 类的所有父类构成元素(元组)

对象销毁

自动的垃圾回收机制,在调用del时并不一定立刻销毁对象,需要其引用数量降为0.

del class1

类的继承

class SecondClass(MyBaseClass):    def __init__(self):        print "子类构造方法"    def childMethod(self):        print "子类方法"

子类可重写父类的方法。

一些通用的方法

  • init(self)
    构造函数
  • del(self)
    析构函数
  • repr(self)
    转化为供解释器读取的形式
  • str(self)
    将值转换为适合阅读的形式
  • cmp(self,x)
    对象比较

运算符重载

暂时用不到,以后用到再看。

属性方法的可见性

  • 类的私有属性:
    两个下划线开头,内部使用时要用:
    self.__private_attr

  • 类的方法
    类内部,使用def为类定义一个方法,必须包含参数self,且为第一个参数。

  • 类的私有方法
    使用__private_method定义,内部调用时使用self.__private_methods

Python不允许实例化的类访问私有数据,但可以使用object._className_attrName来访问属性。

本文参考:
http://www.runoob.com/python/python-functions.html

0 0