虽然用python已经有很长一段时间了,但是从没有系统的学习过,因而知识不成体系。在写代码过程中,不考虑代码的整洁与简单性,导致我写出的程序跑起来很慢,看起来就是菜鸡写的。于是下定决心不定时更新python查漏小知识。
文章目录
1. 使用\行连接符
常见转义字符:\t(横向制表符) \n(换行)。
2. 对象
对象的本质是:一个内存块,拥有特定的值。每个对象由id、type、value组成。
- id 对应于对象在计算机内存中的地址,用id(obj)可以返回对象obj的id;
- type 表示对象存储的数据类型,比如int、str、list等,使用type(obj)可以返回对象的类型;
- value 表示对象所存储的数据值,使用print(obj)可以打印出值。
3. python命名规范
4. 系列数据赋值
- 同时给多个变量赋值为空list。左右两边的个数必须保持一致。
a, b = [], []
print(a)
>>> []
- 链式赋值,下面两种方式都可。
a, b = 123, 123
a = b = 123
print(a)
>>> 123
5. 字符串中的一些常用函数
5.1 split()和join()
我一般用split()分割字符串较多,但是join()用的比较少。
a = ['www', 'zhihu', 'com']
print('.'.join(a)) # 用点号进行拼接,可以换成其它的符号。
>>> www.zhihu.com
这样就方便很多,我一般用字符串拼接,如果在这个例子中用字符串拼接(字符串相加),还要在list中取到每个值,就麻烦多了。
感觉自己还是没体会到join()函数,自己用的时候还是会出错,就举个栗子吧。
# 比如我想用形成'九界仙尊is finished.'
bookname = '九界仙尊'
a = bookname.join('is finished.')
# print(a) # i九界仙尊s九界仙尊 九界仙尊f九界仙尊i九界仙尊n九界仙尊i九界仙尊s九界仙尊h九界仙尊e九界仙尊d九界仙尊.
b = [bookname, 'is finished.']
c = ''.join(b) # 可以用别的符号
print(c) # 九界仙尊is finished.
5.2 a.startswith()和a.endswith()
a = 'link.txt'
a.startswith('li') # >>> True
a.endswith('txt') # >>> True
e.g. 在一个文件夹中有很多文件,可以用这个函数来判断是不是自己想要读取的文件。
5.3 format()
print('name: {}, age: {}'.format('xiaoxi', 18))
>>> name: xiaoxi, age: 18
format()前面都是字符串,要填空的地方用{}。
例子:
6. 列表
6.1 推导式创建序列
推导式是典型的python风格。
一条命令,但我经常会添加逗号导致报错。
字典的推导式:
6.2 常用的函数
有很多常用的函数,比如len()、sorted()、max()、sum()、append()等等,这种需要用到哪个就看工具书吧。
6.2.1 怎么将list中的元素添加到另一个list中。
之前一直用append()函数,但是如果我要将一个list中的元素添加到另一个list中,还用append()就会有问题。
list1=[1, 2, 3]
list2=['4', 6, 7]
#append()
# list1.append(list2)
#打印现在的list1
# print(list1) # [1, 2, 3, ['4', 6, 7]]
list1.extend(list2)
print(list1) # [1, 2, 3, '4', 6, 7]
6.3 二维列表
一般用一维比较多,二维列表用于存储表格数据。np.array()构成数组
7. 元组
元组我用到的很少,值得注意的点有:
- 创建可以用()/tuple();
- 元组中元素不能修改;
- 元组中元素的访问和列表一样。
7.1 zip()
有时候想要将多个列表进行合并,但是又不想把它们放在一个list里,可以用zip()函数。
元组可以作为dict的key,但list不行,因为dict中key是唯一的不可变的,但list是可变对象。下面例子用zip()函数形成dict很方便。
zip()进行打包。
name = ('xi', 'ming')
age = (18, 19)
jobs = ('student', 'coder')
# print(zip(name, age, jobs)) # 结果:<zip object at 0x000001BF04E61248>
# print(dict(zip(name, age, jobs))) # 结果: ValueError: dictionary update sequence element #0 has length 3; 2 is required
for name, age, jobs in zip(name, age, jobs):
print(name, age, jobs) # xi 18 student
break
# 如果改为list呢
name = ['xi', 'ming']
age = [18, 19]
jobs = ['student', 'coder']
for name, age, jobs in zip(name, age, jobs):
print(name, age, jobs) # xi 18 student
break
8. 字典
8.1 字典的读取
我一般通过键来获得它对应的值,但这种方法的弊端在于如果你用的键不存在就会报错。而用dict.get()的好处在于,如果键不存在时,会返回None,因此,推荐使用get()获取dict的“值”。
a = {'name': 'xiaoxi', 'age': 18}
a.get('name')
>>> xiaoxi
8.2 遍历字典
a.items()、a.keys() / for key in dict: 遍历所有的key值、a.values()
我经常忘记后面有没有s,不管是读键值对、键还是值都是有的哈。
8.3 update()
将新字典b全部添加到旧字典a中,如果key重复,新的会覆盖旧的。
9. 集合
集合是无序可变、元素不重复的数据结构。
创建用{}/set()、添加元素用add()、基于元素不重复这个特点,可以给列表去重。
集合有个特点是无序,遍历方法和list一样,都用for循环。
10. 控制语句
if-else/ if-elif-else判断语句、for、while等循环语句。
10.1 注意事项
- while条件为真时开始循环;
- break和continue。
break语句用于while和for循环,用来结束整个循环。当有嵌套循环时,break语句只能跳出最近一层的循环。
continue语句用于结束本次循环,继续下一次。多个循环嵌套时,continue也是应用于最近的一层循环。
10.2 循环代码优化
- 尽量减少循环内部不必要的计算;
- 嵌套循环中,金量减少内层循环的计算,尽可能向外提;
- 局部变量查询较快,尽量使用局部变量;
- 连接多个字符串,用join()而不用’+‘。