前言
Python 是一门高阶、动态类型的多范式编程语言。定义 Python 文件的时候,我们往往会先声明文件编码方式。
人生苦短,请用 Python。大量功能强大的语法糖让很多时候 Python 代码看上去有点像伪代码。譬如我们用 Python 实现的简易的快排相较于 Java 会显得很短小精悍。
本文涵盖 Python 基础语法、数据类型、控制流、函数、面向对象编程及常用库的使用。内容包括控制台交互、模块管理、字符串处理、正则表达式、集合操作、文件读写、网络请求及数据库连接等实战场景,适合初学者快速掌握核心知识点。

Python 是一门高阶、动态类型的多范式编程语言。定义 Python 文件的时候,我们往往会先声明文件编码方式。
人生苦短,请用 Python。大量功能强大的语法糖让很多时候 Python 代码看上去有点像伪代码。譬如我们用 Python 实现的简易的快排相较于 Java 会显得很短小精悍。
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
可以根据 name 关键字来判断是否是直接使用 python 命令执行某个脚本,还是外部引用。Google 开源的 fire 也是不错的快速将某个类封装为命令行工具的框架。
Python 2 中 print 是表达式,而 Python 3 中 print 是函数。如果希望在 Python 2 中将 print 以函数方式使用,则需要自定义引入:
from __future__ import print_function
我们也可以使用 pprint 来美化控制台输出内容:
import pprint
pprint.pprint({'key': 'value', 'list': [1, 2, 3]})
Python 中的模块(Module)即是 Python 源码文件,其可以导出类、函数与全局变量;当我们从某个模块导入变量时,函数名往往就是命名空间(Namespace)。而 Python 中的包(Package)则是模块的文件夹,往往由 __init__.py 指明某个文件夹为包。
Package 可以为某个目录下所有的文件设置统一入口:
# package/__init__.py
from .module_a import func_a
from .module_b import func_b
Python 中使用 if、elif、else 来进行基础的条件选择操作:
if condition:
pass
elif other_condition:
pass
else:
pass
Python 同样支持三元条件运算符 (ternary conditional operator):
result = a if condition else b
也可以使用 Tuple 来实现类似的效果:
result = (false_val, true_val)[condition]
for-in 可以用来遍历数组与字典:
my_list = [1, 2, 3]
for item in my_list:
print(item)
my_dict = {'a': 1, 'b': 2}
for key, value in my_dict.items():
print(key, value)
如果我们希望使用数字序列进行遍历,可以使用 Python 内置的 range 函数:
for i in range(5):
print(i)
可以使用内建函数进行强制类型转换(Casting):
int('10') # 10
float('10.5') # 10.5
str(10) # '10'
Number: 数值类型
x = 10 # int
y = 10.5 # float
z = 1 + 2j # complex
Python 提供了常见的逻辑操作符,不过需要注意的是 Python 中并没有使用 &&、|| 等,而是直接使用了英文单词。
True and False # False
True or False # True
not True # False
Python 2 中支持 Ascii 码的 str() 类型,独立的 unicode() 类型,没有 byte 类型;而 Python 3 中默认的字符串为 utf-8 类型,并且包含了 byte 与 bytearray 两个字节类型。
Python 字符串支持分片、模板字符串等常见操作:
s = "Hello World"
s[0:5] # 'Hello'
s.upper() # 'HELLO WORLD'
f"Value is {1+1}" # 'Value is 2'
如果需要判断是否包含某个子字符串,或者搜索某个字符串的下标:
"World" in s # True
s.find("World") # 6
下面列举了常见的表达式使用场景:
import re
pattern = r'\d+'
text = 'Phone: 123456'
re.search(pattern, text).group() # '123456'
Operation: 创建增删
list 是基础的序列类型:
lst = [1, 2, 3]
lst.append(4) # [1, 2, 3, 4]
lst.extend([5, 6]) # [1, 2, 3, 4, 5, 6]
可以使用 pop、slices、del、remove 等移除列表中元素:
lst.pop() # 移除最后一个
lst.remove(1) # 移除值为 1 的元素
del lst[0] # 删除索引 0 的元素
你可以使用基本的 for 循环来遍历数组中的元素:
for i, val in enumerate(lst):
print(i, val)
Python 也支持切片(Slices):
lst[1:3] # 获取索引 1 到 2 的元素
lst[::-1] # 反转列表
Python 中同样可以使用 map、reduce、filter,map 用于变换数组:
list(map(lambda x: x*2, [1, 2, 3])) # [2, 4, 6]
reduce 用于进行归纳计算:
from functools import reduce
reduce(lambda x, y: x+y, [1, 2, 3, 4]) # 10
filter 则可以对数组进行过滤:
list(filter(lambda x: x>2, [1, 2, 3, 4])) # [3, 4]
d = {'a': 1, 'b': 2}
d['c'] = 3
如果需要合并两个或者多个字典类型:
d1 = {'a': 1}
d2 = {'b': 2}
d1.update(d2) # {'a': 1, 'b': 2}
可以根据键来直接进行元素访问:
d.get('a') # 1
d['a'] # 1
可以使用 for-in 来遍历数组:
for k, v in d.items():
print(k, v)
集合
s = {1, 2, 3}
s.add(4)
Python 中的函数使用 def 关键字进行定义,譬如:
def greet(name):
return f"Hello, {name}"
Python 支持运行时创建动态函数,也即是所谓的 lambda 函数:
add = lambda x, y: x + y
Option Arguments: 不定参数
def func(*args, **kwargs):
print(args, kwargs)
def gen():
yield 1
yield 2
装饰器是非常有用的设计模式:
def my_decorator(func):
def wrapper():
print("Before")
func()
print("After")
return wrapper
@my_decorator
def say_hello():
print("Hello")
Python 中对于类的定义也很直接:
class MyClass:
def __init__(self, value):
self.value = value
class Person:
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
class Math:
@staticmethod
def add(x, y):
return x + y
@classmethod
def info(cls):
return cls.__name__
实例化
obj = MyClass(10)
属性操作
Python 中对象的属性不同于字典键,可以使用点运算符取值,直接使用 in 判断会存在问题:
hasattr(obj, 'value') # True
getattr(obj, 'value') # 10
setattr(obj, 'value', 20)
Context Manager - with
with 常用于打开或者关闭某些资源:
try:
with open('file.txt', 'r') as f:
content = f.read()
except FileNotFoundError:
print("File not found")
import unittest
class TestMath(unittest.TestCase):
def test_add(self):
self.assertEqual(Math.add(1, 2), 3)
路径处理
Python 内置的 file 关键字会指向当前文件的相对路径,可以根据它来构造绝对路径,或者索引其他文件:
import os
os.path.abspath(__file__)
可以使用 listdir、walk、glob 模块来进行文件枚举与检索:
import glob
files = glob.glob('*.txt')
with open('test.txt', 'w') as f:
f.write('Hello World')
JSON
import json
data = {'key': 'value'}
json_str = json.dumps(data)
parsed = json.loads(json_str)
XML
我们可以使用 lxml 来解析与处理 XML 文件,本部分即对其常用操作进行介绍。lxml 支持从字符串或者文件中创建 Element 对象:
from lxml import etree
root = etree.fromstring('<root><child/></root>')
其提供了迭代器以对所有元素进行遍历:
for child in root.iter():
print(child.tag)
lxml 支持以 XPath 查找元素,不过需要注意的是,XPath 查找的结果是数组,并且在包含命名空间的情况下,需要指定命名空间:
root.xpath('//child')
lxml 提供了 insert、append 等方法进行元素操作:
new_elem = etree.Element('new')
root.append(new_elem)
Excel
可以使用 xlrd 来读取 Excel 文件,使用 xlsxwriter 来写入与操作 Excel 文件。
对于高级的文件操作,我们可以使用 Python 内置的 shutil:
import shutil
shutil.copy('src.txt', 'dst.txt')
Requests 是优雅而易用的 Python 网络请求库:
import requests
response = requests.get('https://api.example.com')
print(response.status_code)
import pymysql
conn = pymysql.connect(host='localhost', user='user', password='pass', db='db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM table')
以上涵盖了 Python 核心语法及常用库的实战用法。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online