一、tuple和list数据类型 共同点: 都是有序集合,集合的元素类型可以是不同的数据类型; 第1元素索引为0,都可以用 变量[索引] 这样方式访问元素。最后一个元素索引号也可以是-1表示,以此类推。 不同点:list集合的元素可以改变,集合用[]括号; tuple集合不可以改变,集合用()括号。 #list定义 >>> classmates = ['Michael', 'Bob', 'Tracy'] #tuple定义 >>> classmates = ('Michael', 'Bob', 'Tracy') 定义只有一个元素的tuple,必须要以,号末尾: >>> a=(1,)
计算元素个数: >>> a = (1,2) >>> len(a) 2
list元素的操作: >>> classmates = ['Michael', 'Bob', 'Tracy'] #末尾加元素 >>> classmates.append('Adam') #插入元素到指定位置 >>> classmates.insert(1, 'Jack') #删除末尾元素 >>> classmates.pop() #删除某个指定位置的元素 >>> classmates.pop(1) #替换元素内容 >>> classmates[1] = 'Sarah' #元素也可以是另一个list/tuple >>> s = ['python', 'java', ['asp', 'php'], 'scheme'] #可以用二维数组方式访问 >>> s[2][1] #tuple的元素也可以是List >>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >>> t[2][1] = 'Y' >>> t ('a', 'b', ['X', 'Y'])
二、条件判断 if语句完整表达式: if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4>
注意: 条件判断也可以只是一个变量,只要
三、循环 1、for...in:把list或tuple的每个元素迭代出来: names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name)
额外: range(n)函数:生成0-n的整数序列; list()函数:转换成list。 2、while:满足条件就不断循环,直至条件不满足为止: 3、break和continue: break直接退出循环; continue只是跳出此次循环。
四、dict和set类型 dict:key-value类型,用{}括号表示。 >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael']
dict优点:能快速根据key查到相应value,缺点是内存占用大。 判断key是否存在,可用in: >>> 'Thomas' in d False
get方法可以安全地获取指定key的value: >>> d.get('Thomas') #key不存在,返回None >>> d.get('Thomas', -1) #key不存在,返回-1默认值 -1
set: 一组key集合,没有value,且key不重复。key值也不排序。 set可以看成是无序和无重复元素的集合。 创建set,要用list或者tuple作为输入: >>> s = set([1, 2, 3]) >>> s {1, 2, 3}
add方法可以添加元素到set中,可重复添加: >>> s.add(4) >>> s {1, 2, 3, 4} >>> s.add(4) #无效果 >>> s {1, 2, 3, 4}
remove删除元素: >>> s.remove(4) >>> s {1, 2, 3} 两个set可以做数学意义上的交集、并集等操作: >>> s1 = set([1, 2, 3]) >>> s2 = set([2, 3, 4]) >>> s1 & s2 {2, 3} >>> s1 | s2 {1, 2, 3, 4}
dict与set的区别: 唯一区别是set没有对应的value, 相同点是不可以放入可变对象。 >>> s=set((1,2)) >>> s {1, 2} >>> s.add((1,2)) >>> s {1, 2, (1, 2)} >>> s.add((1,[2,3])) #此代码会报错,因为tuple的元素中包含list,list是可变对象 Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> s.add((1,[2,3])) TypeError: unhashable type: 'list'
五、函数 python的内置函数,可参考:http://docs./3/library/functions.html 函数定义: def def_name(param): <函数语句体>
从其他定义好函数的py文件中引入: >>> from abstest import my_abs #abstest.py文件中引入my_abs函数 >>> my_abs(-9) 9
空函数:用pass语句 def nop(): pass #pass为占位符,可使代码运行时不出错
参数类型检查: python不会自动检查参数类型,所以使用内置函数isinstance()实现: def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type'); if (x > 0): return x; else: return -x;
返回多个值:利用tuple类型返回多个值 import math def move(x, y, step, angle=0): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny #这里返回多个值,实质是返回tuple >>> r = move(100, 100, 60, math.pi / 6) >>> print(r) (151.96152422706632, 70.0)
六、各种函数的参数定义 1、位置参数:即普通参数。 定义后,调用函数时,位置参数值必须传入。
2、默认参数: def func(x, n=2): #默认参数要放在位置参数后面 return x+n >>>func(1) 3
定义了多个默认参数的函数,调用时可按顺序提供参数值。也可以不按顺序提供,这时需要将参数名写上。 def sum(x, y=2, z=3): return x+y+z; sum(1, 10) #z参数使用默认值 sum(1, z=10) #y参数使用默认值
注:定义默认参数值,一定要指向不变对象。因为Python函数在定义时,默认参数值已经计算出来了。 def add_end(L=[]): L.append('END') return L >>> add_end() ['END'] >>> add_end() ['END', 'END'] #第二次的调用开始出问题了。 >>> add_end() ['END', 'END', 'END']
以上例子可改为: def add_end(L=None): if L is None: L = [] L.append('END') return L
3、可变参数: 参数定义前加*号,代表可传入0个或任意多个参数。 函数调用时,实际自动组装为一个tuple。 def sum(*numbers): result = 0 for num in numbers: result = result + num return result >>>sum(1, 2, 3) 6 >>>nums = [1,2,3] >>>sum(*nums) #传入list或tuple元素可变成可变参数传入 6
4、关键字参数 **号前缀定义的参数,允许可传入0个或任意个含参数名的参数。 函数调用时,会将这些参数组装成dict。 def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) >>>person('Michael', 30) name:Michael age:30 orther:{} >>>person('Mochael', 30, city='Beijing', job='Engineer') name:Michael age:30 orther:{'city':'Beijing', 'job'='Engineer'} >>>extra={'city':'Beijing', 'job'='Engineer'} >>>person('Jack', 24, **extra) #可以将dict设为关键字参数传入,注意,**kw参数获得的是extra的一个拷贝 name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
5、命名关键字参数 限制传入的关键字参数,明确指定要传入的参数名。 定义方式有两种: def person(name, age, *, city='Beijing', job): #*号后的所有参数都是命名关键字参数 print(name, age, city, job) >>> person(
五种参数的组合顺序:位置参数(无默认值)、默认参数、可变参数、命名关键字参数、关键字参数。 |
|