Python学习笔记整理(python 3)
一、tuple(元组)
tuple
和list
非常类似,但是tuple一旦初始化就不能修改,如:
classmates = ('Michael', 'Bob', 'Tracy')
classmates
这个tuple
不能变了,它也没有append(),insert()
这样的方法。其他获取元素的方法和list
是一样的,你可以正常地使用classmates[0],classmates[-1]
,但不能赋值成另外的元素
不可变的tuple
有什么意义?因为tuple
不可变,所以代码更安全。如果可能,能用tuple
代替list
就尽量用tuple
tuple的陷阱
要定义一个只有1个元素的tuple
,如果你这么定义:
t = (1)
t
1
定义的不是tuple
,是1这个数!这是因为括号()
既可以表示tuple
,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python
规定,这种情况下,按小括号进行计算,计算结果自然是1。
所以,只有1个元素的tuple
定义时必须加一个逗号,,来消除歧义:
t = (1,)
t
(1,)
Python
在显示只有1个元素的tuple
时,也会加一个逗号,,以免你误解成数学计算意义上的括号。
最后来看一个“可变的”tuple
:
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
t
('a', 'b', ['X', 'Y'])
二、Python中list类型切片
1、基本用法
①con[start_index]
:返回索引值为start_index
的对象
②con[start_index: end_index]
:返回索引值为start_index
到end_index-1
之间的连续对象
③con[start_index: end_index : step]
:返回索引值为start_index
到end_index-1
之间,并且索引值与start_index
之差可以被step
整除的连续对象,即步长
2、缺省用法
①con[start_index: ]
:缺省end_index
,表示从start_index
开始到序列中最后一个对象
②con[: end_index]:
缺省start_index
,表示从序列中第一个对象到end_index-1
之间的片段
③con[:]
:缺省start_index
和end_index
,表示从第一个对象到最后一个对象的完整片段
④con[::step]
:缺省start_index
和end_index
,表示对整个序列按照索引可以被step
整除的规则取值
可以用负数做切片。负数用在从序列尾开始计算的位置
s[::-1]
可视为翻转效果
3、Numpy中的二维ndarray切片
对于一维数据的具体用法和Python中的类似
对于二维数值用法如下,X[:,:]用逗号分隔两个维度,对于每个维度用法一样,以下面这个二维数组为例:
x[:,1] 取x轴方向所有值,y轴等于1,结果:
x[1:3,1] 取x轴 x大于等于1,小于3,y轴等于1,结果:
三、lambda表达式简单用法
对于简单的函数,也存在一种简便的表示方式,即:lambda表达式
# ###################### 普通函数 ######################
# 定义函数(普通方式)
def func(arg):
return arg + 1
# 执行函数
result = func(123)
# ###################### lambda ######################
# 定义函数(lambda表达式)
my_lambda = lambda arg : arg + 1
# 执行函数
result = my_lambda(123)
四、__call__
class X(object):
def __init__(self, a, b, range):
self.a = a
self.b = b
self.range = range
def __call__(self, a, b):
self.a = a
self.b = b
print('__call__ with ({}, {})'.format(self.a, self.b))
def __del__(self, a, b, range):
del self.a
del self.b
del self.range
>>> xInstance = X(1, 2, 3)
>>> xInstance(1,2)
__call__ with (7, 8)