仅供学习参考使用
1
python里计算除法,有两个运算符,一个是/,另一个是//,前者运算结果是float类型,后者运算结果是int。
2
关于range函数,最容易忽略的一点是它所产生的数列是左闭右开,比如range(1,5),产生的数列是1,2,3,4,不会到5,边界问题是编程中需要特别注意的地方
range不只是产生上升数列,还可以产生下降数列,比如range(10,0,-1) 可以产生从10到1的数列,这样就可以实现列表的倒序遍历
3
列表新增数据可以用append,也可以用insert,而集合新增要用add方法,同样是新增,为什么方法的名字会不一样?
列表是有序的,在中间新增,是insert,插入
在末尾新增,是append,追加
集合是无序的,新增时,用add,加就是了,没有在中间还是在末尾这个概念
他们的数据结构不同,虽然都是新增,但新增的方式不同
4
在计算机里,有些符号是无法直接书写的,比如回车符号,你见过换行符长什么样么?你能手写出字母abcd,但你写不出来换行符
既然无法直接书写,回车符又真实存在,那么如何在字符串里写一个换行符呢?
这种特殊的无法直接书写的符号,要用转义字符,一个\加上一个字母就表示一个特殊符号,比如\n表示换行符
你执行print("abc\nd"),输出时,abc在一行,d在下一行,因为他们中间放置了一个换行符
5
元组一旦创建就无法修改
但实际情况,元组在python中的作用非常大,有些场景下,只能用元组而不能用列表
1、 元组可以作为字典的key, 也可以存储到集合中,但是列表不可以,因为无法对列表进行hash操作
2、 函数返回多个值时,是以元组的形式返回的,为什么不以列表的形式呢? 这涉及到编程的设计思想,某些情况下你不希望函数的返回值被任意修改,在不同的语言里,会有不同的方式来实现,python选择用元组,元组不可修改
6
字典的value可以是任意类型的数据,但是key必须是可hash的数据类型,不理解可hash没关系,你你记住以下几个数据类型,它们都不能做字典里的key
1、列表
2、集合
3、字典
7
(3) 和(3, )是两个完全不同的数据,前者是int类型数据,小括号表示运算优先级,而后者则是一个元组,你熟悉的元组至少有两个数据,但一个数据也可以组成元组,计算机里不接受歧义,因此,为了避免和(3) 产生歧义,当元组里只有一个数据时,也要加一个逗号,写成(3,)
8
变量的命名一定不能和内置函数同名,比如 str = [1,3,5],这种变量名是绝对不允许出现的,原因在于,在当前作用域中,会覆盖掉内置函数str,导致你无法再使用内置函数str
9
type函数可以获得一个对象的数据类型,比如type(3)得到的是int
type也可以作用于变量,比如下面的代码
a=3
print(type(a))
输出的是int,type函数非常简单,但作用却非常大,一段代码,如果你清楚的知道每一个变量的数据类型,那么,这段代码你基本上算是理解可,反之,你根本不理解这段代码
在不理解时,使用type函数,就可以获取每个变量的数据类型,知晓了数据类型,你才能明白对数据的操作
10
从字典里取值时需要提供key,但如果key不存在,就会引发KeyError 错误,有两种方法可以有效避免这个错误
方法一,在取值前使用成员操作符in判断key是否存在
方法二,使用字典的get方法,如果key不存在,则返回default,default默认为None,你也可以设置这个值
11
函数里如果没有执行return,会默认返回None,因此任何时刻,函数都是有返回值的
函数一次性return多个数据,最终是以元组的形式返回
函数在python中是第一公民,也是一个对象,你可以把函数做为参数传递,甚至作为另一个函数的返回结果,没有这些特性,就无法写出装饰器
12
像pycharm这样的编辑器,都提供了debug的功能,调试程序,是编程的必备技能,通过调试程序,可以梳理程序逻辑,查找bug,不会调试程序,就不算入门
13
在if语句中,条件表达式的结果类型可以不是bool类型,比如 if [12, 6]:条件表达式的结果是列表,这个时候就要看列表是否为空,如果为空,等价于False,其他类型有相似的规则,如果是空字符串,等价于False,0等价于False,None等价于False,反之,则等价于True
14
在其他主流编程语言中,除了int类型数据,还有long类型数据,可以表示的整数范围比int更大。
Python只有int类型表示整数,这是从py3开始的,为啥不弄一个long类型呢,因为int类型在python中几乎是无限大的,我们平时用的python是c语言写的,在实现int类型时,使用了可变长数组,int的可表示范围远远超过了你可能接触的范围
15
算术运算符 // 是向下取整的除法
5/2 = 2.5 ,比2.5 小的整数中距离2.5最近的是2,所以5//2 = 2
-5/2 = -2.5 ,比-2.5小的整数中距离-2.5最近的是-3, 所以-5//2 = 2
2019-11-13
== 的作用是判断两个对象的值是否相等
is是身份运算符,判断两个对象是否为同一个对象,也就是判断他们的内存地址是否相同
a = [1]
b = [1]
a==b 结果为True
a is b 结果为False
16
逻辑表达式计算遵循短路原则
表达式 A and B ,优先计算A部分,如果A的结果是False,则不会计算B
表达式A or B,优先计算A部分,如果A的结果为True,则不会计算B
可以通过代码来验证
def test():
print('ok')
return True
4 > 5 and test()
test函数不会诶执行,因为4 > 5 已经是False,即便test()返回结果为True,整个表达式的结果也是False,没有必要计算and 的右侧结果
17
python tip
python当中,一切皆对象,都是内存当中的一个实际存在的对象,就连函数,类也是对象
这一点,和其他编程语言差别很大,也是python灵活强大的基础之一
18
在命名python脚本和文件夹时,一定要避免与系统模块名称或者第三方库发生冲突,下面2个做法都是错误的
创建一个名为 os.py 的脚本
创建一个名为redis的文件夹
这样做会导致你在import os 模块时,引入你自身定义的os.py脚本,如果你在redis文件夹下import redis,也会引入自身,而不会引入安装的第三方redis库
这是因为,在使用import的时候,会优先从所在文件目录里查找模块,找不到时,才会去系统库里找
因此,你要避免自己定义的模块名称与系统模块名称冲突
19
列表,集合,字典,都是可变对象,他们做为函数的参数时,在函数内对他们的操作,都将影响到函数外的变量,而int, 字符串是不可变对象,当他们作为函数的参数时,函数内对他们的修改,不会影响到函数外
locals() 函数会以字典的形式返回当前所在作用域的全部变量,利用这个函数,可以搜集作用域内变量,或筛选返回,或以关键字参数的形式传递个另一个被调用的函数
20
python tip
有过学车经历么?教练告诉你转弯的时候要打转向灯,你心里也知道,可是刚开始学的时候,几乎每次都忘记打转向灯,为什么会这样,因为不熟练
编程,是一门技术,和其他技术一样,需要熟练,车开的多了,就不会忘记打转向灯了,代码写的多了,概念也就理解透彻了,能做到运用自如了
很多人都问怎么样能快速入门,希望能得到一些技巧,或是某个捷径,不太费力气就能学得会,这些都不是心智成熟的人该有的想法。练习侧方位停车时,教练告诉你怎么看地标,在什么时候打方向盘,什么技巧都告诉你了,可你还是要通过一次次的练习才能掌握侧方位停车,举这个例子是希望你明白,不熟练,一切技巧都是浮云
想要做到熟练,就需要多练习,忠言逆耳,良药苦口,与君共享