我收藏夹“python/学习重难点”中项目太多了,在此整理方便查阅。
Python3中
/为浮点数除法,a//b相当于math.floor(a/b),舍弃小数部分用math.trunc()。round(number[,ndigits])保留ndigits位小数,并四舍五入,且“奇进偶不进”。(字符串格式化中保留小数位数规则相同)Python3中十六进制字面量以
0x开头,八进制和二进制分别为0o和0bPython中函数调用时可指定参数名而无视参数顺序(定义时有默认顺序和默认值); 定义函数时使用
*args和**kw(args和kw为惯例,非语法强制要求)使函数中args成为包含所有未命名参数的list,kw成为所有有名但未在函数定义中声明的参数的dict;func(*args,**kw)使args(list)和kw(dict)被“拆开”并将其元素传入函数func;def func(a, b, *, c='see', d)使c和d必须以命名的方式传入,称为命名关键字参数,c有默认值'see'; 如果参数列表中有*kw,则其后的参数皆被认为是命名关键字参数。Python模块(module): 标准写法为(来自使用模块 - 廖雪峰的官方网站):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
__author__ = 'Michael Liao'
import sys
def test():
args = sys.argv
if len(args)==1:
print('Hello, world!')
elif len(args)==2:
print('Hello, %s!' % args[1])
else:
print('Too many arguments!')
if __name__=='__main__':
test()其中模块的文档注释可用
__doc__访问。Python 用下划线作为变量前缀和后缀指定特殊变量。
_xxx:模块中此变量不能用from module import *导入 ,在类中为protected成员__xxx__:系统定义名字__xxx: 类中的私有变量名 类成员名称以__开头的如__name无法用此名从外部直接访问,但实际上可通过_classname__membername的名字访问(不同版本的Python解释器可能会把__name改成不同的变量名)
sys模块中的变量argv为命令行参数的列表,第一个元素为文件名;sys.path为列表,储存所有引入模块时搜索的路径,可在运行时添加。亦可增加环境变量PYTHONPATH。isinstance()可判断一个对象是否是一个类的实例,第二个参数可为以类名为元素的元组以判断对象是否为其中之一。给类绑定的成员和方法(初始设定或运行时添加)其实例皆可使用,除非实例将其覆盖;被同名变量/函数覆盖的成员被删除后将重新指向类所带成员。
可使用
__slots__限制类成员,在定义类时将__slots__绑定给类并赋值为一个tuple(经测试list亦可,但定义之后改变__slots__并无作用),tuple中含有被允许的成员名(字符串形式)。__slots__特性不被继承,如果子类也定义__slots__,则子类被允许的成员名为子类和父类的__slots__之和。Python中
0、''、[]、()、{}、None为假(False);其它任何东西都为真(True)。但是可以在类中定义特定的方法使得类实例的演算值为假。and和or运算并不直接返回bool值,而是返回比较对象,具体为:and:从左到右扫描,返回第一个为假的表达式值,无假值则返回最后一个表达式值。or:从左到右扫描,返回第一个为真的表达式值,无真值则返回最后一个表达式值。 可用(condition and [a] or [b])[0]当做C中的condition?a:b,注意[a]恒为True
在
for中迭代dict: 默认情况下,dict迭代的是key,即直接for k in dict则k遍历dict的所有key。如果要迭代value,可以用for value in d.itervalues(),如果要同时迭代key和value,可以用for k, v in d.iteritems()。Python中函数
enumerate(iterable[, start])可每次yield一个tuple(index,value)使iterable配上索引,如for i,v in enumerate(list1),可选参数start为索引初始值,默认为0。 应用示例——利用其统计文件行数:1
2
3count = -1
for index, line in enumerate(open(filepath,'r')):
count += 1这个方法快于
count = len(open(filepath, 'r').readlines())python中重新加载模块的方法为
reload(),2.7以下为内置函数,3.3以下在imp中,3.4以上在importlib中。python标准库的
itertools库count(start[, step])无限计数递增迭代。cycle(p)无限循环周期性迭代,p为可迭代对象。repeat(elem [,n])重复迭代,对elem重复迭代n次,默认无限次。product(* iterables,repeat = 1生成*iterables中的对象之间的笛卡尔积,repeat表示重复的次数。permutations(iterable [, r])长度为r的排列,有顺序combinations(iterable , r)长度为r的组合,无顺序
python的集合类型
- 可用
{a,b,c,...}初始化集合,但{}是空字典,空集合是set - 集合操作:
s.add( x )添加单个元素。s.update( iterable )添加多个元素s.remove( x )移除元素,不在集合中会报错s.discard( x )移除元素且不报错s.pop()移除并返回一个元素,空集报错
- 集合间操作:
a - b差集a | b并集a & b交集a ^ b对称差 详见 Python3 集合 | 菜鸟教程
- 可用