变量类型
python 是弱类型语言.但其也有标准的类型.
Numbers(12)
String(’abc’)
List([1,2])
Tuple((1,2))
Dictionary({‘Michael’: 95, ‘Bob’: 75, ‘Tracy’: 85})
Set (([1, 2, 3]))
变量不需要定义,直接使用变量名进行赋值. 赋值指定格式就是相应的类型.
Numbers 相当于java的int,short,long 合集.
String 跟java的一样.
List 一样
Set 一样.
Tuple 相当于数组
Dict 相当于Map C# 也是dict.
ps: python 是根据缩进来判断作用域的.
函数定义/调用
定义函数1
2def functionA(X):
return x*x ;
调用函数print(functionA(3)) ;
特性
1.切片,取出list或者tuple中部分元素.
L = [‘aaa’,’bbb’,’ccc’]
正序取:第一个是取出位置(包括该位置的元素),第二个是截止位置(不包括该位置的元素)
取出第一个元素L[0:1]
取出前2个元素:L[0:2]
倒序取:第一个是倒序截止位置(包括),第二个倒序是开始取值位置(不包括).
取出最后一个元素:L[-1]
取出倒数第二个元素:L[-1:-2]
2.迭代.遍历对象
for var in object
可以通过isinstance(checkObject, Iterable)
来判断该对象是否可以进行迭代.
不推荐使用(objct) is type(object1) 来进行类型检查是因为type不可靠.1
2
3
4
5
6class A():
pass;
class B():
pass;
type(A) is type(B) ;
>>>True
遍历dict对象的keyfor key in dict
遍历dict对象的valuefor var in dict.valuse()
遍历key与valuefor k,v in dict.items()
遍历list的下标与值for i,v in enumerate(list)
3.构造器
生成1,2,3…9的listrange(1,10)
生成 1,4,9…81的 list[x*x for x in range(1,10)]
4.赋值
可以同时多个赋值.a,b,c = 1,2,3 ;
高阶函数
1.map /reduce python的map不同于java..
map 是对每个子元素进行函数运算.1
2
3
4def f(x) :
return x*x ;
map(f,range(1,10));
输出:[1,4,9,25,36,49,64,81]
reduce 是对没两个元素进行操作.1
2
3def fx(x,y):
return x*y +x+y ;
reduce(fx,range(1,10)) ;
2.filter 过滤函数
filter 是对每个元素进行检查,返回true的保留.返回false的删除.1
2
3
4
5
6def ff(x):
if (x > 5):
return true ;
else:
return false ;
filter(ff,range(1,10)) ;
3.sorted 排序
升序sorted([36, 5, -12, 9, -21])
绝对值升序排序sorted([36, 5, -12, 9, -21],key=abs)
忽略大小写升序排序sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower
倒序sorted([36, 5, -12, 9, -21],reverse=true)
4.lambda表达式
传入x,y 返回 xy
`lambda x,y:xy`
5.装饰器
装饰器是面向切面编程的概念,主要目的是对程序进行相同代码块的冗余去除.
定义装饰器:
参数:args 称作为数组参数,*kwargs 称作为字典参数.表示可以传进来任意类型任意值.1
2
3
4def log(func):
def proxy_f(*args,**avg):
return func(*args,**avg) ;
return proxy_f ;
使用装饰器.
在对应的函数前加上@log就可以.1
2
3
4
5
6@log
def now():
print('2015-3-25') ;
//调用
now() ;
也可以这样使用装饰器now = log(now)
6.偏函数
目的:把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单.1
2
3
4
5
6>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85
模块
1.概述
python 的模块有点类似于java的包–类这样的结构.一个python文件相当于一个模块.不同模块的函数名可以相同.单不要与内置的函数名重名.模块名之外,是包名,类似于java.不过包名目录必须有init.py这个文件.
2.使用模块
导入模块 (模块名不含.py,跟java引入类一样,不含.class)import model_name
2.使用模块(模块名.函数名来调用相应模块的函数.)model_name.func_name
3.使用pip工具安装模块pip install 模块名
4.模块搜索路径1
2
3import sys
sys.path
5.添加自定义的搜索路径
添加环境变量:PYTHONPATH
面向对象
- 类/对象(实例)
与一般面向对象语言定义基本一致.
2.区别(下划线都是两个)
可以不定义成员属性,直接使用self.XX来赋值.也可以定义一个默认的成员属性.也可以在实例化后定义…
初始化构造器(连续两个下划线):def __init__ (paramter1,...)
以XX 定义的方法(函数)是特殊函数方法.例如:init
以__XX定义的成员变量/方法(函数) 是私有的(private).不能被外部访问.
以_XX定义的变量/方法 外部不应该去访问它.但实际是可以访问到的.
不能通过实例.__XX 来对私有变量进行赋值.这样赋值是赋值给一个新的变量,而非该实例的内部成员变量.
这样是错误代码:1
2
3
4
5
6>>> bart = Student('Bart Simpson', 98)
>>> bart.get_name()
'Bart Simpson'
>>> bart.__name = 'New Name' # 设置__name变量!
>>> bart.__name
'New Name'
3.继承与多态
继承父类,覆写父类方法.符合李氏替换原则.遵循多态.
对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。
对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了:
4.成员属性限制:__slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称