Python 语法

First Post:

Last Update:

字符串操作

反转字符串

直接使用切片反转

1
2
3
4
5
6
7
letters = "ABCDEFG"

# 反转
letters = letters[::-1]

print(letters)
>>>GFEDCBA

错误处理

try 语句

1
2
3
4
5
6
7
8
9
10
try:
# 可能报错的代码
except <错误1>:
# 错误处理1
except <错误2> as <错误参数>:
# 错误处理2
else:
# 如果无异常发生, 则执行该段代码
finally:
# 无论如何都会执行的代码

raise

除了错误处理, 我们还可以手动抛出错误

1
2
3
4
5
6
7
8
9
import httpx

async def get_test():
try:
with AsyncClient() as client:
client.get("http://www.baidu.com")
except httpx.TimeoutException as e:
print("请求超时")
raise e

除此之外, 还可以自定义异常

1
2
3
4
5
6
7
# 自定义异常类 继承 异常基类
class MyException(Exception):
def __init__(self, error_info):
self.error_info = error_info

def __str__(self):
return self.error_info
1
2
3
4
5
# 手动抛出自定义错误
try:
raise CustomException("自定义异常名称")
except CustomException as e:
print(e)

with 语句

with 语句是 try... 错误处理语句的封装

try 语句写法:

1
2
3
4
5
file = open('./temp_text.txt', 'w')
try:
file.write('写进一些字符...')
finally:
file.close()

with 语句写法:

with 语句会通过上下文管理器自动调用相关方法
在文件操作中, with 会自动调用 file.close() 方法

1
2
3
4
5
with open('./test_runoob.txt', 'w') as file:
file.write('hello world !')

# 查看文件是否被关闭
print(file.closed)

内置函数

enumerate()

将一个可遍历的数据对象组合为一个索引序列, 同时列出数据和数据下标

1
2
# start= 下标起始位置
enumerate(可迭代对象, start=0)

例:

1
2
3
4
li = ["one", "two", "three"]

for i, element in li:
print(i, element)

bin()

bin(整型)

返回二进制表示的字符串

1
2
3
4
5
num = bin(10)

print(num)

>>>0b1010

map()

map(函数名, 可迭代对象)

指定处理函数, 用于处理可迭代对象内的每个元素
函数返回一个 map 对象

例:
将列表内的每个元素向下取整

1
2
3
4
li = [1.2, 5.6, 3.3, 9.7, 8.8]

# 将 map 对象转换为列表
li = list(map(int, li))


列表操作

index()


python 特殊变量, 方法

__方法名__, __变量名__ 是 python 的特殊方法或特殊变量

特殊变量

__file__

__file__ 储存的是当前 python 脚本的运行路径

需要注意的是:
如果执行文件是使用的相对命令, 那么 __file__ 储存的就是相对路径
反之, 储存的则是绝对路径


特殊方法

__str__()

__str__() 方法用于类

  • 当不定义 __str__方法时
    python 输出对象时即 print(对象) 时, 默认输出其实例内存地址
  • 当定义 __str__方法时, 自动调用该方法

注意: __str__() 方法的返回值必须为字符串


例:

1
2
3
4
5
6
7
8
9
10
11
class Test:
def __init__(self):
self.name = "测试对象"

def __str__(self):
return self.name

test = Test()

print(test)
>>>"测试对象"

__import__()

用于动态导入模块
如果一个包经常变化就可以使用 __import__() 动态载入模块

但是, 这个方法是给 python 解析器内部使用的
官方不建议使用该特殊方法
官方建议使用 importlib 动态导入模块

__import__(模块) 相当于 import 模块

1
2
3
4
5
# 加载模块
sys = __import__('sys')

# 相对加载包内模块
example = __import__('.example')

另一个例子:

1
2
3
# 导入包内子模块
# 加入传参 fromlist
example = __import__('os', fromlist=["path", "platform"])