python基础语法

菜鸟教程

PyCharm中

if __name__ == "__main__":
'''
使用main+回车即可
'''

一、Python 中文编码

Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 # coding=utf-8 就行了ps: 注意:# coding=utf-8 的 = 号两边不要空格。

# -*- coding: UTF-8 -*-
print( "你好,世界" )

二、多行语句

Python语句中一般以新行作为语句的结束符。
但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示:

total = item_one + \
        item_two + \
        item_three

ps: 注意括号中的不需要\来维护换行

三、注释

python中单行注释采用 # 开头。

python 中多行注释使用三个单引号 ‘’’ 或三个双引号 “”"。

# 文件名:test.py

# 第一个注释
print ("Hello, Python!")  # 第二个注释

'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''

"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""

四、变量

Number(数字)
String(字符串)
bool(布尔类型)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

1、多变量赋值

a = b = c = 1

2、判断类型

isinstance()
type()

isinstance 和 type 的区别在于:
type()不会认为子类是一种父类类型。
isinstance()会认为子类是一种父类类型。

在这里插入图片描述
在这里插入图片描述

3、字符String

在这里插入图片描述

4、布尔

在这里插入图片描述

5、List(列表)

在这里插入图片描述
在这里插入图片描述

6、Tuple(元组)

在这里插入图片描述

7、Set(集合)

在这里插入图片描述

8、 Dictionary(字典)

在这里插入图片描述
也可以aa = {“zzz”:“zzz”}
在这里插入图片描述

9、推导式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

五、类型转换

在这里插入图片描述

六、运算符

1、Python算术运算符

在这里插入图片描述

2、Python 比较运算符

在这里插入图片描述

3、Python赋值运算符

在这里插入图片描述

4、 Python位运算符

在这里插入图片描述

5、Python逻辑运算符

在这里插入图片描述

6、Python成员运算符

在这里插入图片描述

7、 Python身份运算符

在这里插入图片描述
在这里插入图片描述

七、条件控制

在这里插入图片描述
在这里插入图片描述

八、循环

1、while循环

在这里插入图片描述
在这里插入图片描述

2、for循环

在这里插入图片描述
range()函数
其中range(5,10)有5没10
在这里插入图片描述
在这里插入图片描述

3、跳出循环break 和 continue

在这里插入图片描述

3、pass占位符号 和 方法暂未定义

在这里插入图片描述

…表示这个方法应该由子类实现

class BaseClass:
    def do_something(self) -> None:...
class SubClass(BaseClass):
    def do_something(self) -> None:
        print("xxxx")


SubClass().do_something()

九、迭代器

1、迭代器取值

在这里插入图片描述

2、停止无限循环

在这里插入图片描述

3、函数停止变为迭代器

在这里插入图片描述

十、函数

1、自定义函数

在这里插入图片描述

2、默认参数

在这里插入图片描述

3、元组方式入参

在这里插入图片描述
在这里插入图片描述

4、字典入参

在这里插入图片描述

5、*后必须以(参数名=值)传递

在这里插入图片描述
在这里插入图片描述

6、匿名函数

在这里插入图片描述

7、强制位置参数/

在这里插入图片描述

8、return

None为java的null

十一、lambda 匿名函数

1、无参lambda

在这里插入图片描述

2、有参lambda

在这里插入图片描述

3、函数式入参

在这里插入图片描述

4、函数作为参数

def apply_operation(operation, x, y):
   """
   接受一个操作函数,并将它应用到给定的两个参数上
   """
   result = operation(x, y)
   return result


# 定义一个加法函数
def add(a, b):
   return a + b

if __name__ == '__main__':

   # 将 add 函数作为参数传递给 apply_operation 函数
   sum_result = apply_operation(add, 3, 4)
   print(sum_result)  # 输出:7

5、判断类型

import types
# 是否为函数类型
print(isinstance(operation, types.FunctionType) )
# 是否为int类型
print(isinstance(operation, int) )
# 是否为str类型和int类型
print(isinstance(operation, (int, str)) )

十二、模块

1、引入模块import

在这里插入图片描述

在这里插入图片描述

2、引入模块from … import 语句

在这里插入图片描述

在这里插入图片描述

3、__name__属性

在这里插入图片描述

4、dir函数

在这里插入图片描述
在这里插入图片描述

5、包

在这里插入图片描述

6、全局函数

在这里插入图片描述

7、reload() 函数

在这里插入图片描述

在这里插入图片描述

会执行下面的__name__方法

在这里插入图片描述

十三、键盘输入+读和写文件(文件I/O)

1、键盘输入

在这里插入图片描述

2、文件模式

在这里插入图片描述
在这里插入图片描述

3、写

在这里插入图片描述

返回写入字数
在这里插入图片描述
写非文字
在这里插入图片描述

4、读

在这里插入图片描述

单行读
在这里插入图片描述
读取多行
在这里插入图片描述

5、所处的位置

在这里插入图片描述

6、关闭流

在这里插入图片描述

7、序列化pickle 模块

写入
在这里插入图片描述
读取
在这里插入图片描述

8、file

在这里插入图片描述
在这里插入图片描述

9、os模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十四、异常

1、异常

在这里插入图片描述

2、断言

在这里插入图片描述

十五、面向对象(类)

1、类创建

在这里插入图片描述

2、构造函数__init__()

在这里插入图片描述

3、类实体(构造函数的参数)

在这里插入图片描述

4、类如何写函数

在这里插入图片描述

5、继承

在这里插入图片描述

与java不同的是它支持多继承
在这里插入图片描述

6、重写

在这里插入图片描述

7、掉父类方法

在这里插入图片描述

8、 私有变量和私有方法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

私有属性如何去掉
在这里插入图片描述

9、类专有方法

在这里插入图片描述

10、运算符重载

在这里插入图片描述

十六、内置函数

在这里插入图片描述

十七、作用域

1、修改全局变量(global)

Money = 2000
def AddMoney():
    # 想改正代码就取消以下注释:
    global Money
    Money = Money + 1
    print(Money)
    return Money

2、内嵌局部修改局部参数(nonlocal )

#!/usr/bin/python3
 
def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()

3、获取全局变量和局部变量函数

全局

在这里插入图片描述

局部
在这里插入图片描述

十八、标准库

Python 标准库非常庞大,所提供的组件涉及范围十分广泛,使用标准库我们可以让您轻松地完成各种任务。

以下是一些 Python3 标准库中的模块:

  • os 模块:os 模块提供了许多与操作系统交互的函数,例如创建、移动和删除文件和目录,以及访问环境变量等。

  • sys 模块:sys 模块提供了与 Python 解释器和系统相关的功能,例如解释器的版本和路径,以及与 stdin、stdout 和 stderr 相关的信息。

  • time 模块:time 模块提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等。

  • datetime 模块:datetime 模块提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等。

  • random 模块:random 模块提供了生成随机数的函数,例如生成随机整数、浮点数、序列等。

  • math 模块:math 模块提供了数学函数,例如三角函数、对数函数、指数函数、常数等。

  • re 模块:re 模块提供了正则表达式处理函数,可以用于文本搜索、替换、分割等。

  • json 模块:json 模块提供了 JSON 编码和解码函数,可以将 Python 对象转换为 JSON 格式,并从 JSON 格式中解析出 Python 对象。

  • urllib 模块:urllib 模块提供了访问网页和处理 URL 的功能,包括下载文件、发送 POST 请求、处理 cookies 等。

1、操作系统接口

在这里插入图片描述

2、文件通配符

在这里插入图片描述

3、 命令行参数

在这里插入图片描述

4、 字符串正则匹配

在这里插入图片描述

5、数字

在这里插入图片描述

6、 访问互联网

在这里插入图片描述

7、日期和时间

在这里插入图片描述

8、 数据压缩

在这里插入图片描述

9、 性能度量

在这里插入图片描述

10、 测试模块

在这里插入图片描述

官方标准库链接

十九、正则

1、 re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 None。
在这里插入图片描述

import re
# span()是取出来re.match('www', 'www.runoob.com')返回的是对象中的属性
print(re.match('www', 'www.runoob.com').span())  # 在起始位置到最终位置匹配
print(re.match('com', 'www.runoob.com'))         # 起始位置匹配

例如,假设有一个字符串 “2023-12-13”,我们想要提取年、月和日的信息。我们可以使用正则表达式来匹配这个字符串,并使用括号来创建匹配组来捕获这些信息:

import re

# 匹配模式并创建匹配组捕获年、月和日
pattern = r'(\d{4})-(\d{2})-(\d{2})'
match = re.match(pattern, '2023-12-13')

# 获取整个匹配
print(match.group(0))  # 输出: 2023-12-13

# 获取第一个括号匹配的内容(年份)
print(match.group(1))  # 输出: 2023

# 获取第二个括号匹配的内容(月份)
print(match.group(2))  # 输出: 12

# 获取第三个括号匹配的内容(日期)
print(match.group(3))  # 输出: 13


2、re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。
在这里插入图片描述

#!/usr/bin/python3
 
import re
 
print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())         # 不在起始位置匹配

3、检索和替换

在这里插入图片描述

#!/usr/bin/python3
import re
 
phone = "2004-959-559 # 这是一个电话号码"
 
# 删除注释
num = re.sub(r'#.*$', "", phone)
print ("电话号码 : ", num)
 
# 移除非数字的内容
num = re.sub(r'\D', "", phone)
print ("电话号码 : ", num)

repl 参数是一个函数

#!/usr/bin/python
 
import re
 
# 将匹配的数字乘以 2
def double(matched):
    value = int(matched.group('value'))
    return str(value * 2)
 
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))

4、compile 函数

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用
在这里插入图片描述

>>>import re
>>> pattern = re.compile(r'\d+')                    # 用于匹配至少一个数字
>>> m = pattern.match('one12twothree34four')        # 查找头部,没有匹配
>>> print( m )
None
>>> m = pattern.match('one12twothree34four', 2, 10) # 从'e'的位置开始匹配,没有匹配
>>> print( m )
None
>>> m = pattern.match('one12twothree34four', 3, 10) # 从'1'的位置开始匹配,正好匹配
>>> print( m )                                        # 返回一个 Match 对象
<_sre.SRE_Match object at 0x10a42aac0>
>>> m.group(0)   # 可省略 0
'12'
>>> m.start(0)   # 可省略 0
3
>>> m.end(0)     # 可省略 0
5
>>> m.span(0)    # 可省略 0
(3, 5)

5、 findall

在这里插入图片描述

import re
 
result1 = re.findall(r'\d+','runoob 123 google 456')
 
pattern = re.compile(r'\d+')   # 查找数字
result2 = pattern.findall('runoob 123 google 456')
result3 = pattern.findall('run88oob123google456', 0, 10)
 
print(result1)
print(result2)
print(result3)

多个匹配模式,返回元组列表:

import re

result = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result)

6、re.finditer

在这里插入图片描述

7、re.split

在这里插入图片描述

import re

# 分割字符串
result = re.split(r'\s+', 'Splitting    this string   by spaces')
print(result)
# 输出: ['Splitting', 'this', 'string', 'by', 'spaces']

# 指定最大分割次数为1
result_with_limit = re.split(r'\s+', 'Splitting    this string   by spaces', maxsplit=1)
print(result_with_limit)
# 输出: ['Splitting', 'this string   by spaces']

8、表达式对象

在这里插入图片描述

9、表达式和正则表达式修饰符 - 可选标志

链接

二十、链接数据库mysql

1、创建链接

安装mysql连接包

在这里插入图片描述

在这里插入图片描述

2、创建数据库

在这里插入图片描述

查看数据库是否存在

在这里插入图片描述

3、创建数据库表

在这里插入图片描述

查看数据表是否存在

在这里插入图片描述

主键设置

在这里插入图片描述

4、插入数据

在这里插入图片描述

批量插入

在这里插入图片描述

获取插入id

在这里插入图片描述

5、查询数据

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6、防止sql注入

在这里插入图片描述

7、删除

在这里插入图片描述
在这里插入图片描述

8、修改

在这里插入图片描述

9、删除表

在这里插入图片描述

二十一、xml解析

1、使用 ElementTree 解析 xml

在这里插入图片描述

示例

在这里插入图片描述
在这里插入图片描述

2、使用 SAX 解析 xml

在这里插入图片描述

示例

在这里插入图片描述

3、使用xml.dom解析xml

在这里插入图片描述

二十二、json解析

1、解释

在这里插入图片描述

2、类型

在这里插入图片描述

3、解析和转换

在这里插入图片描述

4、json文件

在这里插入图片描述

二十三、页面url获取元素 http请求

1、读取

在这里插入图片描述

逐行读取 + 请求路径编码与解码

在这里插入图片描述

2、模拟请求头

在这里插入图片描述

3、提交表单

在这里插入图片描述
在这里插入图片描述

4、由于read方法后是bytes类型,输出转换

import urllib.request
import urllib.parse
if __name__ == '__main__':
    url = 'https://www.runoob.com/try/py3/py3_urllib_test.php'  # 提交到表单页面
    data = {'name': 'RUNOOB', 'tag': '菜鸟教程'}  # 提交数据
    header = {
        'User-Agent': 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }  # 头部信息
    data = urllib.parse.urlencode(data).encode('utf8')  # 对参数进行编码,解码使用 urllib.parse.urldecode
    request = urllib.request.Request(url, data, header)  # 请求处理
    response=urllib.request.urlopen(request).read()      # 读取结果
    print(response.decode("utf-8"))

5、urllib.error

在这里插入图片描述

6、urllib.parse解析

在这里插入图片描述

7、超时时间

import urllib.request

url = 'https://www.example.com'

try:
    response = urllib.request.urlopen(url, timeout=5)  # 设置超时时间为 5 秒
    # 处理响应的代码
    print(response.read())  # 读取响应内容示例
except urllib.error.URLError as e:
    print("Error:", e)

8、urllib.robotparser

在这里插入图片描述

二十四、调取http接口requests模块

1、使用

在这里插入图片描述

2、方法

在这里插入图片描述
在这里插入图片描述

3、request方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二十五、多线程

1、多线程

在这里插入图片描述

2、线程模块

在这里插入图片描述
在这里插入图片描述

3、线程同步

在这里插入图片描述

3、线程优先级队列( Queue)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ps:如果设置为10,put超过会阻塞,get为空也会阻塞

二十六、服务端暴漏接口uWSGI 安装配置

windows安装报错

链接

1、安装和简单使用

在这里插入图片描述

2、开启和关闭

2.1、菜鸟教程

在这里插入图片描述

在这里插入图片描述

2.2、配置文件

在这里插入图片描述

uwsgi.ini

[uwsgi]
socket=127.0.0.1:3034
chdir=/Users/calvin/work/myproject
virtualenv=/Users/calvin/.virtualenvs/myproject
module=django.core.handlers.wsgi:WSGIHandler()
env= DJANGO_SETTINGS_MODULE=myproject.settings
master=True
pidfile=/tmp/myproject-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/myproject.log

在这里插入图片描述

在这里插入图片描述

3、定义服务接口

在这里插入图片描述

4、使用flask直接充当服务器

在这里插入图片描述

python app.py

为什么可以直接充当服务器还需要uwsgi

在这里插入图片描述

5、flask知识

5.1 开启debug模式(修改免重启)

修改代码免重启
出现bug会出现在浏览器上

在这里插入图片描述
在这里插入图片描述

如果是社区版本就不是上述开启的 是修改代码

在这里插入图片描述

5.2 host局域网可以访问

在这里插入图片描述

5.3 port

记得空格

在这里插入图片描述

5.4 路径传参

在这里插入图片描述

类型限制

在这里插入图片描述
在这里插入图片描述

路径拼接例如?age=3,注意要引入request模块

在这里插入图片描述

5.5 请求方式

在这里插入图片描述

5.6、多个文件多个请求接口如何写

这个页面所有请求都必须带有/auth
在这里插入图片描述
再注册
在这里插入图片描述

6、页面渲染jinja2,跳转到对应页面

6.1、使用

在这里插入图片描述

在这里插入图片描述

6.2、过滤器

在这里插入图片描述

显示为:name-长度

6.3、自定义过滤器

在这里插入图片描述

在这里插入图片描述

6.4、控制语句

在这里插入图片描述

6.5 继承

在这里插入图片描述

替换继承中的文字内容(例如详情内容不一样)
在这里插入图片描述

在这里插入图片描述

6.6、静态资源

在这里插入图片描述

6.7 钩子函数

ps:只看注解就行


在这里插入图片描述

在这里插入图片描述

7、 flask更多入门

链接

二十七、Python hashlib 模块(加密)

在这里插入图片描述

1、 常用方法

在这里插入图片描述

2、哈希对象方法

在这里插入图片描述

3、常见哈希算法

在这里插入图片描述

4、方法

在这里插入图片描述

二十八、饼图pyecharts 模块

1、安装

pip install pyecharts

查看版本

import pyecharts
print(pyecharts.__version__)

2、pyecharts 图表类型

在这里插入图片描述

3、创建第一张图表

在这里插入图片描述

4、设置图标配置选项

在这里插入图片描述

5、使用主题

在这里插入图片描述
在这里插入图片描述

6、设置全局配置选项

在这里插入图片描述

二十九、pip

在这里插入图片描述

三十、日期

1、时间戳

在这里插入图片描述

2、时间元组

在这里插入图片描述

3、获取当前时间

在这里插入图片描述

4、格式化时间

在这里插入图片描述
在这里插入图片描述

5、获取某月日历

在这里插入图片描述

6、time函数

日期函数

三十一、泛型

from typing import List, Tuple, TypeVar

# 定义一个类型变量 T
T = TypeVar('T')

# 泛型函数示例,接受一个列表和一个元素,返回列表中第一个与元素相等的值的索引
def find_index(lst: List[T], value: T) -> int:
    for i, item in enumerate(lst):
        if item == value:
            return i
    return -1

# 使用泛型函数
my_list = [1, 2, 3, 4, 5]
index = find_index(my_list, 3)  # 在列表中找到值为 3 的元素的索引
print(index)  # 输出: 2


备忘录

1、not 相反

msg =None
print(not msg != None)

2、判断空

 msg =[]
 print(not msg)

3、方法参数和返回值类型注释

def test(a: 注释类型 = 1, b: 注释类型) -> 返回值类型
return a + b

def test(a: int = 1, b: str) -> int:
 return a

4、全局设置镜像源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 局部安装使用指定镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名

5、升级pip

python -m pip install --upgrade pip

6、追加环境变量

在这里插入图片描述

7、enumerate内置函数

my_list = ['apple', 'banana', 'orange']

for index, value in enumerate(my_list, start=1):
    print(f"Index {index}: {value}")

在这里插入图片描述

8、json转对象

import json

# 定义一个 Person 类来表示 JSON 中的数据结构
class Person:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city

# JSON 数据
json_data = '{"name": "John", "age": 30, "city": "New York"}'

# 将 JSON 转换为 Python 对象
data_dict = json.loads(json_data)

# 创建 Person 类的实例
person = Person(data_dict['name'], data_dict['age'], data_dict['city'])

# 访问实例的属性
print(person.name)  # 输出: John
print(person.age)   # 输出: 30
print(person.city)  # 输出: New York

9、在python中注意函数命名不能重复

在 Python 中,类中只能有一个同名的方法,因此定义了两个同名的方法是不允许的。在你给出的代码中,第二个 printagename 方法会覆盖掉第一个,因为 Python 解释器只会记住最后一个同名方法。
这种情况下,如果你使用 getattr() 获取 printagename 方法,将只能获取到最后一个定义的 printagename 方法,而无法获取到第一个方法。
如果你希望实现重载或多态的效果,可以考虑使用默认参数或者使用不同的方法名来实现类似的功能,因为 Python 并不支持方法重载。例如:

class Cat:
    def printagename(self, value=None):
        if value is None:
            print('111')
        else:
            print(value)

10、占位符f

tag = "a"
start_tag = f'<{tag}>'
end_tag = f'</{tag}>'
print(start_tag + end_tag)  # 输出 <a></a>

11、具名元组

定义

from collections import namedtuple

# 定义一个具名元组类
Point = namedtuple('Point', ['x', 'y'])



使用

# 创建一个 Point 实例
a = Point(x=1, y=2)
# 解构赋值获取 x 和 y
x, y = a
print(x, y)  # 输出: 1 2

12、相对路径

import os
if __name__ == '__main__':
	# os.path.abspath(__file__)当前py文件目录含有py文件的路径
	# os.path.dirname文件夹的路径
    path = os.path.dirname(os.path.abspath(__file__))
    print(path)

13、将字典对应的参数值对应方法中参数

desired_caps = {
    "platformName":"Android", #操作系统
    "platformVersion":"5.1.1", #操作版本 根据查看手机版本信息获取
    "deviceName":"xiaomi", #设备名称 可以随便写 没有特殊限制
    "appPackage":"", #包名 根据命令获取
    "appActivity":"", #入口启动项目页面
    "noReset":True
}
# 其中desired_caps 中key为方法中的参数值,也就是讲字典中的值拿出来对应的方法进行传参
driver = webdriver.Remote("http://127.0.0.1:4444/wd/hub", **desired_caps)

14、@classmethod注解和@staticmethod

下列例子可以staticmethod注解换掉即可

@classmethod 是 Python 中用于定义类方法的一个装饰器。类方法是与类相关联的方法,而不是与类的实例相关联的方法。使用 @classmethod 装饰器可以声明一个方法为类方法。

类方法的定义如下:

class MyClass:
    @classmethod
    def my_class_method(cls, arg1, arg2):
        # 类方法的实现
        pass

调用

MyClass.my_class_method(arg1, arg2)
  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张航柯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值