Python基础
编程语言主要从以下几个⻆度分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言。Python是一门解释型的动态语言。
静态编译型语言需要实现声明变量类型,类型不能再改变。编译时检查。而动态编译型语言不需要事先声明类型,随时可以赋值为其他类型。
强类型语言是不同类型之间操作, 必须先强制类型转换为同一类型。比如print("a"+1)
而弱类型语言不同类型之间是可以操作的,它会自动隐式转换。比如Javascrpt中console.log(1+"a")
变量——标识符命名规则
变量标识符的命名规则如下:
- 由数字,下划线,英文字母组成。
- 区分大小写
- 开头只能是英文和下划线,最好不要使用下划线开头。
- 不能使用Python中的关键字。
- python是大小写敏感的。
同时,python还有约定,不允许使用中文,不允许使用歧义单词,比如class-,在python中不要随便使用下划线开头的标识符。
应该注意的是,在python中不存在绝对的常量. 约定俗成, 所有字母大写就是常量
例如: PI = 3.141592653
BIRTH_OF_SYLAR = 1990
注释
单行注释: # 被注释的内容
多行注释:''' 被注释的内容 ''', """这个是多行注释"""
数据类型
Python中数据类型分为数字类型,bool类型,字符串类型。值得注意的是在int类型不区分long类型,它可以表示任意数字,只要内存放得下。
同时在Python中,字符串前面加上r或R,表示这个字符串不做任何处理。前缀r,把里面的所有字符当普通字符对待。同时应该注意,不是所有的小数都能用浮点数来表示,比如无限循环的小数。
字符串是使用 ' " 单双引号引用的字符的序列,'''和""" 单双三引号,可以跨行、可以在其中自由的使用单双引号。
转义序列:\\ \t \r \n \' \" ,前缀r,把里面的所有字符当普通字符对待。
续行:在行尾使用 \ ,如果使用各种括号,认为括号内是一个整体,内部跨行不用 \ 。
同时应该注意,回车换行符是否换行要看编辑器。
a = r"wo\\n" print(a) 结果为: wo\\n
运算符
算术运算符,+,-,*,/,%,//,**。自然除/结果是浮点数,而整除是//。
位运算符——& | ~ ^ << >>
a = 0011 1100 b = 0000 1101 ----------------- a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
常用方式:乘除2的倍数,32 // 4相当于 32 >> 2 ,在Python中效率差不多,因为解释器会优化。
“反码”,“取反”,“按位取反(~)”
取反:0变1,1变0
反码:正数的反码是其本身,对于负数其符号位不变其它各位取反(0变1,1变0)。
假设要对正数9按位取反——> (~9),计算步骤如下,
原码为 0000 1001,
反码为 0000 1001,
补码为 0000 1001,
对其取反 1111 0110(符号位一起进行取反,这不是反码更加不是最终结果,只是补码的取反仅此而已)
我们还需要把他转换成原码,因为是负数所以进行负数补码到原码的逆运算
先减1得反码: 1111 0101
取反得原码:1111 1010,(反码和原码是一个相对的概念,对反码取反就是原码。取反过程符号位是不变的哦)
前面4个1是符号位,1是负数,既得十进制:-10
不知道说的明不明白,这里步骤就是:
1. 先对正数求补码
2. 然后对补码取反,包括符号位
3. 最后进行一个补码求原码的过程,一定要搞清概念啊。
下面我们再反推计算 (~ -10)
-10的原码:1111 1010
-10的反码:1111 0101 (符号位不变)
-10的补码:1111 0110 (符号位不变,末位+1)
补码取反:0000 1001 (符号位一起取反)
这是一个正数,那么我们对其求原码就可得到最终结果?
因为正数的补码,反码,原码都是一样的 那我们的最终结果是 0000 1001 ,十进制是 9,这与我们前面推算出的结果吻合。
原码、反码、补码,负数表示法
正数的反码与原码相同;负数的反码符号位不变其余按位取反,正数的补码与原码相同;负数的补码符号位不变其余按位取反后+1 。
所有正整数的按位取反是其本身+1的负数
所有负整数的按位取反是其本身+1的绝对值
零的按位取反是 -1
负数表示法 :数字电路的CPU中的运算器实现了加法器,但是没有减法器,减法是转换成加法 ,负数在计算机中使用补码存储,-1的补码为1111 1111 。5-1 => 5+(-1)直觉上是0b101-0b1,其实计算机中是0b101+0b11111111,溢出位舍弃。
~12 结果为-13 10^9 结果为: 3 10^-9 结果为: -3
逻辑运算符
== != > < >= <=
逻辑运算符返回一个bool值。
4>3>2 结果为: True 4>3>5 结果为: False
逻辑运算符
and or not(and or not同时存在. 先算括号, 然后算not, 然后算and , 最后算or)
要注意的是逻辑运算符这两种情况:
and 如果第一个表达式为False,后面就没有必要计算了,这个逻辑表达式一定是False
or 如果第一个表达式True,后面没有必要计算了,这个逻辑表达式一定是True
赋值运算符
+= -= *= /= %=
运算符优先级
算数运算符 > 位运算符> 身份运算符(is is not) > 成员运算符(in,not in) > 逻辑运算符 。
表达式
表达式由数字、符号、括号、变量等的组合。Python中,赋值即定义,如果一个变量已经定义,赋值相当于重新定义
在Python中,变量无须事先声明,也不需要指定类型(动态语言的特性) ,编程中一般无须关心变量的存亡,也不用关心内存的管理,垃圾回收机制会自己规整剩余内存空间。
python使用引用计数记录所有对象的引用数
- p 当对象引用数变为0,它就可以被垃圾回收GC
- p 计数增加:赋值给其它变量就增加引用计数,例如x=3;y=x
- p 计数减少:
- 函数运行结束时,局部变量就会被自动销毁,对象引用计数减少
- 变量被赋值给其它对象。例如x=3;y=x;x=4