语言语义
缩进,而不是大括号
Python使用缩进来组织代码,这点和其他很多编程语言不同。如果一个Python表达式以冒号结尾,表示一个代码块的开始,那么在这个表达式后面的表达式都需要保持相同的缩进,如果表达式没有缩进,就认为代码块在这句表达式之前结束。
要注意的是,这里的所进,都是以代码块开始的表达式为准,如果开始表达式本身前面包含4个空格,则后面代码块要在4个空格的基础上进行缩进,缩进长度不作限制,一般约定俗称的缩进是4个空格或者一个tab。
一切皆为对象
Python语言的一个重要特性就是对象模型的一致性,所有存在于Python解释器中的事物,都是Python对象,每个对象都属于某一类型,都具有某些特定的操作。
注释
所有写在#后面的都会被解释器忽略,这些语句仅提供给程序员来理解代码。多行注释则包含在三对引号内,单双引号都可以。
# 单行注释
'''
多行注释
'''
函数和对象方法的调用
根据函数定义的不同,调用函数的时候,需要向函数传递0个或多个参数,有返回值的函数则可以复制给对应的变量。
变量和参数传递
当把一个变量赋给另一个变量的时候,在Python中,这样的操作实际上是给原来的值添加了一个新的引用,即这两个变量都指向同一个值,通过一个引用去改变值的时候,两个引用都会更新值。
如果把变量当做参数传递给一个函数,同样的函数拿到的也是这个值的引用,通过这个引用对值进行更改的时候,从函数外通过引用访问到的值也会被改变。
a = [1, 2, 3]
b = a
a.append(4)
print(b) # [1, 2, 3, 4]
动态引用、强类型
编程语言中按照类型的不同,可以分成强类型和弱类型两种。强类型在定义的时候需要指名变量类型,同时在进行操作时需要将类型对应。弱类型则会自己对类型进行判断和转化。Python在定义变量的时候采取弱类型的定义方式,但是在进行操作时,又会严格要求类型匹配,相对简化操作又保证数据安全。
属性和方法
每个对象都会有属性和方法,用来进行一系列属于这个对象的操作。
鸭子类型
这个说法源于“一个东西走起来像鸭子叫起来像鸭子,那它就是鸭子”。就是如果一个对象拥有某个类型的一些特征,我们就可以说它是属于这个类型的。
导入
Python本身自带了很多功能,但是这些功能都很基础,在某些实际应用场景中,可能会用到一些比较复杂的功能,同时开发者希望仅仅是使用别人已经写好的复杂功能,避免自己重新实现一遍浪费时间,这就需要用到Python中的导入功能。通过导入已经写好的发布出来的模块,调用其中的方法,可以快速的开展工作。
同样的,可以自己编写自己所需要的特定模块来把功能模块化,方便以后使用。
import os
二元操作符
操作符 | 描述 |
---|---|
a + b | a加b |
a - b | a减b |
a * b | a乘b |
a / b | a除以b |
a // b | a整除以b |
a ** b | a的b次方 |
a & b | a与b |
a | b | a或b |
a ^ b | a异或b |
a == b | a和b相等则为True |
a != b | a和b不相等则为False |
a <= b, a < b | 小于等于,小于 |
a > b, a >= b | 大于,大于等于 |
a is b | a和b是同一个Python对象则为True |
a is not b | a和b不是同一个Python对象则为True |
可变对象和不可变对象
Python中大部分都是可变对象,少数例如字符串、元组是不可变对象。需要注意的事可变不代表需要改变,相反大多数时候需要控制改变变量的值。
标量类型
类型 | 描述 |
---|---|
None | Python的null值 |
str | 字符串类型,包含Unicode(UTF-8编码)字符串 |
bytes | 原生ASCII字节(或者Unicode编码字节) |
float | 双精度64位浮点数值 |
bool | True或False |
int | 任意精度无符号整数 |
数值类型
int和float,包含整数和小数,基本没有范围,小数可以用科学计数法表示。
a = 1
b = 1.1
c = 1.1e-1
字符串
用双引号或者单引号包起来的部分即为字符串,这样的字符串输出的话会发现都是在一行上的,哪怕通过一些方法在编程的时候跨行了,要得到多行字符串,要使用三个相同的引号(当然这样本质上也是单行字符串,只不过包含了一些换行符)。
字符串本身是不可变的,可以通过自带的方法进行一系列操作,
很多Python对象都可以转成str类型。
字符串类型可以看做是一个数组,所以数组的操作,大部分也可以用在字符串上。
在字符串中通过反斜杠(\)可以添加一些特殊符号,这就使得如果需要在字符串中添加反斜杠这个符号的话就需要两个连续的反斜杠,在某些情况下会使得字符串看上去不好看,可以通过在引号前面添加r来简化双反斜杠。
字符串可以创建指定格式,用来规范字符串的形式,也可以用来拼接特定格式的字符串。
a = 'asd'
b = '''asd
jkl'''
c = str(2.1)
d = 'asd\tjkl'
e = 'e:\\dir\\of\\file'
f = r'e:\dir\of\file'
g = 'name: {0}, age: {1}, height: {2:.2f}cm'.format('名字', 23, 185.00)
print(g) # name: 名字, age: 23, height: 185.00cm
*字节与Unicode
字符在计算机中以字节编码的形式存储,可以通过encode和decode根据指定编码格式转换字符串对象和字节对象,字节对象和字符串最明显的区别在于字节对象前面会有b。
布尔值
只有真假两种值,True和False,用来控制程序流程,可以用and和or进行组合。
类型转换
None
空,表示某一对象本身不代表任何东西,一般用在判断或者函数参数默认值。
日期和时间
Python内建datetime模块,提供日期、时间类型,可以用分别指定年月日时分秒的方式指定日期和时间,同时支持自定义格式化转化成字符串,以及加减运算。
控制流
if、elif和else
经典的控制流语句,用来根据条件判断程序应该执行哪条语句,从而实现特定的功能。其中if必须要有,且后面跟判断条件,elif可以有零个或者多个,后面也需要跟条件,else只能有一个且必须放在if控制块的最后,后面不能跟条件。
if condition1:
case1
elif condition2:
case2
else:
case3
for循环
用于遍历集合或者迭代器,表示重复执行相同的操作。中途可以通过continue或者break进行跳转,continue会跳过接下来的语句直接进行下一次循环,break会直接跳出整个循环。
for i in range(100):
print("str")
while循环
通过判定条件来决定是否继续下一次循环,也可以使用continue和break进行跳转。
while i < 100:
print("str")
i += 1
pass
什么都不做,用来占位,比如有些条件下不执行任何操作,或者还没想好如何实现,先用pass占位。
range
返回一个迭代器,可以规定开始、结尾以及步长,返回的迭代器中包含开始不包含结尾。
三元表达式
本质是讲一个简单if-else语句块压缩到一行的形式,即if-else控制块的操作仅仅是根据条件给某一个变量进行赋值,那么就可以改写成三元表达式的形式。
a = 'a' if condition1 else 'b'