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