仅供学习参考使用

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

有过学车经历么?教练告诉你转弯的时候要打转向灯,你心里也知道,可是刚开始学的时候,几乎每次都忘记打转向灯,为什么会这样,因为不熟练

编程,是一门技术,和其他技术一样,需要熟练,车开的多了,就不会忘记打转向灯了,代码写的多了,概念也就理解透彻了,能做到运用自如了

很多人都问怎么样能快速入门,希望能得到一些技巧,或是某个捷径,不太费力气就能学得会,这些都不是心智成熟的人该有的想法。练习侧方位停车时,教练告诉你怎么看地标,在什么时候打方向盘,什么技巧都告诉你了,可你还是要通过一次次的练习才能掌握侧方位停车,举这个例子是希望你明白,不熟练,一切技巧都是浮云

想要做到熟练,就需要多练习,忠言逆耳,良药苦口,与君共享