学习——李金python笔记
-
ipython解释器提供了很多以百分号%开头的magic命令:%cd demo_test/;
使用 ? 查看函数的帮助:sum?;
可以使用 ! 来执行一些系统命令。 -
Python中有一种叫做列表推导式(List comprehension)的用法:
numbers = [int(field) forfield in fields]
out:numbers [1, 2, 3, 4, 5]
sum(numbers)
写在一行:sum([int(field) for field in line.split()]) -
类 Class
用class来定义一个类。 Person(object)表示继承自object类; __init__函数用来初始化对象; self表示对象自身,类似于C Java里面this。
class Person(object):
def init(self, first, last, age):
self.first = first
self.last = last
self.age = age
def full_name(self):
return self.first + ’ ’ + self.last构建新对象:
person = Person(‘Mertle’, ‘Sedgewick’, 52)调用对象的属性:
person.first
out:‘Mertle’
调用对象的方法:
person.full_name()
out:‘Mertle Sedgewick’
修改对象的属性:
person.last = ‘Smith’ -
python常见数据类型
-
** 幂指数运算 例:3**4=81
-
/ // % 除,整数除法,取余运算
-
取整round(21.6)=22
-
不要用内置的函数来命名变量
-
Python支持链式比较:0.1 < 0.2 <0.3 True
-
Python是一种面向对象的语言,面向对象的语言中一个必不可少的元素就是方法,而字符串是对象的一种,所以有很多可用的方法。
跟很多语言一样,Python使用以下形式来调用方法:对象.方法(参数) -
Python用字符串的format()方法来格式化字符串。
具体用法\字符串中花括号 {} 的部分会被format传入的参数替代,传入的值可以是字符串,也可以是数字或者别的对象。
可以用数字指定传入参数的相对位置:’{2} {1} {0}’.format(‘a’, ‘b’, ‘c’) out=‘c b a
指定传入参数的名称:’{color} {0} {x} {1}’.format(10, ‘foo’, x = 1.5, color=‘blue’)
out=‘blue 10 1.5 foo’
也可以使用旧式的 % 方法进行格式化:
s = “some numbers:”
x = 1.34
y = 2
t = “%s %f, %d” % (s, x, y)
out(t):‘some numbers: 1.340000, 2’ -
与字符串不同的是,列表可以通过索引和分片来修改。
对于字符串,如果我们通过索引或者分片来修改,Python会报错 -
列表可以通过以下的方法改变,而字符串不支持这样的变化。
a = [1, 2, 3, 4]
b = a
此时, a 和 b 指向同一块区域,改变 b 的值, a 也会同时改变:
b[0] = 100,则a=[100, 2, 3, 4]
字符串与整数浮点数一样被认为是基本类型,而基本类型在Python中是不可变的。 -
与列表相似,元组Tuple也是个有序序列,但是元组是不可变的,用()生成。可以索引,切片,但是元组是不可变的但是元组是不可变的.将列表转换为元组:tuple(a)
为什么需要元组:旧式字符串格式化中参数要用元组;在字典中当作键值;数据库的返回值……
元组的生成速度要比列表的生成速度快得多,相差大概一个数量级,索引速度差不多 -
字典没有顺序,Python中不能用支持用数字索引按顺序查看字典中的值,而且数字本身也有可能成为键值,Python中要求键值对的键必须是不可变的,而值可以是任意的Python对象。
#定义四个字典
e1 = {‘mag’: 0.05, ‘width’: 20}
e2 = {‘mag’: 0.04, ‘width’: 25}
e3 = {‘mag’: 0.05, ‘width’: 80}
e4 = {‘mag’: 0.03, ‘width’: 30}
#以字典作为值传入新的字典
events = {500: e1, 760: e2, 3001: e3, 4180: e4}
在不可变类型中,整数和字符串是字典中最常用的类型;而浮点数通常不推荐用来做键(因为浮点数的精度问题)有时候,也可以使用元组作为键值,元组是有序的,因此 (‘New York’, ‘Austin’) 和 (‘Austin’, ‘New York’) 是两个不同的键
索引不存在的键值会报错,改用get方法a.get(“three”),就会输出None
可以通过索引来插入、修改单个键值对,但是如果想对多个键值对进行操作,这种方法就显得比较麻烦,有 update 方法
person_modifications = {‘first’: ‘James’, ‘middle’: ‘Clerk’}
person.update(person_modifications) -
集合:之前看到的列表和字符串都是一种有序序列,而集合 set 是一种无序的序列。
因为集合是无序的,所以当集合中存在两个同样的元素的时候,Python只会保存其中的一个(唯一性);同时为了确保其中不包含同样的元素,集合中放入的元素只能是不可变的对象(确定性)。
将seq中的元素添加到s中。
也可以使用一个列表来初始化一个集合:a = set([1, 2, 3, 1]) out:a={1, 2, 3}
集合中的元素是用大括号{}包含起来的,这意味着可以用{}的形式来创集合.(也可以用set{},创建空集合只能用set),集合的并交差操作| & -,a ^ b 实现(异或操作符):a 和b 的对称差集,返回在 a 或在 b 中,但是不同时在 a 和 b 中的元素组成的集合。s.add(a):为集合添加元素;列表的extend方法类似,s.update(seq)用来向集合添加多个元素。a.difference_update(b)从a中去除所有属于b的元素;t.discard(20),作用与 remove 一样,但是当元素在集合中不存在的时候不会报错。 -
不可变集合:对应于元组(tuple)与列表(list)的关系,对于集合(set),Python提供了一种叫做不可变集合(frozen set。与集合不同的是,不可变集合一旦创建就不可以改变。不可变集合的一个主要应用是用来作为字典的键
-
else语句:与 if 一样, while 和 for 循环后面也可以跟着 else 语句,不过要和break一起连用。
当循环正常结束时,循环条件不满足, else 被执行;
当循环被 break 结束时,循环条件仍然满足, else 不执行 -
列表推导式:列表推导式可以使用比循环更简单的方法来创建列表。total = sum([x2 for x in values if x <= 10])和total = sum(x2 for x in values if x <= 10)相比会先生成列表再计算浪费了资源。也可以使用推导式生成集合和字典
-
函数:可以接收不定参数,*args 表示参数数目不定,可以看成一个元组,把第一个参数后面的参数当作元组中的元素;**kwargs 表示参数数目不定,相当于一个字典,关键词和值对应于键值对。可以返回多个值,事实上,Python将返回的多个值变成了元组,不仅仅返回值可以用元组表示,也可以将参数用元组以这种方式传入
def add(x, y)
z = (2, 3)
print add(*z) 这里的星号必不可少。
还可以通过字典传入参数来执行函数:
w = {‘x’: 2, ‘y’: 3}
print add(**w) -
map 方法生成序列:map(aFun, aSeq)
将函数 aFun 应用到序列 aSeq 上的每一个元素上,返回一个列表,不管这个序列原来是什么类型。
def add(x, y):
return x + y
a = (2,3,4)
b = [10,5,3]
print map(add,a,b)
out:[12, 8, 7] -
模块:Python会将所有 .py 结尾的文件认定为Python代码文件
-
%%writefile ex1.py
…
Overwriting ex1.py
可以通过%run ex1.py执行它,并将它作为模块引入用import,可以用ex1.函数名
调用模块里面的函数 -
name 属性:有时候想将一个 .py 文件既当作脚本,又能当作模块用,这个时候可以使用 name 这个属性。
只有当文件被当作脚本执行的时候, __name__的值才会是 ‘main’
1.数据类型分类:
列表是可变的(Mutable)字符串是不可变的(Immutable)
可变数据类型 | 不可变数据类型 |
---|---|
list , dictionary , set , numpy array , user defined objects | integer , float , long , complex , string , tuple , frozenset |