Python基础理论(一):初步了解Python编码规范、数据类型和变量、格式化输出、”__main__”和执行等

428次阅读
没有评论

一、基本概念

Python 是一种面向对象的、动态的解释型编程语言,无需编译即可执行,相比于 C++、Java 等高级语言更加轻量化。Python 追求和遵循极简、优雅主义,编码风格受 Linux、C 语言影响较深,官方编程规范中比较推荐使用 小写字母+下划线 来给标识符命名。

二、编码规范

Python 语言中语句间不使用英文 分号”;” 来分割,用行+回车来替代,回车 表示的是一个逻辑行的结束或者代码块的开始。

Python 语言通过 代码缩进 来表示层次关系,和 C++、Java 等语言通过 花括号{} 来表示层次结构有明显不同。Python 中花括号 {} 仅用来表示字典数据类型或者集合数据类型。

Python 中英文 冒号”:” 表示代码块的开始,方法、类的定义,或者 if、for、while 等结构体都会使用到。

Python 对大小写敏感,如 A 和 a 代表两个不同的变量。

1、命名规范

(1)标识符由数字、字母和下划线组成;

(2)不能以数字开头;

(3)不能是系统关键字。

2、命名原则

(1)用英文或中文拼音,尽量不使用特殊字符;        # Python 支持中文字符,但不推荐使用

(2)见名知意,单词缩写时要规范;        #如单词 button,缩写为 btn 是比较易于理解的

(3)变量、方法使用全小写字母+下划线的方式;        #如 get_name()

(4)类名每个单词首字母大写,对象首个单词首字母小写;

#如 class NetConnInstance、objNetConnInstance = NetConnInstance(url,UA,post)

(5)类中的变量一般以双下划线/单下划线+全小写字母表示,双下划线+小写字母 表示私有变量,类外无法访问;单下划线+小写字母 表示保护变量,本模块、类、对象或子类对象可以访问,但被导入时该变量不能引用;

(6)常量使用全大写字母。

# Python 中没有常量的概念,只能使用全大写字母的变量进行模拟,如 PI = 3.14、G = 9.8 ,PI 在 Python 解释器中还是被当做变量处理

Python 中,所有以”__”双下划线包起来的方法,统称为”Magic Method”魔术方法,是python底层已经定义和实现的方法,可以直接访问。如”__init__(self,name)”。

3、代码风格

(1)以 4 个空格作为一个代码缩进量;

(2)使用逗号分割的序列中,应该在逗号后添加一个空格;

(3)二元运算符的两侧应该各添加一个空格。

注意,tuple、list、dict 等数据类型内如有二元运算符,运算符两侧不要添加空格。

#第(3)项意义不大,就是阅读起来更舒服而已,Python 这该死的刻在骨子里的优雅。

4、代码注释

Python 中以”#”号标识注释行,注释应解释方法、类、代码块的作用和关键参数的来源。

5、异常处理

在编码实现 文件打开与读写、文件下载、网络连接、数据库连接 等不确定性操作时,应尽量使用 try-except 语句,对可能发生的异常进行捕获和处理,避免一个小问题导致整个程序崩溃。

应该捕获尽可能小的异常,并正确处理,而不是简单的抛出、捕获、忽略。

更多 Python 编程规范信息,可参考官方 PEP8 规范指引。

三、数据类型和变量

Python 中每个变量必须赋值后才会被创建,才能使用;赋值使用”=”,赋值”=”左侧为变量名,右侧为值。和 C++、Java 语言不一样的是,定义一个变量不需要显式的指定数据类型,变量类型由变量值动态决定。

#给变量直接赋不同类型的值,test = ‘this is a string type’、test = 3、test = [1,2,3,4]、test = True 等等。

Python 支持的数据类型可分为数字型和非数字型:

1、数字型:

(1)整型(int);

(2)浮点型(float);

(3)布尔型(bool):True or False,可进行 and,or,not 运算;        #True 默认可转换为整型 1;False 默认可转换为整型 0

2、非数字型:

(1)字符串(string): 和 C++、Java 中类似,Python 中字符串可用单引号、双引号表示,推荐使用单引号

当字符串中同时存在单引号、双引号时,双引号会被当做普通字符输出,如 print(‘this is a “string”‘),输出结果是:this is a “string”

Python基础理论(一):初步了解Python编码规范、数据类型和变量、格式化输出、

(2)元组(tuple): 是一种不可变序列,和 list 列表数据类型正好相反,使用小括号表示,通过下标(从 0 开始)来获取元组中的某个元素。如 tup = (1,2,3,4)、tup[3] 即表示数值 “4”

值得注意的是,元组中所谓的不可变是指引用不可变,如果元组中有 list 列表数据时,还是可以进行修改的。如下图:

Python基础理论(一):初步了解Python编码规范、数据类型和变量、格式化输出、

修改 change_tup[3][0],即 [4,5] 中”4″的值为 444,可以修改成功;

但是如果直接修改 tup[3],即 (1,2,3,4) 中”4″的值为 444 时,会提示报错:TypeError: ‘tuple’ object does not support item assignment

(3)列表(list): 是一种可变的序列,使用中括号表示,可通过索引/负数索引来灵活取值、设置。负数索引用 -1 表示最后一个元素或逆序。list 数据类型支持各种操作,如插入(insert)、POP弹出(pop)、附加(append)、负数索引([-1][1])等等。

Python基础理论(一):初步了解Python编码规范、数据类型和变量、格式化输出、

(4)集合(set): 和接下来要介绍的 Dict 字典数据类型一样,使用花括号{}表示,但集合数据类型要求花括号内的元素不能重复。如果花括号中有重复值时,只会输出第一个重复值,后续的被自动折叠。集合数据类型也支持比较多的操作,如添加(add)、POP弹出(pop)等。

特别说明,集合/字典数据类型中可以加入元组,但不能有列表元素,如 {1,2,3,[1,2,3]} ,这样是不允许的,会提示错误:TypeError: unhashable type: ‘list’。

Python基础理论(一):初步了解Python编码规范、数据类型和变量、格式化输出、

(5)字典(dict): 使用花括号{}表示,花括号内是空的或者键值对。键和值使用英文冒号”:”分开,分组间用英文逗号”,”分开。dict 数据的键 keys 必须是不可变对象(hashable),dict 内部存放的顺序和 keys 放入的顺序无关。

#定义一个字典类型数据,如 user = {‘height’:’180cm’,’weight’:’75kg’,’age’:’20’}

字典(Dict)是 Python 语言中最经典,也是使用最频繁的一种数据类型了。以下简单列举一些常用操作:

判断一个键是否在字典中:'name' in user        #返回布尔类型True/False

添加一个新键或更新键值: user['name'] = 'xiaoming'

批量更新修改多个键值: user.update({'name':'xiaoming','score':'90'})

查询一个键值: user['age']        

#更稳妥的用法是使用 get 方法,如 user.get('age',18),如果字典中没有'age'键,则直接给一个default 键值 18。

获取所有键、值、键值对: user.keys()、user.values()、user.items()

遍历字典(键和值): for key in user:

                       print(key,user[key]) 

元组、列表、集合和字典数据类型比较:

除列表外,元组、集合、字典数据类型都是可哈希(hashable)的,即其内的元素不会动态改变;

元组的速度和性能高于列表,同等条件下优先使用元组。

四、运算符及格式化输出

1、运算符及数值表示:

Python 支持单一赋值、统一赋值和对称赋值;        如 a = 1、a = b = c = 1、a,b = 1,2

Python 中给变量赋整型数值时,支持 16 进制(0x)、8 进制(0o)、2 进制(0b)和 10 进制(默认)形式;        #如 a = 0x11,输出打印变量 a 时,值自动转换成 10 进制数 17

浮点数支持使用科学计数法进行表示,如 a = 1.1e-9;        #1.1e-9=1.1×10^-9(10的-9次方)

转义字符使用”\”,r”(r+单引号)表示单引号范围内的字符不转义;        #如print(r’\abc*?””‘),输出 \abc*?””

通用运算符和日常使用习惯或者其他编程语言一致,Python中 除法 运算符需要注意一下:

1、”/” 计算结果是浮点数;

2、”//”计算结果是整数;

3、”%”取余数/取模。

如:

4 / 3 = 1.3333333333333333

4 // 3 = 1

4 % 3 = 1

2、格式化输出:

类似 C、C++ 中格式化输出,在 print() 中使用格式化操作符%。

%s:表示字符串;

%d:表示有符号十进制整数,%05d 表示输出 5 位的整数,不足部分用 0 补全

%f:表示浮点数,%.2f 表示小点数后显示两位

%%:输出 % 符号。

使用示例:

Python基础理论(一):初步了解Python编码规范、数据类型和变量、格式化输出、

五、__main__与Python主函数

首先,需要强调的是,Python 中没有主函数的概念。我们运行哪个 .py 文件,哪个 .py 文件就是”主函数”,它可以正常导入和引用其他 .py 文件或模块上定义的类和方法,它的运行逻辑和 bat、bashshell、powershell 等其他任何语言编写的脚本一样,从上到下执行。if __name__ = “__main__” 更多的是照顾 C++、Java 等编程人员的使用习惯,是辅助性质的,而不是必须项。

Python基础理论(一):初步了解Python编码规范、数据类型和变量、格式化输出、

如上图所示,注释掉 NoMainTest.py 文件中的 if __name__ == “__main__” 语句,python 脚本文件照常能够调用其他 python 文件上的方法、也照常能够运行。

if __name__是一个条件判断语句,如果条件满足,就执行结构体内的语句。在Python中,__name__是个很有意思的变量,当本 .py 被当做脚本运行时,本 .py 文件的__name__的值被设置为”__main__”;而当文件被当做Module被import的时候,它的___name___值就不再是”__main__”了,而是 .py 文件名称。

这个很好验证,在主运行文件 NoMainTest.py 和被导入文件 main.py 中都定义一个print(__name__),执行一下,就会发现 main.py 上的__name__是 main,即文件名称(去除文件后缀);而主运行文件 NoMainTest.py 此时的__name__的值为”__main__”。

Python基础理论(一):初步了解Python编码规范、数据类型和变量、格式化输出、

总之,”__main__”并不是Python中主函数的概念,在任意 .py 文件上都可以定义 if __name__ = “__main__”,但是只有主执行文件上的”__main__”才会生效。所以,日常使用中,应该尽量避免在 if __name__ 结构体中写一些比较关键核心的代码,甚至直接抛弃掉这种写法。干一行爱一行,我们应该接受 Python 与 C++、Java 在编程逻辑和规范上的不同。

六、Python执行

1、Linux 平台上:

python 脚本文件首先需要指定python程序所在路径,即在文件首行添加类似 “#!/usr/bin/python3” 这样的说明信息;

通过 chmod u+x XXX.py 给 python 脚本文件添加可执行权限;

在脚本所在位置, ./XXX.py 运行;或者在任意位置,通过完整路径运行。

2、Windows 平台上:

先安装 python 程序,cmd 中输入 python -V 命令,确认 python 是否可用;

cmd 切换到 python 脚本位置,输入 python XXX.py 命令运行。在任意位置,python [path:]XXX.py 使用完整路径也是可以正常执行的。

另外,python 还支持交互模式,windows 平台 cmd 中输入 python 后回车、Linux 平台输入 python3 后回车,即进入交互模式。交互模式下,可以测试一些简单的输入输出、类型转换等,输入的语句不会被保存,当退出交互环境后立即消失。

正文完
 
itylq
版权声明:本站原创文章,由 itylq 2023-05-13发表,共计4838字。
转载说明:本站文章遵循CC-4.0国际许可协议,转载请注明出处(格式如“来源:IT摇篮曲www.itylq.com")。
评论(没有评论)