介绍

解释运行:Python是一种解释型的编程语言. 和C/C++不同, 不是先将源代码文件转化成可执行文件, 再执行; 而是直接由Python解释器一行一行的读取源代码, 每读一行就执行一行

跨平台:Python是基于Python的解释器来进行执行,只要某个操作系统/平台上能运行Python解释器, 就可以完美的运行Python的源代码

缺点:执行效率低

写代码:我使用的VSCode+Python插件(用VSCode写python的正确姿势)

快速入门

赋值:

counter = 0
miles = 1000.0
name = 'Bob'
kilometers = 1.609 * miles
n = 10
n *= 10
# Python中不支持 ++/-- 这样的操作, 只能写成
n += 1

动态类型:

a = 10
print(a)
a = 'hello'
print(a)

使用内建函数 type 可以查看变量的类型

a = 1
print(type(a))
a = 1.1
print(type(a))

Python中的数字变量的取值范围,没有限制(完全取决于你机器的内存多大),而不是像C语言中int用4个字节表示(32位机器)

a = 10000 * 10000 * 10000 * 10000 * 10000 * 10000
print(a)

Python中还有一种 “复数” 类型. 和数学中的 “复数” 是相同的概念

a = 10 + 5j
print(a)

Python中可以使用 单引号(’), 双引号("), 三引号(’’’/""") 来表示字符串

a = 'hello'
b = "hello"
c = '''hello'''
d = 'My name is "shen"'
e = '''I say "hello", you say 'hehe'.'''
print(d, e)

使用索引操作符 [] 或者切片操作符 [:] 来获取子字符串(切片操作是一个前闭后开区间)
字符串的索引规则是:第一个字符索引是0,最后一个字符索引是-1(可以理解成len-1)

a = "hello"
print(a[:])
print(a[0:])
print([:-1])
print(a[1:2])
print(a[0:-1])

+ 用于字符串连接运算,* 用于字符串重复

a = "hello"
b = "world"
print(a+b)
print(a*5)

Python没有 “字符类型” 这样的概念,单个字符也是字符串
用内建函数 len 获取字符串长度
格式化字符串,可以使用 % 这样的方式进行格式化的替换

a = "hello"
print(len(a))
a = 100
print('a = %d' % a)
print(f'a = {a}')  # 推荐使用

Python中用TrueFalse来表示布尔值
布尔类型的变量,也是一种特殊的整数类型,在和整数进行运算时,True被当做1,False被当做0

a = True
b = a + 1
print(b)

print函数将结果输出到标准输出(显示器)上,input函数从标准输入中获取用户输入
input返回的结果只是一个字符串,如果需要获得一个数字,需要使用int函数把字符串转换成数字

name = input('输入你的姓名:')
age = input('输入你的年龄:')
print(name, int(age)+1)

Python的源代码默认只支持ASCII, 所以如果要包含中文, 需要在代码文件最开头的地方注明

# -*- coding: UTF-8 -*-

/ 是 “精确除法”,// 是 “整除”,会对结果进行取整
** 表示乘方运算(记得Python的数据无上限)

print(1/2) # 0.5
print(1//2) # 0
print(5 ** 2)

Python中,3 < 4 < 5 等价于 3 < 4 and 4 < 5
使用 [] 来表示列表,使用 () 来表示元组
列表和元组唯一的区别是,列表中的元素可以修改,但是元组中的元素不能修改
可以使用下标来访问里面的元素,下标从0开始,最后一个下标为-1
可以使用[:]切片操作得到列表或元组的子集
列表和元组能保存任意数量,任意类型的Python对象

alist = [1, 2, 3, 4]
atuple = (1, 2, 3, 4)
print(alist, atuple)

字典是Python中的映射数据类型,存储键值对(key-value),使用 {} 表示字典

a = {
    'ip': '127.0.0.1',
    'port': '80'
}
print(a)

理解 “引用”(浅拷贝)

a = 100 	# 创建一个对象100,a是个标签,将a贴在100对象上
print(id(a)) 
a = 200 	# 创建一个对象200,将a标签重新贴在200对象上
print(id(a)) 
b = a 		# 一个新标签b,将b标签贴在200对象上(和a是同一个)
print(id(b)) 
b = 300 	# 创建一个对象300,将b标签重新贴在300对象上
print(id(b)) 
# 像创建的 a,b 这样的变量名,其实只是一个对象的别名,或者叫做变量的 "引用"

分支/循环语句

a = 10
if a == 10:
	print(a)
elif a == 20:
	print(a)
else:
	pass	# 空语句

while a > 0:
	print(a)
	a -= 1

a = 'hello'
for c in a:
	print(c)
# range函数其实有,前两个参数分别表示了一个前闭后开的区间,第三个参数表示step, 每次迭代的步长
for i in range(0, 10, 2):
	print(i)

列表解析

# 生成 [0, 4) 的数字的平方序列
squared = [x ** 2 for x in range(4)]
print(squared)
# 获取 [0, 8) 区间中的所有的奇数
evens = [x for x in range(0, 8) if x % 2 == 1] 
print(evens)

Python使用def来定义一个函数,使用return来返回结果
Python支持默认参数,函数的参数可以具备默认值
Python解包(unpack)语法,函数返回多个值

def add(x=0, y=0, z=0):
	return x + y + z
add(10,20) # x=10, y=20
add(x=10, z=20) # x=10, z=20

def GetPoint():
	return 100, 200

x, y = GetPoint()
_, y = GetPoint() # 不关注第一个返回值

文件操作

使用内建函数 open打开一个文件
handle是一个文件句柄, 是一个可迭代的对象. 可以直接使用for循环按行读取文件内容

handle = open(file_name, access_mode='r')
for line in handle: 
	print line
handle.close()

模块

当我们一个项目的代码量较大的时候,需要把代码放到多个不同的.py文件中
可以通过 import 关键字,引用其他.py文件中的代码
被引入的这个代码文件,就称之为 “模块”,去掉.py就是模块名

import sys 
print(sys.path) # 打印出了模块查找的路径