python基础语法
逆境前行,能帮你的只有自己
重点
1.计算机基础:
^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释:0011 0001
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1
2.原码、反码、补码
1.编程基础
1.1 计算机语言
人与计算机之间交互的语言
机器语言
一定位数组成二进制的0和1的序列,称为机器指令。机器指令的集合就是机器语言
与自然语言差异太大,难学、难懂、难写、难记、难查错
汇编语言
用一些助记符号替代机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中
汇编语言写好的程序需要汇编程序转换成机器指令
汇编语言只是稍微好记了些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言
1.2 语言分类
低级语言
面向机器的语言,分为机器语言和汇编语言
高级语言
接近自然语言和数学语言的计算机语言
高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序
1954年正式发布的Fortran语言是最早的高级语言,本意是公式翻译
人们只需要关心怎么书写源程序,针对不同机器的编译的事交给编译器关心处理
1.3 程序
程序是一个指令序列,算法+数据结构=程序
为了使计算机程序得以运行,计算机需要加载代码,同时也要加载数据。从计算机的底层来说,这是由高级语言(例如Java,C/C++,C#等)代码转译成机器语言而被CPU所理解,进行加载
1.4 写程序难点
理不清数据
搞不清处理方法
无法把数据设计转换成数据结构,无法把处理方法转换成算法
无法用设计范式来进行程序设计
世间程序皆有bug,但要会debug
2.python简介
2.1python解释器
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。
由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。
CPython
当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
3.python基础语法
注释
以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号“:”结尾时,缩进的语句视为代码块。
ln[1]:asxprint('hello world') #这是注释
# 整行都是注释 print('hello world2')
hello world
数字
分为整数、浮点数
整数:Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
浮点数:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
ln [1]:7e9
out[1]:7000000000.0
ln [1]:100
out[1]:100
ln [1]:0.99
out[1]:0.99
字符串
单双引号:字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。
三引号:'''和"""单双三引号,可以跨行、可以在其中自由的使用单双引号,在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理
ln [1]:print('hello world') hello world
ln [2]:print("hello python")hello python
ln [3]:print("'hello pythons'")'hello pythons'
ln [4]:print("""welcome to\ my\ blog""")welcome tomyblog
ln [5]:print(r"""welcome to\ my\ blog""")welcome to\my\blog
转义序列
\ \t \r \n ' "前缀r,把里面的所有字符当普通字符对待
缩进
约定使用4个空格缩进
续行
在行尾使用\,如果使用各种括号,认为括号内是一个整体,内部跨行不用\
标识符
1.一个名字,用来指代一个值
2.只能字母、下划线和数字
3.只能以字母或下划线开头
4.不能是python的关键字,例如def、class就不能作为标识
5. Python是大小写敏感的
约定:不允许使用中文
不允许使用歧义单词,例如class_在python中
不要随便使用下划线开头的标示符
python的语言类型
Python是动态语言、强类型语言
静态编译语言
实现声明变量类型,类型不能再改变;编译时检查
动态编译语言
不用事先声明类型,随时可以赋值为其他类型;编程时不知道是什么类型,很难推断
强类型语言
不同类型之间操作,必须先强制类型转换为同一类型。print('a'+1)
弱类型语言
不同类型间可以操作,自动隐式转换,JavaScript中console.log(1+'a')
python运算符
Python语言支持以下类型的运算符:
- 算术运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
- 运算符优先级
python算术运算符
ln [1]:1+1.496 #加法2.496
ln [2]:3-1.111 #减法1.889
ln [3]:3*7 #乘法21
ln [4]:8/3 #除法2.6666666666666665
ln [5]:8//3 #整除2
ln [6]:2**5 #乘方算法32
in [7]:567%10 #取余数7
python比较运算符
以下假设变量a为10,变量b为20:
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 - 比较对象是否相等 | (a == b) 返回 False。 |
!= | 不等于 - 比较两个对象是否不相等 | (a != b) 返回 true. |
<> | 不等于 - 比较两个对象是否不相等 | (a <> b) 返回 true。这个运算符类似 != 。 |
> | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
< | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。 | (a < b) 返回 true。 |
>= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
<= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 true。 |
以下实例演示了Python所有比较运算符的操作:
ln [1]:a = 21 b = 21
if a == b :
print ("a 等于 b")
else:
print ("a 不等于 b")
a 等于 b
ln [2]:a = 21 b = 10
if a != b :
print ("a 不等于 b")
else:
print ("a 等于 b")
a 不等于 b
ln [3]:a = 21 b = 21 if a >= b : print ("a >= b") else: print ("a < b")a >= b
python比较运算符
按位运算符是把数字看作二进制来进行计算的
二进制口诀:8421
十进制 | 十六进制 | 二进制 | Symbol | 十进制 | 十六进制 | 二进制 | Symbol | |
---|---|---|---|---|---|---|---|---|
0 | 00 | 0000 0000 | NUL | 64 | 40 | 0100 0000 | @ | |
1 | 01 | 0000 0001 | SOH | 65 | 41 | 0100 0001 | A | |
2 | 02 | 0000 0010 | STX | 66 | 42 | 0100 0010 | B | |
3 | 03 | 0000 0011 | ETX | 67 | 43 | 0100 0011 | C | |
4 | 04 | 0000 0100 | EOT | 68 | 44 | 0100 0100 | D | |
5 | 05 | 0000 0101 | ENQ | 69 | 45 | 0100 0101 | E | |
6 | 06 | 0000 0110 | ACK | 70 | 46 | 0100 0110 | F | |
7 | 07 | 0000 0111 | BEL | 71 | 47 | 0100 0111 | G | |
8 | 08 | 0000 1000 | BS | 72 | 48 | 0100 1000 | H | |
9 | 09 | 0000 1001 | TAB | 73 | 49 | 0100 1001 | I | |
10 | 0A | 0000 1010 | LF | 74 | 4A | 0100 1010 | J | |
11 | 0B | 0000 1011 | VT | 75 | 4B | 0100 1011 | K | |
12 | 0C | 0000 1100 | FF | 76 | 4C | 0100 1100 | L | |
13 | 0D | 0000 1101 | CR | 77 | 4D | 0100 1101 | M | |
14 | 0E | 0000 1110 | SO | 78 | 4E | 0100 1110 | N | |
15 | 0F | 0000 1111 | Sl | 79 | 4F | 0100 1111 | O | |
16 | 10 | 0001 0000 | DLE | 80 | 50 | 0101 0000 | P | |
17 | 11 | 0001 0001 | DC1 | 81 | 51 | 0101 0001 | Q | |
18 | 12 | 0001 0010 | DC2 | 82 | 52 | 0101 0010 | R | |
19 | 13 | 0001 0011 | DC3 | 83 | 53 | 0101 0011 | S | |
20 | 14 | 0001 0100 | DC4 | 84 | 54 | 0101 0100 | T | |
21 | 15 | 0001 0101 | NAK | 85 | 55 | 0101 0101 | U | |
22 | 16 | 0001 0110 | SYN | 86 | 56 | 0101 0110 | V | |
23 | 17 | 0001 0111 | ETB | 87 | 57 | 0101 0111 | W | |
24 | 18 | 0001 1000 | CAN | 88 | 58 | 0101 1000 | X | |
25 | 19 | 0001 1001 | EM | 89 | 59 | 0101 1001 | Y | |
26 | 1A | 0001 1010 | SUB | 90 | 5A | 0101 1010 | Z | |
27 | 1B | 0001 1011 | ESC | 91 | 5B | 0101 1011 | [ | |
28 | 1C | 0001 1100 | FS | 92 | 5C | 0101 1100 | / | |
29 | 1D | 0001 1101 | GS | 93 | 5D | 0101 1101 | ] | |
30 | 1E | 0001 1110 | RS | 94 | 5E | 0101 1110 | ^ | |
31 | 1F | 0001 1111 | US | 95 | 5F | 0101 1111 | _ | |
32 | 20 | 0010 0000 | (space) | 96 | 60 | 0110 0000 | ` | |
33 | 21 | 0010 0001 | ! | 97 | 61 | 0110 0001 | a | |
34 | 22 | 0010 0010 | " | 98 | 62 | 0110 0010 | b | |
35 | 23 | 0010 0011 | # | 99 | 63 | 0110 0011 | c | |
36 | 24 | 0010 0100 | $ | 100 | 64 | 0110 0100 | d | |
37 | 25 | 0010 0101 | % | 101 | 65 | 0110 0101 | e | |
38 | 26 | 0010 0110 | & | 102 | 66 | 0110 0110 | f | |
39 | 27 | 0010 0111 | ` | 103 | 67 | 0110 0111 | g | |
40 | 28 | 0010 1000 | ( | 104 | 68 | 0110 1000 | h | |
41 | 29 | 0010 1001 | ) | 105 | 69 | 0110 1001 | i | |
42 | 2A | 0010 1010 | * | 106 | 6A | 0110 1010 | j | |
43 | 2B | 0010 1011 | + | 107 | 6B | 0110 1011 | k | |
44 | 2C | 0010 1100 | , | 108 | 6C | 0110 1100 | l | |
45 | 2D | 0010 1101 | - | 109 | 6D | 0110 1101 | m | |
46 | 2E | 0010 1110 | . | 110 | 6E | 0110 1110 | n | |
47 | 2F | 0010 1111 | / | 111 | 6F | 0110 1111 | o | |
48 | 30 | 0011 0000 | 0 | 112 | 70 | 0111 0000 | p | |
49 | 31 | 0011 0001 | 1 | 113 | 71 | 0111 0001 | q | |
50 | 32 | 0011 0010 | 2 | 114 | 72 | 0111 0010 | r | |
51 | 33 | 0011 0011 | 3 | 115 | 73 | 0111 0011 | s | |
52 | 34 | 0011 0100 | 4 | 116 | 74 | 0111 0100 | t | |
53 | 35 | 0011 0101 | 5 | 117 | 75 | 0111 0101 | u | |
54 | 36 | 0011 0110 | 6 | 118 | 76 | 0111 0110 | v | |
55 | 37 | 0011 0111 | 7 | 119 | 77 | 0111 0111 | w | |
56 | 38 | 0011 1000 | 8 | 120 | 78 | 0111 1000 | x | |
57 | 39 | 0011 1001 | 9 | 121 | 79 | 0111 1001 | y | |
58 | 3A | 0011 1010 | : | 122 | 7A | 0111 1010 | z | |
59 | 3B | 0011 1011 | ; | 123 | 7B | 0111 1011 | { | |
60 | 3C | 0011 1100 | < | 124 | 7C | 0111 1100 | ||
61 | 3D | 0011 1101 | = | 125 | 7D | 0111 1101 | } | |
62 | 3E | 0011 1110 | > | 126 | 7E | 0111 1110 | ~ | |
63 | 3F | 0011 1111 | ? | 127 | 7F | 0111 1111 |
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释:0000 1100 |
按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a| b) 输出结果 61 ,二进制解释:0011 1101 | |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释:0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释:1100 0011, 在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释:1111 0000 |
>> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释:0000 1111 |
a = 21
a=60 #60=0011 1100
b=13 #13=0000 1101
c=a & b; #计算 & 运算符
print(c)
12
a=60 #60=0011 1100
b=13 #13=0000 1101
c=a | b; #计算 | 运算符
print(c)
61
a=60 #60=0011 1100
b=13 #13=0000 1101
c=a ^ b; #计算 ^ 运算符
异或运算符:当两对应的二进位相异时,结果为1
print(c)
49
按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1
~13 # 13=0000 1101
-14
4>>2 # 4= 0000 01001
python运算符优先级
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 'AND' |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
原码、反码与补码
计算机中数据是怎么放到内存中的?
原码、反码、补码;负数表示法(***)
计算机中正数的补码、反码、原码都是一样的;负数补码的补码就是原码;
机器码:
补码是留给计算机放在内存中自己玩的,你要用,计算机会先转换为原码,原码更贴近于人;
1000 0000 (-1) #负数最高位1
0000 1100 #12
1111 0011 #结果取反 补码 1 负数
1000 1101 #符号位不变(-1),按照位置取反后加1 -13
表达式Expression
由数字、符号、括号、变量组成
分为算术表达式,逻辑表达式,赋值表达式
Python中,赋值即是定义(非常重要)