您的位置:首页 > 编程语言 > Python开发

Python学习笔记(三)函数、面向对象、模块发布

2017-09-01 09:48 651 查看

函数调用

如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值’来传递对象。

命名参数

def get(a,b):
print a
get(b=1,a=2)
=>2


缺省参数,不能从左往右,只能从右往左

def get(a,b=5):
print a
print b
get(2)
=>  2
5
get(2,2)
=>  2
2


下面这样会报错

def get(a=5,b):
print a
return


不定长参数

def arglist(a,*b):
print a
print b
return
arglist(1,2,3,4)
=>1


(2, 3, 4) 后面变成了元组

def arglist(a,**b):
print a
print b
return
arglist(1,x=2,y=3)
=>1


{‘x’:2,’y’:3}后面变成了字典dict类型

def arglist(**a):
print a
for key in a
print key
return
arglist(a=1,b=2,c=3)
=>{'a': 1, 'c': 3, 'b': 2}
a
c
b


匿名函数

lambda
sum=lambda a,b : a+b
sum(1,2) =>3
return
return 1,2,3,4,5


自动把1,2,3,4,5变成(1,2,3,4,5)元组

变量的作用域

面向对象

class Employee:
'''
this is a test demo class
'''
classstr="itis a test class"
def __init__(self, name, salary):
self.name = name
self.salary = salary
def hello(self):
'''
say hello
'''
print self.name
print "say hello"

import objectori as o
worker = o.Employee('xiaoming',10000)
print type(worker)  =>instance


1、注释的写法 方便写成参考文档

2、方法的写法

3、构造方法的写法

Python类中定义的方法通常有三种:实例方法、类方法和静态方法

实例方法一般以self作为第一个参数也就是this指针。

类方法以cls作为一个参数,cls表示类本身。定义时,使用@classmethod,那么通过cls引用的必定是类对象的属性和方法。

静态方法和一般普通函数一样,使用时使用@staticmethod

Python内置类属性

__dict__
__doc__
__name__
__module__
__bases__ 找父类的


print o.Employee.__name__ =>Employee
print o.Employee.__dict__ =>
{'__module__': 'objectori', 'hello': <function hello at 0x0000000002233AC8>, '__doc__': '\n\tthis is a test demo class\n\t', '__init__': <function __init__ at 0x0000000002233A58>, 'classstr': 'itis a test class'}


Python也有垃圾回收 引用计数

中文注释要加:

# -*- coding:utf-8 -*- 或# -*- coding: gbk -*-
#encoding=utf-8


类的继承

class Parent:

parentAttr=100

def init(self):

print ‘父类构造方法’

def parentMethod(self):
print '调用父类的方法'

def setAttr(self,attr):
Parent.parentAttr = attr

def getAttr(self):
print '父类属性',Parent.parentAttr


class Child(Parent):

def init(self):

print ‘子类构造方法’

def childMethod(self):
print '调用子类方法 child method'


测试py

from objectori import Parent,Child



两个对象相加,则可以重载 add()



私有属性

以__开头

class Parent:
parentAttr=100
__sex = 'man'
def showsex(self):
print self.__sex


dir(object)可以查看类里面都有啥属性和方法,还有一个help()

dir(p1)=>['_Parent__sex', '__doc__', '__init__', '__module__', 'getAttr', 'parentAttr', 'parentMethod', 'setAttr', 'showsex']


私有的也可以访问到

print p1._Parent__sex


类方法是可以造作类的

@classmethod//装饰器函数
def update(cls,data)
cls.grade  = data空间和作用域


globals() locals() 用来列出全局和局部变量

a=1
def fun():
b=2
print locals()

fun()=> {'b':2}


模块发布

要求每个文件夹下要有_init.py, 空文件都行



在setup.py里写

from distutils.core import setup
setup(name="xwp",version="1.0",description="xwp`s module",author="sunyang",py_modules=['suba.aa','suba.bb','subb.cc','subb.dd'])


之后

python setup.py build
python setup.py sdist


就可以把打包后的文件发布给别人。用的时候需要用python setup.py install。就成了系统模块,可以直接import进来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python