Python语法易混淆
这一篇负责记录学习python基础语法时遇到的一些易混淆点,以及与C++语法不同的表达。
字符串
- Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下:
变量[m:n]
# m为截取开始位置的字符编号
# n为从第一个字符开始数需要截取到第n个字符(包括第n个字符)
'''
str = "abcde"
str[0:3] 输出:abc
str[1:3] 输出:bc
'''
列表List
lt = [];
元组tuple
- 列表使用方括号[],元组使用圆括号()
- 元组中只包含一个元素时,需要在元素后面添加逗号 “,”,否则括号会被当作运算符使用。
tup = (50,)
- 元组内部元素不能修改,列表内部元素可以修改
- 元组不可变指的是元组所指向的内存中的内容不可变。
tup = (1,2,3)
print(id(tup)) # 输出1442507590592
tup = ('a','b','c')
print(id(tup)) # 输出1442507590784
# 从以上实例可以看出,重新赋值的tup,被绑定到新的对象了,而不是说修改了原来的对象
字典dict
- 字典创建方式:
d = {key1:val1, key2:val2}
emptyd1 = {} # 创建空字典
emptyd2 = dict() #内置dict()函数也可创建空字典
- 字典value可以是任何python对象,包括用户定义的
- key必须不可变,所以可以用数字,字符串或者元组充当,但是列表不行,因为列表可变
- 同一个key只能出现一次,如果同一个key被赋值两次,那么只记住后一个值
集合set
- 集合set是一个无序不重复元素序列
st1 = {val1,val2,val3}
st2 = set(val)
- 创建一个空集合必须有set()而不是{},因为{}是创建一个空字典
循环语句
while循环使用else语句
当while后面的condition为FALSE时,执行else里面的additional_statement。
while (condition):
statement
else:
additional_statement
循环中的else语句
循环语句中可以有else子句,它在for循环穷尽 或 while循环为FALSE时 ,导致循环终止时,执行else语句。但当循环被break终止时不执行else。
range()函数
如果需要遍历数字序列,可以使用内置range()函数生成数列。
for i in range(3):
print(i)
'''
输出:
0
1
2
'''
#也可以使用range指定区间的值
for i in range(1,3):
print(i)
'''
输出:
1
2
'''
# 使用range指定数字和不同的步长
for i in range(0,10,3)
print(i)
'''
输出:
0
3
6
9
'''
# 使用rang()和len()遍历一个序列的索引
l = ['a','b','c','d']
for i in range(len(l)):
print(i,l[i])
'''
输出:
0 a
1 b
2 c
3 d
'''
迭代器
- 迭代器有两个基本方法:iter()和next()
- 迭代器对象可以使用for进行遍历
lt = [1,2,3,4]
it = iter(lt)
for i in it:
print(i,end = " ")
# 输出“1 2 3 4
#也可以使用next()函数
ir = iter(lt)
while True:
try:
print(next(ir)) # next()方法初始值为1,逐步递增1,返回下一个迭代器对象
except StopIteration:
sys.exit()
函数
定义函数语法
def 函数名(参数列表):
函数体
参数传递
可变和不可变对象
python函数的参数传递:
- 不可变类型:类似于CPP的值传递,如不可变的对象(整数,字符串,元组)。如fun(a),传递的只是a的值,没有影响a本身,如果在函数内部修改a的值,则是生成一个新的a的对象。
# 传不可变对象实例
def change(a):
print(id(a))
a = 2
print(id(a))
a = 1
print(id(a))
change(a)
'''
输出
2325841838320
2325841838320 调用函数前后,形参和实参指向的是同一个对象,id相同
2325841838352 在函数内部修改形参以后,形参指向了不同的id
'''
- 可变类型:类似于CPP中的引用传递,如列表,字典。fun(la),则是将真正的la传递过去,如果函数内部修改了la,外部的la也会变化。
# 传可变对象实例
def change(lt):
lt.append([1,2,3])
print("函数内取值:",lt)
lt = ['a','b','c']
change(lt)
print("函数外取值:",lt)
'''
output:
函数内取值: ['a', 'b', 'c', [1, 2, 3]]
函数外取值: ['a', 'b', 'c', [1, 2, 3]]
传入函数的形参在末尾添加新内容的对象 和 外部的实参是同一个引用,所以内部修改了外面也变化了
'''
遍历技巧
- 字典遍历时,key和val可以使用items()方法同时解读出来
dc = {'name':'wolai','age':25}
for k,v in dc.items():
print(k,v)
- 序列遍历是,索引位置和对应的值可以使用enumerate()函数同时得到
异常处理
try/except
try/except…else
try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。else 子句将在 try 子句没有发生任何异常的时候执行。
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
抛出异常
Python 使用 raise 语句抛出一个指定的异常。
x = 10
if x > 5:
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))