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

函数调用

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

命名参数

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(1234)
=>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进来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值