变量
int | 整数,默认4个字节,自动增长 |
float | 双精度浮点数,8个字节 |
bool | 布尔类型,True / False,1个字节 |
str | 字符串,单引号与双引号都可以表示,没有区别 |
type
可以打印变量类型。
print(type(1))
print(type(1.1))
print(type(True))
print(type('1' + "1"))
<class 'int'>
<class 'float'>
<class 'bool'>
<class 'str'>
len
可以打印字符串长度。
print(len("国家"))
2
动态变量
在Python中,变量不需要显示指定,而是在赋值的时候确定的。
在Python中,变量类型为动态类型,可以在程序运行过程中发生改变。
代码示例:
a = 1
print(type(a))
a = True
print(type(a))
<class 'int'>
<class 'bool'>
str常用api
# 翻转字符串,使用切割,拼接
s = 'I am a student'
l = s.split() # 返回列表
l.reverse()
sr = ' '.join(l) # 拼接字符串
print(sr) # student a am I
# 判断是否是子串
s = 'abcde'
print('bcd' in s) # True
print('bbc' in s) # False
# 判断是否是字符串前缀
s = 'abcde'
print(s.startswith('ab')) # True
print(s.startswith('ba')) # False
注释
行注释 | #开头 |
文档注释 | """ 或 ''' 三引号 |
类型转换
使用int(), float(), bool(), str() 函数返回对应类型的转换。
print(type(int("1")))
print(type(float("1.1")))
print(type(bool("True")))
print(type(str(123)))
<class 'int'>
<class 'float'>
<class 'bool'>
<class 'str'>
输入输出
Python中使用print函数输出到控制台
print("hello")
字符串和变量混合输入,使用格式化字符串f-string,使用{ }内嵌变量或表达式。
num = 3
print(f"a = {num}")
a = 3
Python中使用input函数从控制台读取输入。
input函数返回值为str,因此需要使用类型转换。
a = int(input("输入第一个整数"))
b = int(input("输入第二个整数"))
print(f"a + b = {a + b}")
输入第一个整数1
输入第二个整数2
a + b = 3
运算符
算术运算符
普通运算符 | + - * / % Python中%取余结果为绝对值,不会出现负数,与其他语言不用。 |
新增运算符 | ** 乘方 // 地板除法,使用向下取整 |
Python中的除法算出来是小数,而地板除法算出来是向下取整的整数。
print(3 ** 2)
print(4 ** 0.5)
print(3 / 2)
print(3 // 2)
print(-3 // 2)
9
2.0
1.5
1
-2
关系运算符
< <= > >= == !=,同其他语言一致。
Python在语法上支持连续比较。
print(1 < 2 < 3)
True
逻辑运算符
and or not,Python不支持&&,||,!,使用符号同其他语言不同,作用一致也是短路执行。
print(1 < 2 and 2 < 3) # 等价与1 < 2 < 3
print(1 < 2 or 2 > 3)
print(not 1 == 1)
# 这里是短路与,因此除0并不会执行
print(2 < 1 and 10 / 0 == 0)
True
True
False
False
赋值运算符
链式赋值
Python中支持连续赋值。
a = b = 1
多元赋值
a, b = 1, 2
print(f"a = {a},b = {b}")
# 交换变量
a, b = b, a
print(f"a = {a},b = {b}")
a = 1,b = 2
a = 2,b = 1
复合赋值
+= -= *= /= %= **= //=
Python中不支持 ++ -- 操作符,使用 +=1 -=1 代替。
条件语句
Python中条件语句中的代码块使用缩进(Tab)来表示,而不是{}。
a = int(input("请输入一个整数:"))
if a > 0:
print("正数")
elif a == 0:
print("0")
else:
print("负数")
Python条件语法不支持空行,因此空语句用pass表示。
if True:
pass
循环语句
while
# 打印 1-10
num = 1
while num <= 10:
print(num)
num += 1
for
# 打印 1-10
for i in range(1,11):
print(i)
range函数返回可迭代对象(内部包含多个元素依次取出来的特殊变量),区间范围前闭后开。
range函数第三个参数表示步长,默认为+1,如果倒着遍历,需要显示传-1.
for i in range(10,0,-1):
print(i)
continue、break
循环跳过、循环结束与其他语言一致。
while True:
a = int(input("请输入一个偶数: "))
if a % 2 == 0:
break
else:
continue
函数
语法
函数定义要写在调用之前,同C++一致。
Python中变量类型是动态类型,因此函数形参类型也是可变的。
def add(a, b):
return a + b
print(add(1, 2)) # 3
print(add(1.1, 2.2)) # 3.3
print(add("a", "b")) # ab
# 强制类型声明和返回值声明,只是形式上的声明,增强可读性,实际执行还是会自动推导
def add(a: int, b: int) -> int:
"""
two number execute add
:param a: int
:param b: int
:return: int
"""
return a + b
返回值
函数支持一次返回多个值,用 , 分割。
如果不需要部分返回值,可以使用 _ 忽略返回值。
def point():
x = 1
y = 2
return x, y
a, b = point() # 1 2
_, d = point() # 2
作用域
函数内部定义变量是局部性原则。如果要修改全局变量,需要使用global声明变量。
a = 1
b = 1
def update():
global a
a = 2
b = 2
update()
print(a, b) # 2 1
Python中 if / while / for 中定义变量都是全局变量,出了作用域还在,与其他语言不同。
if True:
a = 1
for b in range(1,3):
pass
while True:
c = 3
break
print(f"a = {a}, b = {b}, c = {c}") # a = 1, b = 2, c = 3
参数默认值
参数默认值同C++一致,要放在最后,不可以放在形参之前。
def execute(a, b, ret=True):
if ret:
return a
return b
print(execute(1,2)) # 1
关键字参数
同其他语言不用,例如C++,Java中只能是按顺序的位置参数。
而Python中可以显示指定实参传递给哪个形参。
def sub(a, b):
return a - b
print(sub(b = 2, a = 1)) # -1
也可以和参数默认值混合使用,但关键字参数要写在位置参数之后。
def calc(a, b, add=True, sub=False, multiply=False, divide=False):
if sub:
return a - b
elif multiply:
return a * b
elif divide:
return a / b
elif add:
return a + b
print(calc(1, 2, multiply=True)) # 2
列表list
语法
列表用 [] 或 list() 来创建,元素类型没有限制,可以存放不同类型。数据结构是顺序表。
index,pop,remove,a[0] 等操作使用前需要先判断,否则越界或不存在会报错。
# 创建列表
a = [1, 2, 3]
b = ['a', 1.1, True]
c = list()
print(a, b, c) # [1, 2, 3] ['a', 1.1, True] []
# 查询列表元素是否存在
print(1 in a) # True
print(100 not in a) # True
# 查询元素下标
print(a.index(1)) # 0
# 新增元素
a.append(4) # [1, 2, 3, 4]
a.insert(-1, 40) # [1, 2, 3, 40, 4]
# 删除元素
# pop按下标删除,不指定下标删除最后一个,remove从左开始删除第一个匹配元素
a.pop(2) # [1, 2, 40, 4]
a.remove(4) # [1, 2, 40]
a.pop() # [1, 2]
# 修改元素
a[0] = 10 # [10, 2]
# 拼接列表
b = ['a', True, 8.8]
# a += b 这种并不高效,需要开辟新的列表空间,再重新赋值
a.extend(b) # [10, 2, 'a', True, 8.8]
切片操作
边界范围为前闭后开,边界范围超出按已有元素输出,不会报错。
a = [1, 2, 3, 4]
print(a[0:4]) # [1, 2, 3, 4]
print(a[:4]) # [1, 2, 3, 4]
print(a[:]) # [1, 2, 3, 4]
# 在第二个冒号后面可以指定步长,符号控制方向
print(a[::2]) # [1, 3]
print(a[::-2]) # [4, 2]
遍历
列表本身就是一个可迭代对象,默认支持循环语法。
# 按元素遍历
for item in a:
print(item)
# 按下标遍历
for i in range(0,len(a)):
print(a[i])
元组tuple
元组用 () 或 tuple() 来创建,元素类型没有限制,可以存放不同类型。
元组一旦创建就不能修改元素,相当于常量列表,接口同列表一致,但相关修改方法都不能使用。
a = (1, 2, 3)
b = ('a', 1.1, True)
c = tuple()
print(a, b, c) # (1, 2, 3) ('a', 1.1, True) ()
元组可以省略括号,Python中函数返回多个参数就是元组。
a = 2
b = 3
c = 4
d = a, b, c
print(d) # (2, 3, 4)
集合set
集合是无序不重复的,数据结构是哈希表。
集合用 {} 或 set() 来创建。
语法
a = set()
# True就是1,如果 1 和 True同时出现,只会存在1
b = {1, 'a', 'b', True}
a.add(2)
a.add('b')
b.remove('a')
print(a, b) # {'b', 2} {1, 'b'}
字典dict
语法
字典是键值对结构,类似map,数据结构是哈希表。
字典用 {} 或 dict() 来创建,元素类型没有限制,可以存放不同类型。
如果key不存在,使用 [] 获取value,pop删除key都会报错,get获取value会返回None。
# 创建字典
a = {
"name": "jack",
1: True,
}
b = dict()
print(a, b) # {'name': 'jack', 1: True} {}
# 查找key
print(1 in a) # True
print(1.1 not in a) # True
# 新增key,key不存在是新增,存在则是修改
a["age"] = 20
a[1] = False
print(a) # {'name': 'jack', 1: False, 'age': 20}
# 获取value
# print(a[“usage”]) # 报错
print(a.get("usage")) # None
# 删除key
# a.pop("usage") # 报错
a.pop("age")
print(a) # {'name': 'jack', 1: False}
遍历
字典遍历同其他语言哈希表不同,字典经过特殊处理,遍历按照key插入顺序,而不是哈希值。
print(a.keys()) # dict_keys(['name', 1])
print(a.values()) # dict_values(['jack', False])
print(a.items()) # dict_items([('name', 'jack'), (1, False)])
# 遍历key
for key in a:
print(key)
# 遍历key与value
for key, value in a.items():
print(key, value)
合法key
字典中的key需要支持hash函数计算哈希值,列表和字典由于是可变的,所以不支持作为key。
文件操作
# 打开文件,第一个参数是文件路径
# 第二个参数表示打开方式. r 只读,w 只写,a 追加
f = open("test.txt", "r", encoding="utf-8")
# 读文件
print(f.readline()) # hello\n
print(f.readlines()) # ['hello\n', 'world']
for line in f:
print(line, end='') # hello world
# 写文件
f1 = open("test1.txt", "w")
f1.write("abcd")
# 关闭文件
f.close()
f1.close()
上下文管理器
# with内部的代码块执行完毕,自动调用f.close关闭文件
def file_test():
with open("test.txt", "r") as f:
print(f.readlines())
file_test()
标准库
https://docs.python.org/3.10/library/index.htm
模块
语法
所谓 "模块" , 其实就是一个单独的 .py 文件.
使用 import 语句可以把这个外部的 .py 文件导入到当前 .py 文件中, 并执行其中的代码.
导入calc.py,代码示例:
import calc
print(calc.add(1, 2))
print(calc.sub(1, 2))
常用模块使用
随机数 random
# 生成随机数 1 - 3
r = random.randint(1, 3)
线程休眠 time
# 单位秒
time.sleep(1)
多线程 threading
from threading import Thread
def self_print(s):
for i in range(1, 10):
time.sleep(1)
print(s)
t = Thread(target=self_print, args=(1,))
t.start()
t.join()
日期 datetime
from datetime import datetime
d1 = datetime(2024, 3, 15)
d2 = datetime(2022, 1, 1)
print(d1 - d2) # 804 days, 0:00:00
文件查找 os
path = input("输入搜索路径")
pattern = input("输入关键字")
for dirpath, dirnames, filenames in os.walk(path):
print("-------------------------")
print(dirpath)
for dirname in dirnames:
print(dirname)
for filename in filenames:
print(filename)
第三方库
pip是Python内置的包管理器,Python官方提供了一个网站PyPI https://pypi.org/ 来收集第三方库。
pip install [库名]
二维码生成
pip install "qrcode[pil]"
b = qrcode.make("test")
b.save('test.png')
操作Excel
pip install xlrd==1.2.0
# 打开文件
xlsx = xlrd.open_workbook("test.xlsx")
# 获取标签页
for table in xlsx.sheets():
# 遍历数据
for row in range(1, table.nrows):
for column in range(0, table.ncols):
print(table.cell_value(row, column))
监听键盘
pip install pynput==1.6.8
from pynput import keyboard
def keyReleaseEvent(key):
print(key)
listener = keyboard.Listener(on_release=keyReleaseEvent)
listener.start()
listener.join()
listener.stop()
操作音频
pip install playsound==1.2.2
from playsound import playsound
playsound('1.mp3')