1 起步
以下内容基于Python 3.6.6版本编写!
1.1 注释
和大多数语言一样,在Python中#
表示注释的意思:
print("Hello World!")#输出Hello World!
[Out]:Hello World!
通过上面示例可以看到
#
后面的字变成了斜体,这这些斜体的字就是我们的注释文本了。#
后面的内容都会被Python解释器忽略。
1.2 数字
Python中支持整数、浮点数、复数。
type(1) #整型
[Out]:int
type(1.1) #浮点型
[Out]:float
type(1+2j) #复数
[Out]:complex
上面使用type询问数据是什么类型。
注:Python是动态强类型语言,所以无法初始时定义类型。
1.3 字符串
Python中可以使用'
单引号、"
双引号、'''
三引号来表示字符串。
"This is a string."
'This is also a string.'
'I told my friend, "Python is my favorite language!"'
"""select from usr where name = 'Tom'"""
注:若是在字符串前面加上
r
或R
前缀,表示该字符串不做特殊处理。3.6版本开始,新增f
前缀,格式字符串:f'{s1}'
输出的是变量s1里的东西而不是字符s1。
1.4 转义序列
Python中有 \t
\r
\n
\\
\'
\"
常用转义序列。
\t
:转义成一个Tab键\r
:转义成一个Enter键\n
:转义成换行\\
:转义显示\
符号\'
:转义显示'
符号\"
:转义显示"
符号
print("a\\b")
[Out]:a\b
print("a\tb")
[Out]:a b
print("a\nb")
[Out]:
a
b
上面列出了一些转义序列的示例。
1.5 缩进
Python根据缩进来判断代码行与前一个代码行的关系。Python通过使用缩进让代码更易读,简单地说,它要求你使用缩进让代码整洁而结构清晰。
for i in range(3):
print(i)
注:显示消息的print代码行是for循环的一部分,因为它缩进了。在Python中使用过缩进来解释程序的,所以缩进在Python中尤为重要!在较长的Python程序中,你将看到缩进程度各不相同的代码块,这让你对程序的组织结构有大致的认识。
1.6 续行
在Python中可能遇到一行写不完代码或为了使结构清晰在代码未写完时需要换行写的情况,这就需要续行。
s1 = "You cannot improve your past, but you can improve\
your future. Once time is wasted, life is wasted."
print(s1)
[Out]:"You cannot improve your past, but you can improveyour future. Once time is wasted, life is wasted."
上面使用了
\
来续行,输出的是完整的一段话。
注:如果是在各种括号里面,内部是不需要续行的,认为括号内是一个整体。
1.7 标识符
标识符是指我们用自定义的名字来代表一个或一组值,就比如上面的例子中定义的是s1
就是标识符,它指代的是后面的字符串。当然和其他语言一样,定义的时候要遵循它的规则,否则会报错。规则如下:
- 开头只能以字母或下划线
- 除开头只能是字母、下划线和数字
- 不能是Python的关键字,例如
def
、class
就不能作为标识符 - Python是大小写敏感的,避免使用大写开头!
上面是基本规定,但为了避免和内部代码定义的名字相同出现误读,请尽量不要使用下划线开头作为标识符。
1.8 常量和变量
在了解变量前我们先来了解什么是常量,如果你有C语言基础,那么你需要注意Python中的“常量”和C语言的区别。
常量:在Python中表示一旦复制就不能改变值的标识符,由于Python是动态类型语言,所以Python中无法定义常量。
字面常量:一个单独的量,比如12
"abc"
'123.03e-9'
。
变量:通常指赋值后可以改变值得标识符。
Number = 1
print(Number)
Number = 2
print(Number)
[Out]:
1
2
上面示例中标识符
Number
可以在第二次赋值时改变,所以是变量。
1.9 动态强类型
Python是属于动态强类型语言,是和C语言有区别的。这里详细解释下语言类型的定义,以便于你区别它们之间的不同。
- 静态编译语言:实现声明变量类型,类型不能再改变,编译时检查。
- 动态编译语言:不用事先声明类型,随时可以复制成为其他类型,编程时它不知道是什么类型,执行时才能确定。
- 强类型语言:不同类型之间操作,必须先强制类型转换为同一类型。
- 弱类型语言:不同类型间可以操作,自动隐式转换。
通过上面解释就可以知道什么是动态强类型语言啦!那么C语言有属于哪一种呢?C语言可以算是静态弱类型。
2 学会运算符
2.1 运算符
算术运算符包括:
+
:表示加运算。-
:表示减运算。*
:表示乘运算。/
:表示除运算。%
:表示取余(模)运算。**
:表示幂运算。
1/2
[Out]:0.5
1//2
[Out]:
0
上面例子需要注意自然除
/
结果是浮点数,整除是//
。注:2.x版本中/
和//
都是整除。
2.2 位运算符
位运算符包括:
&
:表示位与运算。|
:表示位或运算。~
:表示位取反运算。^
:表示位异或运算。<<
:表示位左移运算。>>
:表示位右移运算。
~60 # 60取反 60 = 0011 1100
[Out]:-61 #-61(补码) = 1100 0011
#61(原码) = 1011 1101
注意:位操作在计算机中是以二进制补码形式做的,然后才转换成原码显示。注意原码、反码、补码的区别,负数时的情况,这里不做细述。
2.3 比较运算符
比较运算符包括:
==
:是否等于。!=
:是否不等于。>
:是否大于。<
:是否小于。>=
:是否大于等于。<=
:是否小于等于。
1!=2
[Out]:True
1 >= '1'
[Out]: '>=' not supported between instances of 'int' and 'str'
1 == '1'
[Out]:False
所有比较返回的都是Bool值。
注意:只有同类型的数据才能比较大小和等于、不等于,Python是强类型语言,不同类型一般不能比较大小,想要比较需要强制类型转换,但是可以判断等于、不等于。
1 < 2 > 4
[Out]:False
注意:比较可以连续进行,但要记住是从右至左开始。对此不熟悉的不建议这么写。
2.4 逻辑运算符
逻辑运算符包括:
and
:逻辑与。or
:逻辑或。not
:逻辑非。
它们还是短路运算符:在表达式两边都是布尔型变量时,and前面表达式为False后面不计算,整体必为Flase。or前面表达式为True后面不计算整体必为True。
c > 5 and 1+2
[Out]:3
and:如果a为真,继续计算b,结果为b的值。
如果a为假,不需要计算b,结果为a的值。
or: 如果a为真,无需计算b,结果为a的值。
如果a为假,继续计算b,结果为b的值。
not:只有两个返回值,True和False。
2.5 赋值运算符
赋值运算符主要是 =
号,它是给各种变量赋值的运算符,不是数学意义上的等于。
a = 2
print(a)
[Out]:2
b = 1
b += 2 # b = b + 2
print(b)
[Out]:3
上面第一个例子是给变量a赋值,print一下显示2。
第二个例子是使用了复合赋值的方式,表示#b = b + 2
的意思。
常用的复合表达式:+=
-=
*=
/=
%=
这些基本上都是和算数运算符的结合,相当于简化了算式的写法。
2.6 成员运算符
成员运算符:
in
:如果在指定的序列中找到值返回True,否则返回 False。not in
:如果在指定的序列中没有找到值返回True,否则返回False。
a = 1
list1 = [1,2,3 ]
a in list1
[Out]:True
上面例子判断变量a的值是否是列表list1的成员,成功返回True。
2.6 身份运算符
身份运算符:
is
:判断两个标识符是否引用自一个对象。is not
:判断两个标识符是否引用自不同对象。
b = a = 1
a is b
[Out]:True
上例用1赋值给a和b,所以它们引用的视同一个对象。
is 与 == 区别:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
2.7 运算符优先级
简单排序就是:
- 算术运算符 > 位运算符 > 身份运算符 > 成员运算符 > 逻辑运算符。
- 详细排序(优先级由高到低):
运算符 | 描述 |
---|---|
‘expression,…’ | 字符串转换 |
{key:datum,…} | 字典 |
[expression,…] | 列表 |
(experession,…) | 元组 |
f(arguments…) | 函数调用 |
x[index:index] | 切片 |
x[index] | 下标索引取值 |
x.attribute | 属性引用 |
~x | 按位取反 |
+x,-x | 正,负 |
** | 幂 |
*,/,% | 乘、除、取余(模) |
+,- | 加、减 |
<<,>> | 移位 |
& | 按位与 |
^ | 按位异或 |
<,<=,>,>=,!=,== | 比较 |
is,is not | 等同测试 |
in,not in | 成员判断 |
not x | 逻辑“非” |
and | 逻辑“与” |
or | 逻辑“或” |
lambda | lambda匿名函数 |
记不住,用括号。长表达式,多用括号,易懂易读。
3 初学语句
3.1 表达式
表达式:是由数字、符号、括号、变量等的组合。
- 算数表达式
- 逻辑表达式
- 赋值表达式
Python中,赋值即定义!如果一个变量已经定义,赋值相当于重新定义。
3.2 内存管理
Python使用引用计数记录所有对象的引用数:
当对象引用数变为0,它就可以被垃圾回收GC。
计数增加:赋值给其它变量就会增加引用计数。
计数减少:函数运行结束时,局部变量就会被自动销毁,对象引用计数减少。
有关性能的时候,就需要考虑变量的引用问题,但是想释放内存时切忌三思,因为有些数据对企业非常重要!
3.3 程序控制
程序控制包括:顺序、分支、循环。
- 顺序:按照先后顺序一条条执行。
- 分支:根据不同的情况判断,条件满足执行某条件下的语句。
- 循环:条件满足就反复执行,不满足就不执行或不再执行。
3.4 单分支结构
if语句,格式如下:
if 表达式 :
代码块
if后面必须是一个bool类型,注意这个地方有一个隐式转换
bool(表达式结果)
。代码块就是一段语句块,由多个代码段组成。
第一次写请注意缩进不要弄错!这是隐含的规则,之后不再提示!
if 1 < 2 :
print("1 < 2")
[Out]:1 < 2
if 'a' :
print("a")
[Out]:a
上面字符a就是被转换成bool值True了。
隐式转换是根据真值表来做的,这里不详细列表,常用:所有空类型、0、None都是False,除此之外非零数都是True。注意负数也是True。
3.5 多分支结构
if…else…语句,格式如下:
if 表达式 :
代码块
else 表达式 :
代码块
除了上述表达式我们还可以添加多个
elif
组成多种情况。解释:elif
就是elseif的缩写。
a = 5
if a < 0 :
print("negative")
elif a == 0:
print("zero")
else :
print("positive")
[Out]:positive
上面示例使用了一个elif,规则是和if一样的。
3.5 分支嵌套
上面讲的if语句和if…else…语句中代码块部分也可以写这些语句,用以达到嵌套判断的目的。
#判断54321的位数
a = 54321
if a >= 1000 :
if a >= 10000 :
print("5位数")
else:
print("4位数")
else:
if a >= 100 :
print("3位数")
elif a >= 10 :
print("2位数")
else:
print("1位数")
[Out]:5位数
上面例子使用了多重嵌套。
3.6 循环
循环有两种语句,for循环和while循环。
- for循环用于针对集合中的每个元素都一个代码块,而while循环不断地运行,直到指定的条件不满足为止。
第一种while循环,其格式如下:
while 表达式:
代码块
和if语句一样,表达式含有隐式转换。
a = 1
while a <= 3:
print(a)
a += 1
[Out]:
1
2
3
上面例子使用while循环打印1~3的数字。
while循环侧重知道结束状态!
第二种for循环,其格式如下:
for 变量 in 可迭代对象:#range(start,stop,step)
代码块
for循环也可以喝C语言一样使用步长方式,Python使用range函数。
注意:当可迭代对象中有元素可以迭代,进入循环体,执行代码块。
for i in range(3):
print(i+1)
[Out]:
1
2
3
上面例子使用for循环打印13的数字。其中range函数是可迭代对象,它从依次输出02。
和C语言一样,我可以使用continue或break来终止本次循环或终止循环。
for i in range(3):
print(i+1)
break
[Out]:1
for i in range(3):
if i == 1:continue
print(i+1)
[Out]:
1
3
上面例子使用break时是终止循环,所以只输出一个1。使用continue时是终止本次循环,所以不输出2。
上面就是Python基础的东西啦,如果你已经看完了,那么你已经可以写一些简单的代码了~