python的标识符
- Python 中的标识符是区分大小写的。
- 以下划线开头的标识符是有特殊意义的,如:
- _foo:以单下划线开头代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入
- __foo:以双下划线开头的代表类的私有成员。
- __foo__:以双下划线开头和结尾的 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
- 判断模块是被导入还是被直接执行 (所有的python模块都是对象,都有一个内置的属性__name__,__name__的值有2种)
- 如果模块是被导入,__name__的值为模块的文件名,不带扩展名,不带路径。
- 如果模块是被直接执行,__name__的值为缺省值‘__main__‘
代码规范
- 自然语言 使用双引号 "..." , 例如错误信息;很多情况还是 unicode,使用 u"你好世界"
- 机器标识 使用单引号 '...' , 例如 dict 里的 key
- 正则表达式 使用原生的双引号 r"..."
- 文档字符串 (docstring) 使用三个双引号 """......"""
- “#” 行、块注释,号后空一格,段落件用空行分开
- 模块名尽量使用小写命名,首字母保持小写,尽量不要用下划线
- 类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.
- 函数名一律小写,如有多个单词,用下划线隔开变量名尽量小写, 如有多个单词,用下划线隔开
- 常量采用全大写,如有多个单词,使用下划线隔开
换行
- Python语句中一般以新行作为为语句的结束符
- 可以使用斜杠( \)将一行的语句分为多行显示
- 语句中包含 [], {} 或 () 括号就不需要使用多行连接符
格式化
- 格式化字符串时,Python使用一个字符串作为模板, Python中内置有对字符串进行格式化的操作 %
- 还可以用词典来传递真实值。如下:
-
print("I'm %(name)s. I'm %(age)d year old" % {'name':'Vamei', 'age':99})
-
- 格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:
- %s 字符串 (采用str()的显示)
- %r 字符串 (采用repr()的显示)
- %c 单个字符
- %d 十进制整数
- %f 浮点数
- %% 字符"%"
- 另个更强大的字符串处理函数 str.format(),用法如下:
- print('{1},{0},{1}'.format('kzc',18) ) #18,kzc,18
- print('{name},{age}'.format(age=18,name='kzc') )
- 填充与对齐: 填充常跟对齐一起使用, ^、<、>分别是居中、左对齐、右对齐,后面带宽度。 :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
- print('{:0>8}'.format('189')) # 00000189
- print('{:a<8}'.format('189')) #189aaaaa
- 精度与类型f: 精度常跟类型f一起使用,如下图,
- print('{:.2f}'.format(321.33345)) #321.33
- .2表示长度为2的精度,f表示float类型。用,号还能用来做金额的千位分隔符
-
- print('{:,.2f}'.format(1234567890.3245)) #1,234,567,890.32
列表List
- 列表是一个有序的对象集合,可以随时添加和删除其中的元素。 表示方式为: list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]
- list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:
- list.append() 在list 末尾增加一个元素
- list.insert(n,'4') 在指定位置n后添加元素,如果指定的下标不存在,那么就是在末尾添加
- list.remove(xx) 删除list 里面的一个元素,有多个相同的元素,删除第一个
- list1.extend(list2) 合并两个list。取一个对象列表作为唯一参数。extend方法接收第二个列表,将其中的各个对象增加到现有列表。如果要将两个列表合并为一个列表,这个方法就非常有用。
- list.reverse() 将列表反转
- list.sort() 排序,默认升序
- list.sort(reverse=True) 降序排列
- 注:list 中有字符串,数字时不能排序,排序针对同类型
- len(list):列表元素个数
- max(list):返回列表元素最大值
- min(list):返回列表元素最小值
- list(seq):将元组转换为列表
- enumerate 用法:
- 切片
- name[n:m] 切片是不包含后面那个元素的值(顾头不顾尾)
- name[:m] 如果切片前面一个值缺省的话,从开头开始取(包含m)
- name[n:] 如果切片后面的值缺省的话,取到末尾
- name[:] 如果全部缺省,取全部
- name[n:m:s] s:步长 隔多少个元素取一次, 步长是正数,从左往右取; 步长是负数,从右往左取
- 注:切片同样适用于字符串,字符串也有下标
- 如何复制一个数据结构?不要使用赋值操作符复制列表;应当使用copy方法。
- 赋值操作都指向同一个数据,如果修改一个列表,另一个也会改变;
- 如果想让另一个变量引用一个现有列表,可以使用赋值操作(=)copy:list2 = list1.copy() ;
- 如果想建立现有列表中对象的副本,用他们初始化一个新列表,就一定要使用copy 方法
元组Tuple
- tuple和list非常类似,但是,tuple一旦创建完毕,就不能修改了。表示方式为: tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
- 创建tuple和创建list唯一不同之处是用( )替代了[ ]。
字典 Dictionary
- 字典是由key和value组成的,其中key和value都可以是任意的类型,字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。
- 列表是有序的对象结合,字典是无序的对象集合,表示方式为: tinydict = {'name': 'john',2:6734, 'dept': 'sales'}
- 基本用法:不允许同一个键出现两次。
- print tinydict.keys() #输出所有键
- print tinydict.values() # 输出所有值
- print tinydict[2] #6734 输出键为 2 的值
- print tinydict["dept"] #sales
- 创建时如果同一个键被赋值两次,后一个值会被记住
- 键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行
Python中*args和**kwargs的区别
- *args :用来将参数打包成tuple给函数体调用
- **kwargs: 打包关键字参数成dict给函数体调用
运算符
- % :表述取余,(小数)a = 10,b = 3.0,print a%b #1.0 (整数)a = 10,b = 3,print a%b #1 可以看出其实小数就是相当于在整数的求解结果后面加小数点和0
- **: 表示幂,a = 2,b = 3, print a**b #2^3 = 8
- //: 表示取整除,返回商的整数,a = 10,b = 3,print a//b #3 a = 10,b = 3.0,print a//b #3.0
- 不等于的两种表示方法:!=, <>
- 逻辑运算符:and, or, not
- 成员运算符:in,not in
- is 与 == 区别:
- is 用于判断两个变量引用对象是否为同一个
- == 用于判断引用变量的值是否相等。
- ifelse语句:python 并不支持 switch 语句,所以多个条件判断,只能用 ifelse 来实现
- 查看变量的类型:type 和 isinstance
- fabs和abs的区别:
- fabs()是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法,
- abs是返回a的数值类型,而fabs不管是int或者float,都会返回的是float
文件I/O
- 键盘输入:input,raw_input
- 文件操作语法:文件:file object = open(file_name [, access_mode][, buffering])
- access_mode:打开文件的模式,取值如下:
-
文件的几个方法:
-
打开文件 file = open("xiong.txt","r+")
-
查看打开文件的文件名:print file.name
-
查看打开文件的访问模式: print file.mode
-
查看打开文件是否关闭:print file.closed
-
关闭文件: file.close()
-
查看文件内的当前位置:file.tell(); 换句话说,下一次的读写会发生在文件开头这么多字节之后
-
向打开的文件写入字符串:file.write("sssss") 首先要确定文件的模式为: w 的
-
重命名:import os os.rename("xiong.txt","index.txt")
-
删除文件:import os os.remove("xiong.txt")
-
读取文件:file.read(10),如果未给定或为负则读取所有,首先要确定文件的模式为:r 的
-
设置文件的位置:file.seek(0,0) 设置文件当前位置
-
异常处理
- Python中常见的异常类型如下:
- AttributeError: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
- IOError: 输入/输出异常;基本上是无法打开文件
- ImportError: 无法引入模块或包;基本上是路径问题或名称错误
- IndentationError: 语法错误(的子类) ;
- IndexError: 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
- KeyError: 试图访问字典里不存在的键
- NameError: 使用一个还未被赋予对象的变量
- SyntaxError Python:代码非法,代码不能编译
- TypeError: 传入对象类型与要求的不符合
- UnboundLocalError: 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
- ValueError: 传入一个调用者不期望的值,即使值的类型是正确的
- Python中的异常处理机制
- 在Python当中,若一个程序在运行的时候出错,Python解释器会自动的在出错的地方生成一个异常对象,而后Python解释器会自动的在出错地方的附近寻找有没有对这个异常对象处理的代码,所谓异常处理代码就是try……except语句,如果没有,Python解释器会自动的将这个异常对象抛给其调用函数,就这样层层抛出,如果在main当中也没有对这个异常对象处理的代码,Python解释器(实际上是操作系统)最后会做一个简单粗暴的处理,将整个程序给终止掉,并将错误的信息在显示屏上输出。
- Python中的异常处理方法
- 示例代码:
-
try: msg = input(">>") print(int(msg)) except Exception as e: print("异常的类型是:%s"%type(e)) print("异常的内容是:%s"%e) else: print('如果代码块不抛出异常会执行此行代码!') finally: print('不管代码块是否抛出异常都会执行此行代码!')
- 结果如下:
-
参考资料:
- https://www.cnblogs.com/zyq-blog/p/5946905.html
- https://www.cnblogs.com/fireporsche/p/6974274.html
- https://www.cnblogs.com/chendai21/p/8125422.html