Python学习笔记--基础语法--变量和运算符
1.变量是什么?为什么要有变量?变量如何使用?
- 变量是什么?
- 量是衡量是事物的一种状态。可以用数量来表示标定性,如快慢,多少,高低等 。注①百度百科-量
- 变是指变化。
- 变量是,把事物的状态记录下来,并且记录下来的值是可以变化的。
- (扩展)变量是,Python提供给我们,操作内存的数据的一种机制。
- 为什么要有变量?
- 为了让计算机像人一样记住事物的状态。
- 比如,我记住了什么是手机,那么想诺基亚这种古老只能打电话的通信设备,是手机,
- 而随着手机增加了拍照,MP3等功能,我对手机的认识,也随之而变化。
- 那么,我对手机的这个"变量",也就随之而更新了。
- 同样,我希望电脑也能有这个"变量"
- 变量如何使用?
- 先定义,后使用。
- 比如下面:name是变量名,"liqi" 是变量值。
- (扩展)数据是什么?
- 数据是记录世界的状态。
- (扩展)变量在计算机内部是如何实现?
- 比如name = "liqi"
- 计算机开辟出一个小房间(内存空间),把变量值"liqi",放到这个小房间里去。
- 然后把这个小房间的地址(内存地址),绑定给name。
- 下次想要拿到"liqi"这个值,通过name就可以找到。
1.5(补充)程序中的变量是什么?
- 变量是数据的容器。——《计算机是怎样跑起来的》
2.变量为什么重要?
- 程序 = 数据+功能
- 数据和功能,什么是最核心的?是数据。
- 比如,支付宝,里边放了钱。支付宝功能可以丢,但钱(那些数据)是不能丢的。
- 而变量,就是操作数据的一种最重要的方式。
3.为什么要给设计这么多语法?
- 为了让计算机的跟人一样。
- 把握这个原则。去理解这些语法和结构。会更加容易些。
- 比如,为什么要有if判断这个语法? 人又何尝不是时时刻刻在做判断和抉择呢?
- 比如,为什么要有循环这种结构?人又何尝不是日复一日的在循环?
- 比如,为什么要有类?人又何尝不是,"物以类聚,人以群分"?
4.变量的三大组成部分?
- 变量名:为了方便找值?(应该是把内存地址起个别名)
- 赋值符合:将变量值的内存地址绑定到变量名。
- 变量值:记录事物的状态。
- 变量名:
- 应该 见名知其意,目的是让代码具备可读性
- 命名原则:1.不用关键字,2.使用数字字母下划线,3.不用数字开头。
- 命名风格:Python推荐变量名,纯小写加下划线。
- 变量值:
- 类型。(数字类型,布尔型,列表,字典,集合,)
- id 。值在内存中反应的身份证号,反应内存地址。
- 变量名:
5.我们所说的Python的数据类型有哪些?
- 这个我没有找到权威的解答,我粗略地把我常用的数据类型归类如下:
- 数字类型(整型,浮点型)
- 字符串类型
- 布尔类型
- 序列类型(列表,元组,字典,集合)
6.is和==判断有什么区别?
- is 是判断变量的id是否一致。
- == 是判断值是都一致。
- 如果两个变量id相等,值一定相等。值相等,id不一定相等。
- 这里赋值的时候,解释器有时候会优化,交互式环境有小整数池概念,(-5 ~ 256)。
7.Python启动的时候,有什么优化机制?
- 小整数池的概念。把常见的数据开辟出内存空间来。
- 字符串,也会开辟一些出来。
- 特殊的None
- 布尔类型,True和False 也会开辟出来
- 当有新的变量的变量值等于布尔值时,就会把这个新的变量绑定给True和False的id地址。
- 这也是为什么 判断的时候,可以用 if x is True 这种方式来判断了。
8.Python中a is None和a == None 有什么区别?
- 其实,判断没什么区别。
- 只是用is 显得很懂Python,很专业!(尤其是,理解上面写的知识点后)
9.为什么不能用a is 10000这种来判断?
- 10000这个值,不是常用整数池里面的,系统存放的时候,是选择一个内存空间存放。
- 因为不是常用的,可能会有多个内存空间都存放同一个值。
- 所以,他们的id就会不同,但是值是相同的,所以,要用==来判断
-
10.内存管理是什么?Python如何对于内存管理是怎样的?
- 内存管理:是引入一种垃圾回收机制(Garbage Collection)[ˈɡɑːbɪdʒ kəˈlekʃn] ,简称GC。
- Python的GC机制,是采用一种【计数引用】,
- 比如 x = 100,y = 100,现在对于变量值100 有x , y 两个引用。变量值1000的引用次数为2
- 如果,现在x = 999 , y = 333 , 现在变量值100, 没有人引用。变量值100的引用次数为0
- 对于这个引用次数为0的变量值100,Python解释器,会定时清理掉。
11.像有些语言,比如C语言,需要自己对内存进行引用和释放,这样的好处和弊端是?
- 好处是,自己可以操作硬件系统。
- 弊端是,如果忘记释放,会导致内存溢出。(也就是内存满了,像上面的100,没有释放掉,会一直占用,如果这样的100有很多,就会把内存占满。)
12.垃圾机制,有没有效率问题?
- 有的。
- 垃圾回收机制,是每次都要扫描一遍,变量值的引用次数。
- 当变量值越来越多的时候,扫描的时间就会越来越长。
- 此时,如何提升扫描效率呢?
- 用分代回收
13.垃圾回收的分代回收是什么意思?
- 垃圾回收,每次都要扫描一次,
- 每次扫描,我都理解为老师检测作业一次。
- 如果,有5个学生,每次都按时交作业,我就可以降低这5个同学的检测频率。
- 比如原来全班同学60人。每天检测一次,每次检测作业都是,全部同学都检测一遍。
- 当发现有5个同学,每次都交作业,完成的很好。老师可以把这5个同学的检测频率降低,改为这5个同学,每周检测一次。
- 当这5个同学,有2个,每次都完成的更好,我就改为每个月检测一次。
- 这里面的思想,就是分代回收。
- (扩展)更专业的说法是,分为新生代和老生代,假设新生代活过了5轮,就晋升为老生代。老生代,每个月检测一次。新生代,每天检测一次。
- (详见垃圾回收-egon)
14.标记清除是什么?
- 解决循环引用导致的内存泄露?
15.Python设计理念是什么?
- Python的设计理念,是极致的简单。有可能推动全民编程的一门语言。
- 不涉及计算机硬件的知识。去掉了指针的概念。(指针是为了操作内存地址)
16.Python的常量是什么?
- Python没有常量的关键词,一般约定俗成 大写为常量。
- 例如 :AGE = 18
17.变量值的类型为什么有多种多样?
- 变量值是记录事物的状态的,而事物的状态是多种多样的。
- 比如,记录一个人的数据,有名字,年龄,薪资,爱好等等。
- 如果只用整型去记录,那么名字只能叫123,年龄456,薪资3,爱好 789。这样就记录就不好理解。
- 所有,我们用不同的类型去记录。比如,名字用字符串,年龄用整型,薪资用浮点型,爱好用列表,...
18.详细介绍list列表类型?
- list可以存放多个值,可以根据索引取值。
- 当我们需要按照索引取值的话,比如,一年的薪资,取第1个月的薪资,取第5个月的薪资。等等
- 数据存不是目的,方便取是目的。
19.既然有存取多种数据的类型,是列表,为什么还要有字典?
- 列表一般用来存放,同种属性,比较方便。
- 字典用来存放,不同属性的,比较方便。
- 比如:存放一个人的状态。用字典比较好。
-
上面这个例子,记录个人信息的时候,选择字典dict就很好,它保留了个人信息不同维度的信息。
- 而采用列表list存储就会造成维度信息丢失。
- 我的理解:
- 列表在存放数据的时候,每一个子元素,一般包含的信息是,只有2项。1项是,位置,另1项是事物的信息。
- 字典在存放数据的时候,每一个子元素,一般包含的信息是,也是2项。1项是,属性,另1项是事物的信息。
- 也就是对于这项信息,我们是否需要包含属性,or,维度 or 状态 ,如果需要就用字典,如果不需要就用列表。
- 字典比列表多了一个描述信息,这个对信息的一个描述,对变量值的一个描述,对liqi是name的一个描述。
20.数据选择什么类型来实现?
- 数据一定要考虑如何取出来,存不是目的,取才是目的。
- 所以,数据类型一定要考虑,将来如何把这个数据取出来,取出来是否方便?
21.运行符中/和//有什么区别?
- 1个/ 表示除法
- 2个//表示地板除,(只保留整数部分,不是四舍五入)
- 比如 10/3 = 3.333333 ;10//3 = 3
22.Python是一种强类型,动态,解释型语言是什么意思?
- 强类型,是指 字符串不能和数字进行运算。边界很严格。(shell是一种弱类型语言)
- 动态,是指,只有运行到这一行的时候,才能确定。
- 比如 python定义age = 18 , 而 go 语言定义是 var age int = 18
- 解释型,是指,每次运行都要翻译。
23.举一个例子,说明Python和shell的不同?
- 判断数字10和字符串10是否相等
- 在shell中是相等的,在python中是不相等的。
- shell中:
-
-
python :
-
24.Python中+可以用于字符串拼接吗?
- 可以。
- 但效率不够高。拼接"abc"+"def" 会开辟1个新的内存空间来存储新的字符串"abcdef"。
25.Python中拼接字符串有哪些方式?
26.Python中的错误分为几种?
- 两种。一种是语法错误,一种是逻辑错误。
- 语法错误,是在程序运行前,检查的。发现出错,整个文件都不能运行。比如【print( 】少了个右括号
- 逻辑错误,是在程序运行时,检查的。一旦发现某一行有错误,之前的可以执行,之后的不能执行。
- 写程序的时候,语法错误不能犯,(pycharm会提示你),逻辑错误尽量不犯,(不可能有完美的逻辑)
27.一句话总结运算符是什么?
- 操作数据的符合。(运算+-*/,比较<>!==,赋值=,成员in,身份is)参考egon
28.简化代码是不是一件好事?
- 不一定。
- 在不丧失代码的可读性的情况下,简化是一件好事。
29.等号=的左边是赋值,右边是取值?
- 对的。
- age = age + 1 ,左边的age是赋值,右边的age是取值。
30.解压赋值是什么意思?
- 利用 *
31.Python中_有什么特殊的含义吗?
- _这个符合一般代表,我们不想要的数据,存给_
- 比如
32. not,and,or优先级是?
- not > and > or
33.短路原则是什么?
-
# 短路原则 print(1 > 0 and 1 != 1 and print("我执行了吗?")) # 判断到1 != 1 就结束了。
34.隐式布尔值是什么意思?
- 当在变量单独的出现在判断条件中,比如下面这个:(也是常用的场景)
x = 123 if x: print("x为真,执行xxx")
- 这里面需要记住,大多值都代表真True
- 需要特殊记忆的,代表False的有
0 None 空
- 这里面【空】是指,空字符,空列表,空字典等等。