Python 是一门动态类型的语言,因此无须提前声明变量类型;并且由于其是弱类型语言,即可以更改其变量类型。动态类型语言/弱类型语言
a = 10 # 不需要提前声明变量类型
a = "a" # 可以更改其变量类型
解包:把一个可迭代对象 Iterable 可迭代对象reference1 可迭代对象reference1的所有成员,一次性赋给多个变量。
普通解包
usernames = ["Tom", "Bob"]
author, reader = usernames
attrs = [1, ["Tom", 1]]
user_id, (username, score) = attrs
动态解包
data = [1, 2, 3, 4, 5, 6, 7]
a, *b, c = data # b 贪婪地获得尽可能多的元素
print(a)
print(b)
print(c)
1
[2, 3, 4, 5, 6]
7
用于表示无意义的变量
a, *_, c = [1, 2, 3, 4, 5, 6, 7]
# 表示只要开头和结尾的元素并分别赋值给a, c
此外,_ 在python交互式命令行中,表示上一个表达式返回值

def example(items):
""" 解释example干什么的
:param items: 解释items是什么
:type items: 比如说 一个包含字符串的列表,[string, ...]
"""
pass
from typing import List
def example(items: List[str)):
""" 解释example干什么的 """
pass
python3.9 后 可以直接
list[str]而不需要typing.Listtype-hinting-generics-in-standard-collections
普通变量 蛇形 max_value
常量 全部大写 MAX_VALUE
内部变量 下划线前缀 local_var
与python关键词冲突 下划线后缀 class
trick: 有时候一个变量名在函数名罩着的情况下,有些东西是可以省略的
bool [is_superuser has_errors allow_empty]
int/float [port age radius] [user_id] [lenght_of_username max_length user_counts]
不要使用fruits作为int类型变量名,因为可能会和fruits=[‘apple’, ‘banana’]冲突,right?
索引:i, j, k
整数: n
字符串:s
异常: e
文件对象:fp
from django.utls.translation import gettext as _
同一代码段中,不要出现多个相似变量名:user, user1, user2
主要是 # 注释和前文提到的docstring 接口注释
常见以下误区
推荐解释型注释(提供无法从代码中读出的信息)和指引性注释(代码导读,方便更好理解代码)
接口注释描述函数功能以及参数说明等等,而函数自身实现细节可以在具体代码中提出
冒泡排序 略
但是变量多一般意味着函数做的太多,需要拆分
不要为了未来可能出现的变动,牺牲代码此时此刻的可读性
Explicit is better than implicit