说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
作为近年来热门的编程语言,Python 用途广泛,特别是人工智能、大数据的发展更起到推波助澜的作用。Python 速查手册整理日常使用中常用的 python 语法、使用方便、库包等内容,方便在使用中快速查询。
除 Windows 外,一般的操作系统都默认内置了 Python,但版本一般都比较低。作为新的学习者一般到少使用 Python 3.6 及更新的版本(目前 3.8 正式版已发布)。
# 在下面的网址中下载 miniconda ,选择最近发布的最新的版本安装
# https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
# https://docs.conda.io/en/latest/miniconda.html
# 创建新环境,<环境名称>, python 版本
conda create -n py311 python=3.11
# 删除环境
conda remove -n py311 --all
# 进入、激活环境
conda activate py311
# 退出环境
conda deactivate
# 查看所有虚拟环境及当前环境
conda info -e
# 安装 Jupyter Lab
pip install jupyterlab -i https://pypi.tuna.tsinghua.edu.cn/simple
# 启动 Jupyter Lab, 在终端输入:
jupyter lab
IDE,代码编辑器可选择的比较多,一般可使用 Jupyter Notebook(推荐)、 Sublime Text、Visual Studio Code、PyCharm。
关于环境搭建,更加详细和内容可以访问:Python 安装及环境搭建 。
Python(发音:/ˈpaɪθən/ ),是一种广泛使用的高级编程语言,属于通用型编程语言,由吉多·范罗苏姆(Guido van Rossum,1956 - )创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的 LISP。
作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。
相比于 C++ 或 Java,Python 让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。
《蒙提·派森的飞行马戏团》(英语:Monty Python's Flying Circus),英国六人喜剧团体蒙提·派森的电视喜剧系列。
优点:
缺点:
打印输出对象的内容(字符串信息):
print('Hello world!') # 学习的第一行代码是向世界问好!
print(123)
print(8848, '新的高度。')
- 每条语句一行,加 \ 可认为同一行
- 井号可增加单行注释,三行引号可增加多行注释
- 代码块用缩进(一般四个空格)表示逻辑关系
类型 | 描述 | 示例 |
---|---|---|
字符串 str | 文本字符,空格也是一个字符 | 'Hello World!', '123', '' |
数字 number | 数字数据类型用于存储数值 | 1313,-323,0 |
布尔类型 boolean | 逻辑真假 | True, False |
列表 list | 一个列表的每个元素被分配一个数字来表示它的位置或索引 | [1, 2, 3, 4, 5 ], ['apple', 'orange', 'lemon', 'cherry'] |
元组 tupple | 可以简单地理解为“只读列表” | (1, 2, 3), ('physics', 'math', 1997, 2000) |
字典 dict | 每个键与其值使用一个冒号(:)分开,键-值对是使用逗号分隔 | {'Name': 'Maxsu', 'Age': 7, 'Class': 'First'} |
集合 set | 一组不重复key的集合,不存储value | set([1, 1, 2, 2, 3, 3]), {'5元', '10元', '20元'} |
a = 'Hello'
b = 'Python'
# 连接字符串
a + b # 'HelloPython'
# 重复字符
a * 3 # 'HelloHelloHello'
# 格式化字符串
f"Hello, my name is {name}, I'm {age}"
a.replace('a', 'A') # 字符替换
常用的有以下几种类型:
类型 | 描述 | 示例 |
---|---|---|
int | 有符号整数,它们通常被称为整数或整型。它们是没有小数点的0、正或负整数。 Python3 中的整数是无限大小的 | 2, -1, 0, 0×69 |
float | 浮点实数值,也称为浮点数,它们表示实数,并用小数点写整数和小数部分。 浮点数也可以是科学符号,E或e表示10的幂 | 0.00, 1.4, -23.22, -32.54e100 |
complex | 复数是以a + bJ的形式,其中a和b是浮点,J(或j)表示-1的平方根(虚数)。数字的实部是a,虚部是b。复数在Python编程中用处较少 | 3.14j, 9.322e-36j |
a = 10
b = 21
# 数值计算
a + b # 31
a - b # -11
a * b # 210
b / a # 2.1
a ** b # 表示 10 的 21 次幂
b % a # 1 (取余)
# 地板除 - 操作数的除法,其结果是删除小数点后的商数
# 但如果其中一个操作数为负数,则结果将被保留,即从零(向负无穷大)舍去
9//2 # 4
9.0//2.0 # 4.0
-11//3 # -4
-11.0//3 # -4.0
比较运算:
a = 10
b = 20
# 逻辑计算,得到逻辑值
(a == b) # False
(a != b) # True
(a > b) # False
(a < b) # True
(a >= b) # False
(a <= b) # True
身份运算:
# 类似 id(x) == id(y), 如果引用的是同一个对象则返回 True, 否则返回 False
x is y
# 类似 id(a) != id(b), 如果引用的不是同一个对象则返回结果 True, 否则返回 False
x is not y
切片访问(字符、列表、元组等):
var = 'Hello World!'
# 按索引取部分内容, 索引从0开始, 左必须小于右
# 支持字符、列表、元组
var[0] # 'H'
var[-1] # '!'
var[1:7] # 'ello W'(有个空格,不包含最后一位)
var[6:] # 'World!' (前后省略按开头结尾)
var[:] # 'Hello World!'(相当于复制)
var[0:5:2] # 'Hlo'(2为步长,2的倍数取)
var[1:7:3] # 'ello W‘ -> 'eo'
var[::-1] # !dlroW olleH 实现反转字符功能
操作计算(列表集合):
# 支持列表
alp = ['a', 'b', 'c']
alp2 = ['a', 'b', 'b', 'c']
# 追加一个元素
alp.append('d') # ['a', 'b', 'c', 'd']
# 追加一个列表
alp.extend(['x', 'y']) # ['a', 'b', 'c', 'x', 'y']
# 按位置索引修改元素
alp[0] = 'A' # ['A', 'b', 'c']
a.sort() # 排序
s.add(6) # 在集合中增加数据
# 删除元素(如有多个则只删除第一个)
alp2.remove('b') # ['a', 'b', 'c']
# 删除指定位置元素
del alp[1] # ['a', 'c']
# 删除最后一个元素
alp.pop() # ['a', 'b']
# 删除指定索引元素
alp.pop(1) # ['a', 'c']
# 联接列表成新列表
[1, 2, 3] + [4, 5, 6] # [1, 2, 3, 4, 5, 6]
# 重复列表内容组成新列表
['Hi!'] * 4 # ['Hi!', 'Hi!', 'Hi!', 'Hi!']
# 判断内容是否在列表中
3 in [1, 2, 3] # True
# 迭代元素, 返回: 1 2 3
for x in [1,2,3]:
print (x, end = ' ')
# 获取字符、列表等长度
len(alp) # 3
# 最大值, 最小用 min()
max([1, 2, 3]) # 3
# 返回列表中出现多少次元素的计数
alp2.count('b') # 2
# 反向排序
alp.reverse() # 反向排序方法,没有返回值
print(alp) # ['c', 'b', 'a']
# 在指定的索引前插入元素
alp.insert(0, 'd')
print(alp) # ['d', 'a', 'b', 'c']
# 分隔
'Hello world'.split('') # ['hello', 'world']
# 生成列表
[i for i in someList]
# 带条件生成列表
[x for x in someList if x>0]
# 集合操作
s1 & s2 # 集合交集
s1 | s2 # 集合并集
A.union(B) # 并集
A.intersection(B) # 交集
A.difference(B) # 差集
字典的操作:
# 基本定义
d = {'Name': 'Maxsu', 'Age': 7, 'Class': 'First'}
# 定义构造字典方法
student = dict(name='lily', age=18)
# 字典的操作
d['Age'] # 7 获取键的值
d['Age'] = 8 # 更新
d['Female'] = 'man' # 增加属性
del d['Name'] # 删除键值对
d.clear() # 清空字典
# 返回字典dict的(key,value)元组对的列表
# dict_items([('Age', 7), ('Class', 'First'), ('Name', 'Maxsu')])
d.items()
# 返回字典dict的键列表
d.keys() # dict_keys(['Age', 'Class', 'Name'])
# 返回字典dict的值列表
d.values() # dict_values([7, 'First', 'Maxsu'])
# 将字典 dict2 的键值对添加到字典 dict
d1.update(dict2)
# 对于键(key)存在则返回其对应值,如果键不在字典中,则返回默认值
d.get('height', 180) # 180
常用代码:
# 列表内容随机排序
import random
name_list = ['五', '李', '天', '张']
random.sample(name_list, len(name_list))
random.choice(name_list) # 只取一个
type(var) # 判断变量类型
str(var) # 转换成指定类型, int/float/list 等
str.encode('UTF-8').isdigit() # 字符串是否只由数字组成
str.isnumeric() # 字符串是否只由数字组成,只针对unicode对象
str.encode('UTF-8').isalpha() # 是否只包含字母
str.encode('UTF-8').isalnum() # 是否只包含字母或者数字
命名规则:字母、下划线 和 数字 组成,区分大小写,不能以数字开头,不能与关键字重名。
# 查看所有关键字列表
import keyword
keyword.kwlist
# 赋值给对位位置的变量
a, b = 1, 2
# 判断赋值, 如 name 为 False 则取 lily
a = name or 'lily'
a = name if name else 'lily'
a = '成年人' if age >= 18 else '未成年人'
赋值运算:
# 将字符串赋值给 a
a = 'python'
# 将 a + b 的值分配给 c
c = a + b
# 等价于 c = c + a ,-= *= /= %= **= 同理
c += a
range(10) # 生成一个 0-9 的可迭代的列表,一般用在 for 循环
eval("1+1*8") # 将字符进行操作
a = eval('[1,2,3]')
abs(-20) # 求绝对值
max([1, 4, 6, 7]) # 求最大值 min 为最小值
isinstance(x, (int, float)) # 检查 x 是不是指定的类型
sorted([1,6,3,2,9],reverse=True) # 倒序操作
reversed('abcde') # 反转
# 用函数对序列做映射返回迭代器
map(lambda x:x.upper(), chars) # 全部变为大写
# 依次执行结果为True的返回迭代器
filter(lambda x:x%2!=0,[1,2,4,5]) # [1, 3, 5] 得到奇数
# 对元素进行顺序标注,返回 (索引, 元素) 组成的迭代器
for i,c in enumerate(s_list):
print(i,c)
enumerate('abcd') # [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
# functools
from functools import reduce
reduce(lambda x,y:x*y, [1,2,3,4]) # 会对参数序列中元素依次累积: 24
reduce(lambda x,y:x+y, ['t', 'o', 'm']) # tom
# 解析列表、json 字符串
import ast
ast.literal_eval("[{'id': 7, 'name': 'Funny'}]")
if:
age = 20
if age >= 100 age < 120: # 条件成立时执行否则跳过
print('百岁老人')
elif age > 60: # 同上, 如果只有两个分支可没有 elif
print('老人')
elif age > 18:
print('成年人')
else: # 所有不符合上边条件的均执行此内容, 必须有
print('未成年人')
Switch-case 方案:
# 方法一
cal = {
'+': lambda x,y: x+y,
'-': lambda x,y: x-y
}
cal['-'](5,3) # 调用
#方法二
switch = {"valueA":functionA,"valueB":functionB,"valueC":functionC}
try:
switch["value"]() # 执行相应的方法。
except KeyError as e:
functionX() # 执行 default 功能
for:
for i in range(10): # in 后边是一个可迭代对象
print(i)
while:
# 注意, 很容易写成死循环, 选择合适的时机 break 或让其执行的条件为假
age = 20
while age > 3:
print('我会数数啦!')
for i in range(1, 11):
print(i)
if i == 10:
age = 1
中止:
break # 退出整体循环
continue # 跳过当前循环直接下次循环
get_name() # 无需要传入参数的
get_age(1996) # 需要传入参考
get_age(1996, 12, 1) # 需要传入多个参数
# 一个姓名列表中得出有几种姓
def last_names(name_list):
last_name_list = []
for i in name_list:
if len(i) < 4:
if i[0] not in last_name_list:
last_name_list.append(i[0])
else:
pass
else:
if i[:2] not in last_name_list:
last_name_list.append(i[:2])
else:
pass
return last_name_list
# 调用结果为: ['张', '王', '司马']
last_names(['张三', '张六六', '王五', '司马飞机', '司马天天', '王三'])
lambda的主体是一个表达式,而不是一个代码块。比def简单很多,仅仅能在lambda表达式中封装有限的逻辑进去。
sum = lambda arg1, arg2: arg1 + arg2; # 定义
sum( 10, 20 ) # 使用
定义一个类:
class Student():
""" 这是一个学生类 """
def __init__(self, name):
self.name = name
def say(self):
print(f' 我的名字是 {self.name}')
def add(self, x, y):
print(f' 这个加法我会,等于 {x+y}')
实例化类并调用方法:
tom = Student('Tom')
tom.say()
tom.add(3, 4)
import logging
# 日志的配置
log_path = BASE_DIR + "/_run_log_" + str(today)
FMT='''%(asctime)s\t%(filename)s\t[line:%(lineno)d]\t
%(levelname)s\t%(message)s'''
logging.basicConfig(level=logging.INFO,
format=FMT,
# datefmt='%Y%m%d %H:%M:%S',
filename=log_path,
filemode='a')
# 定义日志的变量
run_log = logging.getLogger(__name__)
# 使用日志
run_log.info(f'执行完毕: {info}')
run_log.error('执行错误')
# 在文件目录增加名为 __init__.py 的空文件,可做为包被导入
import math
math.sin(80)
# 分级导入,导入指定模块
from a.b.c import d
import math.sin
from math import sin
sin(80)
import math as mt # 别名, mt.sin(90)
import re
# 过滤文件名的特殊字符
name = re.sub('[^\w\s]', '', name)
# 在代码行加注释 # 保密(注意空格),可替换成保密提示
code = re.sub('.+# 保密', "<<此行敏感代码保密>>", code, count=0, flags=0)
# 用多个符号(如冒号和双连字符)进行分隔,返回成列表
re.split(';|--', string)
# 读取文件到文件对象
f = open('/hello/test.txt', 'r')
# 指定编码, 忽略不规范错误
f = open('/hello/test.txt', 'r', encoding='gbk', errors='ignore')
f.read() # 读取文件内容
f.close() # 关闭文件
# 逐行读取文件内容
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'删掉
# 读取文件内容到 data 变量
with open(file_path, 'rb') as f:
data = f.read()
# 写入内容, 追加到文末模式为 'a', 'w' 为覆盖
f = open('/hello/test.txt', 'w')
f.write('Hello, world!')
f.close()
# 写入并自动关闭
with open('/hello/test.txt', 'w') as f:
f.write('Hello, world!')
import os
# 语音播报
os.system(f'say "开始执行任务 {id}"') # mac
os.getcwd() # 当前目录
import glob
# 查出指定目录下指定扩展名的文件列表
files = glob.glob("data/cs/*.xls")
from io import BytesIO
# 缓存建立与使用
buf = BytesIO() # buf 可用于文件存放的位置
data = buf.getbuffer()
import sys
# 获得当前解释器完整路径, Python interpreter
sys.executable
# 查看当前 Python 的版本
sys.version_info
清空文件夹内容:
import shutil
import os
path = '/home/temp' # 文件目录
# 清空文件夹,先删除再创建个同名的
shutil.rmtree(path)
os.mkdir(path)
os.system(f'chmod 777 {path}') # 给文件夹配置权限
# 获取 MD5
import hashlib
md5 = hashlib.md5(data64_before).hexdigest()
更新时间:2024-04-08 10:47:38 标签:python 编程