python 笔记

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[起点 : 终点 : 每几个输出一个]

>>>'ABCDEFG'[::2]
ACEG

-1代表倒数第一个元素,或者往右数1。

列表生成式

>>>[m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

生成器

>>>g = (x * x for x in range(5))
>>>for n in g:
...        print(n)
...
0
1
4
9
16

杨辉三角:

# -*- 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)为真则保留该元素,否则抛弃,来筛选序列的值。

# -*- 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))

排序实例

sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

继承: class 派生类名(基类名):
构造析构:

def __init__(self, name, salary):
   ...
def __del__(self):
  ...

属性:

hasattr(emp1, 'age')    # 如果存在 'age' 属性返回 True。
getattr(emp1, 'age')    # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
delattr(empl, 'age')    # 删除属性 'age'

两个下划线开头,声明该属性为私有, 实例不能直接访问,可以用object._className__attrName 访问属性
两个下划线开头,声明该方法为私有方法

匿名函数

关键字lambda表示匿名函数,冒号前面的x表示函数参数。

装饰器

@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()替换