基本规范
语法主体
关键字:区分大小写,常用的关键词有:
逻辑运算关键字: and、or、not;运算布尔值:False、True,空值:None;
流程语句关键字:if、elif、else,for、in,while、break、continue;
函数和类相关关键字: class、def、return、pass(空语句块)
其他关键字: import、from、as、global、nonlocal、 with、assert、raise;
标识符:用于命名、区分、实体、引用和访问实体(类方法变量等)的作用,由数字、字母、下划线组成,不能数字开头,区分大小写。
单行注释:与shell一样,每行用“#”开头;
多行注释:用三对英文双引号或单引号,引号最中间是注释内容( """多行""",或 '''注释''' )。
代码块:通常缩进和英文冒号“ : ”组合使用的方式表示代码块,每4个空格或者1个制表符(Tab)表示一个缩进级别。
语句:默认每条代码以换行符结尾(即一行一条代码),一行多条代码时用英文分号( ; )隔开;
错误异常:Python 的异常处理机制允许我们捕获并处理一般错误(非严重错误),而不会导致程序立即终止,会将错误信息输出后继续执行正常的部分(错误之前)。
"""
代码示例
"""
def my_function():
# 方法代码块
my_variable = 5
if isinstance(my_variable, int):
# 流程语句代码块
print("my_variable是整数类型")
else:
print("my_variable不是整数类型")
'''
代码结束,输出结果:my_variable是整数类型
'''
命名规范
概述:以提高代码的可读性和可维护性为基本原则,避免使用Python的关键字作为标识符,使用一致而有意义的命名。
类命名:使用大写字母开头的驼峰命名法(CamelCase)来命名类,通常应该是名词或名词短语,例如:MyClass, EmployeeRecord。
变量、函数、模块和包:使用小写单词,应具有描述性,能够清晰表达其功用或分类,多个单词用下划线“_”连接。除迭代计数外少用单字符。例如:my_variable, calculate_area。
常量命名:使用全大写字母和下划线来命名常量,例如:MAX_VALUE, PI。
私有成员命名:在私有变量、函数或方法名前加上单个下划线,表示它们是私有成员,只在模块内部使用,不对外公开。例如:_private_variable, _private_method。
数据与操作
数据类型
概述:在 Python 中没有如 Java 一般的基本数据类型,Python 中的数据类型都是以对象作为表达形式,都是对象。因为是对象,所以它们具有相应的方法和属性,可以进行操作和访问。但可以根据复杂程度不同和 Java 中的基本数据类型的理念分为基本型与复合型。也可以根据数据类型的可变性进行划分(即能否直接修改对象内容,或是需要新建一个对象记录需要修改的内容),怎么理解方便怎么记,以下是一种分类。
分类:数值型: 整型int、浮点型float、复数类型complex、布尔型bool;
序列类型(有序的数据集,可以通过索引访问):字符串str、元组tuple、列表list;
散列类型(无序的数据集):集合set、字典dict;
PS:元组、列表的元素可以是任意类型的对象(即支持嵌套),包括数字、字符串、布尔值、元组、列表、字典等。字典的key(不可变唯一)、集合的元素(需要支持哈希)不能是可变类型的数据对象(即不能是列表、集合和字典)
变量定义:因为Python是动态语言,因此定义数据时不用声明数据类型,Python自动识别,但字符串、元组、列表、集合、字典的表示有固定的格式。
PS:通常说的名词变量,只是用于存储数据的标识符,与标识符对应的数据类型是否可变无关。
数据类型 | 定义格式 | 说明 |
字符串 | 使用引号括起来 | 不可变,可用单引、双引或三引号来定义 |
元组 | 使用 ( ) 圆括号括起来 | 不可变,通过逗号分隔元素,可省略括号 |
列表 | 使用 [ ] 方括号括起来 | 可变的,通过逗号分隔元素,可省略括号 |
集合 | 使用 { } 花括号括起来 | 逗号分隔元素,元素唯一无序,自动去重 |
字典 | 使用 { } 花括号,元素K-V对 | K唯一,冒号【 : 】分隔键和值,逗号【 , 】分隔键值对 |
变量的数据类型获取:一般使用 “type(variable_name)” 方法。也可以用 “isinstance(variable_name, date_type)” 的方法判断某个变量是否是一个指定的数据类型,输出为bool值(如上代码)。
my_int = 10
print(type(my_int)) # 输出: <class 'int'>
my_float = 3.14
print(type(my_float)) # 输出: <class 'float'>
my_str = "Hello, World!"
print(type(my_str)) # 输出: <class 'str'>
my_tuple = (1, "hello", [1, 2, 3], {"name": "John"})
print(type(my_tuple)) # 输出: <class 'tuple'>
my_list = [2.5, True, (4, 5), {"apple", "banana"}]
print(type(my_list)) # 输出: <class 'list'>
my_set = {1, 2, 3, "apple", (4, 5)}
print(type(my_set)) # 输出: <class 'set'>
my_dict = {"name": "John", "age": 25, 1: "apple", (3, 4): [1, 2, 3]}
print(type(my_dict)) # 输出: <class 'dict'>
PS:再次强调,根据输出的数据类型结果,如“<class 'int'>”,记住首先属于一个被称为 int 的 class 类的实例,即是一个对象
数据转换
概述:Python数据类型之间的转化,一般直接将要转化的变量作为传入参数,直接调用要转化类型的构造函数。以此作为分类可以分为三种情况,即可以直接构造转化,通过特定函数处理后构造转化,不能转化三种情况。
函数 | 说明 | 备注 |
int( x , base ) / int( x ) | x (必须可转)转为整数,base表示进制,默认10 | x 可以是 2 / 8 / 16 进制等表达,如"0xFF"、"0b101"、b'20' |
float( x ) | 将 x 转换为⼀一个浮点数 | |
str( x ) | 将对象 x 转换为字符串 | |
eval( str ) | str 可以理解为代码块,整体相当于有返回值的函数 | 可将 str 数据类型的字典内容转为 dict 数据类型 |
tuple( s ) | 将序列 s 转换为⼀一个元组 | |
list( s ) | 将序列 s 转换为⼀一个列表 | |
repr( x ) | 转对象 x为字符串,可以看做一种简单的序列化方式 | 其结果可以拿给“eval( )”函数再次计算 |
complex( real , imag ) | 创建复数, real为实部,imag为虚部(可选参数) | |
chr( x ) /ord( x ) | 整数 x 转为对应 Unicode 字符 / ASCII整数值 | |
oct( x ) / bin( x ) / hex( x ) | 整数 x 转为对应 2 / 8 / 16 进制 |
PS:1、序列tuple、list之间可以直接转,区别只是前者不可变,后者可变;
2、集合转为序列(元组或列表)时,内部元素的顺序可能会发生改变,序列(元组或列表)转为集合时,会自动去重,同时元素位置改变;
3、字符串可以转为列表(.split()函数)、字典(原数据是字典类型K-V对),以及元组、集合(按字符进行拆分);
4、数值类型(如int、float等)不可迭代,不能转换为多元素的元组、列表、集合或字典,但可以转化为str。
5、字典可以将键、值或K-V对整体转化为元组、集合或列表,进行反向转化是,需声明K-V关系,注意Key的唯一性。
6、布尔型可以转化为 int 或 float ,但是不能直接转为复数(complex),True 转为1、1.0,False转为0、0.0。
# 字符串转列表
str1 = 'abc'
print(list(str1)) # ['a', 'b', 'c']
# 切分字符串
str2 = 'a b c'
print(str2.split()) # ['a', 'b', 'c']
str2 = "{'a': 97, 'b': 98}"
print(eval(str2)) # {'a': 97, 'b': 98}
# 列表转字符串
list1 = ['a', 'b', 'c']
print(''.join(list1)) # abc 以指定字符分隔字符串,元组、集合转str过程一样
print(str(list1)) # "['a', 'b', 'c']"
# 两个元组转字典
tuple1 = ('a', 'b')
tuple2 = (97, 98)
print(dict(zip(tuple1, tuple2))) # {'a': 97, 'b': 98}
# 嵌套元组转字典
tuple3 = (('a', 97), ('b', 98))
print(dict(tuple3)) # {'a': 97, 'b': 98},集合、列表转字典时情况与之一样
# 字典转字符串
dict1 = {'a': 97, 'b': 98}
print(str(dict1)) # "{'a': 97, 'b': 98}",反转用eval(str)
# 字典转列表
dict1 = {'a': 97, 'b': 98}
print(list(dict1.items())) # [('a', 97), ('b', 98)],字典转集合、元组情况一样
my_tuple = (("name", "Alice"), ("age", 30))
# 转换为键的列表
key_list = [item[0] for item in my_tuple]
print(key_list) # 输出: ['name', 'age']
# 转换为值的列表
value_list = [item[1] for item in my_tuple]
print(value_list) # 输出: ['Alice', 30]
bool_value1 = True
bool_value2 = False
print(int(bool_value1)) # 输出:2
print(float(bool_value2)) # 输出:0.0
输入输出
常用输出
概述:这里讲的Python输出,主要是如何传递参数的方式,主要有4种,一种是1.6版本开始的“旧式字符串格式”,一种是版本2.6开始的“{ }”+“.format”方式传递,一种是版本3.6以后使用 f-string(格式化字符串字面值) ,第四种是做字符串的拼接(类似于Java),主要掌握第三种,前两种见到知晓意思就行。
格式符号 | 传入值的格式转换成 | 备注 |
%s | 字符串 | |
%d | 有符号十进制整数 | % 和 d 之间可加 0x,x为整数,表示用0补前几位 |
%u | 无符号⼗进制整数 | |
%f | 浮点数 | % 和 f 之间可以加 .x ,表示精确到小数点几位 |
%c | 字符 | |
%x / %X 、%e / %E | 小 / 大写的 十六进制数、科学计数法 |
PS:print( ) 是常用的输出方式,Python中默认输出换行,完整形式为【 print('info', end="\n") 】,指定以换行转义字符“\n”结尾,可以根据需要进行自定义
import logging
name = "John"; demo_int = 45;
# 旧式字符串格式
logging.basicConfig(level=logging.INFO)
logging.info("User %s is %d years old.", name, demo_int)
print('我的体重是%.2f公斤' % demo_int) # 输出: 我的体重是45.00公斤
print('这串数字是%10d' % demo_int) # 输出: 这串数字是 45
print('这串数字是%010d' % demo_int) # 输出: 这串数字是0000000045
# {}+.format( ) 示例
with open("output.txt", "w") as file: # w 表示写操作
file.write("Age: {}\n".format(demo_int)) # Age:45 写入到output.txt文件
print("My name is {}.".format(name)) # 输出: My name is John.
print("My name is {} and I am {} years old.".format(name, demo_int))
# 输出: My name is John and I am 45 years old.
# f-string(格式化字符串字面值),推荐主要掌握这一种
print(f"My name is {name} and I am {demo_int} years old.")
# 输出: My name is John and I am 45 years old.
常用输入
概述:输入在Python中,即程序接收⽤户输⼊的数据的功能,使用 “input( str )” 进行实现。程序执⾏到 input 时,会等待⽤户输⼊完成之后才继续向下执⾏。
PS:Python 默认将输入作为字符串 str 类型进行存储,可根据需要进行数据类型转换。
password = input('请输⼊入您的密码:')
print(f'您输⼊入的密码是{password}')
print(type(password)) # 输出:<class 'str'>