1、ast模块
在Python中,ast
模块是一个用于操作抽象语法树(Abstract Syntax Tree)的模块。它提供了一组用于分析、修改和生成Python代码的工具。
通过使用ast
模块,可以将Python源代码解析为语法树,并对语法树进行遍历和操作。以下是使用ast
模块的一些常见操作:
- 解析代码:使用
ast.parse()
函数将Python代码解析为语法树对象。
import ast
code = """
x = 1 + 2
print(x)
"""
ast_tree = ast.parse(code)
- 遍历语法树:使用
ast.NodeVisitor
类或ast.walk()
函数遍历语法树的节点。
# 使用NodeVisitor类遍历语法树
class MyVisitor(ast.NodeVisitor):
def visit_Assign(self, node):
print("Assignment statement:", node.targets[0].id)
visitor = MyVisitor()
visitor.visit(ast_tree)
# 使用walk函数遍历语法树
for node in ast.walk(ast_tree):
if isinstance(node, ast.Name):
print("Name:", node.id)
- 修改语法树:通过自定义
ast.NodeTransformer
类,可以对语法树进行修改。
class MyTransformer(ast.NodeTransformer):
def visit_Assign(self, node):
# 将赋值语句中的数字常量修改为10
node.value = ast.Num(10)
return node
transformer = MyTransformer()
new_tree = transformer.visit(ast_tree)
- 生成代码:使用
astor
库可以将修改后的语法树重新转换为代码。
import astor
new_code = astor.to_source(new_tree)
print(new_code)
这只是使用ast
模块的一小部分示例。ast
模块还提供了其他函数和类,用于处理更复杂的语法树操作,如条件语句、循环语句和函数定义等。可以查阅Python官方文档或ast
模块的文档以获取更详细的信息。
2、random模块
random模块是Python中用于生成伪随机数的模块。它提供了一系列的函数和类,可以用于生成随机数、随机选择和随机排列等操作。以下是一些常用的random模块函数和类的示例用法:
- random.random():生成一个0到1之间的随机浮点数。
import random
num = random.random()
print(num)
- random.randint(a, b):生成一个在指定范围内的随机整数,包括a和b。
import random
num = random.randint(1, 10)
print(num)
- random.choice(seq):从序列seq中随机选择一个元素。
import random
seq = [1, 2, 3, 4, 5]
random_element = random.choice(seq)
print(random_element)
- random.shuffle(seq):将序列seq中的元素随机打乱顺序。
import random
seq = [1, 2, 3, 4, 5]
random.shuffle(seq)
print(seq)
- random.sample(seq, k):从序列seq中随机选择k个元素,并以列表形式返回。
import random
seq = [1, 2, 3, 4, 5]
random_elements = random.sample(seq, 3)
print(random_elements)
除了以上示例函数和类外,random模块还提供了其他函数和类,如random.uniform()用于生成指定范围内的随机浮点数,random.seed()用于指定随机数种子等。详细的函数和类可参考Python官方文档。
3、 literal_eval函数
python literal_eval
函数是Python的内置函数eval
的一个变体,用于安全地评估并执行一个Python表达式。
literal_eval
函数可以评估一个包含字面值的字符串,并返回其对应的Python对象。字面值可以是数字、字符串、列表、字典、元组和布尔值。
函数原型:ast.literal_eval(node_or_string)
literal_eval
函数接受一个参数node_or_string
,可以是一个包含字面值的字符串,也可以是AST(抽象语法树)节点。函数返回一个Python对象。
literal_eval
函数的主要特点是安全性。与eval
函数不同,literal_eval
函数只能评估包含字面值的表达式,并且不会执行任何危险的操作。这可以防止恶意代码执行。
以下是literal_eval
函数的一些示例:
import ast
# 字符串
s = "'Hello, world!'"
result = ast.literal_eval(s)
print(result) # 输出:Hello, world!
# 列表
s = "[1, 2, 3]"
result = ast.literal_eval(s)
print(result) # 输出:[1, 2, 3]
# 字典
s = "{'name': 'Alice', 'age': 25}"
result = ast.literal_eval(s)
print(result) # 输出:{'name': 'Alice', 'age': 25}
# 布尔值
s = "True"
result = ast.literal_eval(s)
print(result) # 输出:True
需要注意的是,literal_eval
函数不能评估包含变量或函数调用的表达式。如果要评估这样的表达式,仍然需要使用eval
函数。但是需要谨慎使用eval
函数,以免执行恶意代码。
4、requests模块
pythonrequests
是一个流行的第三方库,用于发送HTTP请求和处理响应。以下是一些常见的用法示例:
- 发送GET请求:
import requests
response = requests.get('http://www.example.com')
print(response.status_code) # 打印状态码
print(response.text) # 打印响应内容
- 发送带参数的GET请求:
import requests
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('http://www.example.com', params=params)
print(response.url) # 打印请求的URL
- 发送POST请求:
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://www.example.com', data=data)
print(response.status_code) # 打印状态码
- 发送带请求头的请求:
import requests
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('http://www.example.com', headers=headers)
print(response.text) # 打印响应内容
- 发送带Cookie的请求:
import requests
cookies = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('http://www.example.com', cookies=cookies)
print(response.text) # 打印响应内容
这些只是一些常见用法示例,pythonrequests
还提供了更多的功能和选项,可以根据具体需求进行更多自定义和配置。
5、三元运算符
Python中的三元运算符是一种简洁的条件表达式形式,用于根据条件选择性地返回两个值之一。
三元运算符的语法形式为:
value_if_true if condition else value_if_false
当条件为True时,返回value_if_true的值;当条件为False时,返回value_if_false的值。
以下是一个示例:
x = 5
y = "Positive" if x > 0 else "Negative"
print(y) # 输出: Positive
以上示例中,如果x大于0,则y的值为"Positive",否则为"Negative"。
需要注意的是,三元运算符可以嵌套使用,但过度使用可能会使代码难以理解,建议适度使用。