Python基础

编程语言主要从以下几个⻆度分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言。Python是一门解释型的动态语言。

静态编译型语言需要实现声明变量类型,类型不能再改变。编译时检查。而动态编译型语言不需要事先声明类型,随时可以赋值为其他类型。

强类型语言是不同类型之间操作, 必须先强制类型转换为同一类型。比如print("a"+1)

而弱类型语言不同类型之间是可以操作的,它会自动隐式转换。比如Javascrpt中console.log(1+"a")

变量——标识符命名规则

变量标识符的命名规则如下:

  1. 由数字,下划线,英文字母组成。
  2. 区分大小写
  3. 开头只能是英文和下划线,最好不要使用下划线开头。
  4. 不能使用Python中的关键字。
  5. 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 
 
有关性能的时候,就需要考虑变量的引用问题,但是该释放内存,还是尽量不释放内存,这个需要看需求!
 

posted on 2019-09-10 14:51  xpc199151  阅读(135)  评论(0编辑  收藏  举报

导航