一、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>
注意: 条件判断也可以只是一个变量,只要变量是非零数值、非空字符串、非空list等,就判断为True,否则为False。
三、循环
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>>> d.pop('Bob') #删除指定key值
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.python.org/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('Jack', 24, city='Beijing', job='Engineer') #调用时要明确参数命名
>>> person('Jack', 24, job='Engineer') #命令关键字参数有默认值时,可不传入
def person(name, age, *args, city, job): #args可变参数后的都是命名关键字参数 print(name, age, args, city, job)
五种参数的组合顺序:位置参数(无默认值)、默认参数、可变参数、命名关键字参数、关键字参数。
来源:https://www.cnblogs.com/xiwang6428/p/12628188.html