Python的ast、random、 requests、literal_eval、三元运算符

1、ast模块

在Python中,ast模块是一个用于操作抽象语法树(Abstract Syntax Tree)的模块。它提供了一组用于分析、修改和生成Python代码的工具。

通过使用ast模块,可以将Python源代码解析为语法树,并对语法树进行遍历和操作。以下是使用ast模块的一些常见操作:

  1. 解析代码:使用ast.parse()函数将Python代码解析为语法树对象。
import ast

code = """
x = 1 + 2
print(x)
"""

ast_tree = ast.parse(code)
  1. 遍历语法树:使用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)
  1. 修改语法树:通过自定义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)
  1. 生成代码:使用astor库可以将修改后的语法树重新转换为代码。
import astor

new_code = astor.to_source(new_tree)
print(new_code)

这只是使用ast模块的一小部分示例。ast模块还提供了其他函数和类,用于处理更复杂的语法树操作,如条件语句、循环语句和函数定义等。可以查阅Python官方文档或ast模块的文档以获取更详细的信息。

2、random模块

random模块是Python中用于生成伪随机数的模块。它提供了一系列的函数和类,可以用于生成随机数、随机选择和随机排列等操作。以下是一些常用的random模块函数和类的示例用法:

  1. random.random():生成一个0到1之间的随机浮点数。
import random

num = random.random()
print(num)
  1. random.randint(a, b):生成一个在指定范围内的随机整数,包括a和b。
import random

num = random.randint(1, 10)
print(num)
  1. random.choice(seq):从序列seq中随机选择一个元素。
import random

seq = [1, 2, 3, 4, 5]
random_element = random.choice(seq)
print(random_element)
  1. random.shuffle(seq):将序列seq中的元素随机打乱顺序。
import random

seq = [1, 2, 3, 4, 5]
random.shuffle(seq)
print(seq)
  1. 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请求和处理响应。以下是一些常见的用法示例:

  1. 发送GET请求:
import requests

response = requests.get('http://www.example.com')
print(response.status_code)   # 打印状态码
print(response.text)          # 打印响应内容
  1. 发送带参数的GET请求:
import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('http://www.example.com', params=params)
print(response.url)           # 打印请求的URL
  1. 发送POST请求:
import requests

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://www.example.com', data=data)
print(response.status_code)   # 打印状态码
  1. 发送带请求头的请求:
import requests

headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('http://www.example.com', headers=headers)
print(response.text)          # 打印响应内容
  1. 发送带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"。

需要注意的是,三元运算符可以嵌套使用,但过度使用可能会使代码难以理解,建议适度使用。

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值