我收藏夹“python/学习重难点”中项目太多了,在此整理方便查阅。
Python3中
/
为浮点数除法,a//b
相当于math.floor(a/b)
,舍弃小数部分用math.trunc()
。round(number[,ndigits])
保留ndigits
位小数,并四舍五入,且“奇进偶不进”。(字符串格式化中保留小数位数规则相同)Python3中十六进制字面量以
0x
开头,八进制和二进制分别为0o
和0b
Python中函数调用时可指定参数名而无视参数顺序(定义时有默认顺序和默认值); 定义函数时使用
*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 集合 | 菜鸟教程
- 可用