IDE:pyCharm
教育版 是free的。 快捷键: Ctrl Shift F10 运行 Ctrl / 行注释/取消行注释
运算符
** 是幂 // 是整除 ps. 真是True,注意大小写
可变参数
*args
是可变参数,args接收的是一个tuple;
**kw
是关键字参数,kw接收的是一个dict。
命名关键字参数就是限制了参数名字。
可变参数既可以直接传入:func(1, 2, 3)
,又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))
;
关键字参数既可以直接传入:func(a=1, b=2)
,又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})
使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符:fun(name,*,city)
def hello(greeting, *args):
if (len(args)==0):
print('%s~' % greeting)
else:
print('%s,%s~~~'%(greeting,','.join(args)))
hello('Hi')
hello('Hi', 'flipped')
hello('hi','a','b','abc')
names=('aa','bb')
hello('hello', *names)
切片
L[起点 : 终点 : 每几个输出一个]
代码语言:javascript复制>>>'ABCDEFG'[::2]
ACEG
-1代表倒数第一个元素,或者往右数1。
列表生成式
代码语言:javascript复制>>>[m n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
生成器
代码语言:javascript复制>>>g = (x * x for x in range(5))
>>>for n in g:
... print(n)
...
0
1
4
9
16
杨辉三角:
代码语言:javascript复制# -*- coding: utf-8 -*-
def triangles():
g = [1]
while True:
yield g
g.append(0)
print('len=%d',len(g))
g = [g[i] g[i-1] for i in range(len(g))]
n = 0
for t in triangles():
print(t)
n = n 1
if n == 10:
break
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
map/reduce/filter
map(f,xx)就是把Iterable(可枚举的)的对象xx(一般是列表)传给f,结果返回一个Iterator(惰性序列)。 reduce(f,xx)就是把Iterable的对象xx依次调用两个参数的函数f:f(f(f(x1,x2),x3),x4)。 filter(f,xx)是根据f(x)为真则保留该元素,否则抛弃,来筛选序列的值。
代码语言:javascript复制# -*- coding: utf-8 -*-
#输出1到1000的回文数
def is_palindrome(n):
return str(n)==str(n)[::-1]
# 转换为字符串,再利用切片得到倒转的字符串
output = filter(is_palindrome, range(1, 1000))
print(list(output))
排序实例
代码语言:javascript复制sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']
类
继承: class 派生类名(基类名):
构造析构:
def __init__(self, name, salary):
...
def __del__(self):
...
属性:
代码语言:javascript复制hasattr(emp1, 'age') # 如果存在 'age' 属性返回 True。
getattr(emp1, 'age') # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
delattr(empl, 'age') # 删除属性 'age'
两个下划线开头,声明该属性为私有, 实例不能直接访问,可以用object._className__attrName 访问属性 两个下划线开头,声明该方法为私有方法
匿名函数
关键字lambda表示匿名函数,冒号前面的x表示函数参数。
装饰器
代码语言:javascript复制@log
def now():
...
把@log放到now()函数的定义处,相当于执行了语句:
now = log(now)
偏函数
functools.partial返回一个指定了某些参数默认值的新函数。
模块/包
abc.py作为一个模块。里面的函数fun就是abc.fun。 pakage作为一个包,可以有很多模块,那么abc.py里的fun就是pakage.abc.fun。 包可以有多级目录。 包需要有__init__.py,它本身也是一个模块,名字就是该包的名字。
任何模块代码的第一个字符串都被视为模块的文档注释 __author__记录作者
使用模块
在hello.py中导入sys模块:import sys
。sys模块有一个argv变量,用list存储了所有参数。
argv至少有一个元素,因为第一个参数永远是该.py文件的名称'hello.py'。
作用域
类似_xxx和__xxx这样的函数或变量就是非公开的(private)
pip
pip是用来安装python第三方模块(包)的。
正则表达式
包:re 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.match(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
search()搜索字符串,找第一个匹配
re.search(pattern, string, flags=0) 以及sub()替换