python中一切皆对象
map
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
print不换行
1 | print '--------', |
指定解码用utf-8(以下代码添加到文件头部)
1 | # -*- coding: utf-8 -*- |
运算
1 | x = 2**10 # 幂运算2^10 |
pycharm高亮
1 | # todo: |
匿名函数
1 | sum = lambda arg1, arg2: arg1 + arg2 # 函数也是一个对象 |
变量
- strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
- 不可变类型:变量赋值 x=5 后再赋值 x=10,这种情况相当于生成了新的x 原来的5被丢弃了
- 可变类型:变量赋值list_x = [1,2,3] 后再赋值list_x = [1,2],这种list_x没有动,只是内部的一部分被修改了
函数的参数传递
- 不可变类型:类似c++的值传递,如整数、字符串、元组。如fun(x),传递的只是x的值,没有影响x对象本身。比如在 fun(x)内部修改x的值,只是修改另一个复制的对象,不会影响x本身。
- 可变类型:类似c++的引用传递,如列表、字典 。如fun(list_x),则是将list_x真正的传过去,修改后fun外部的list_x也会受影响
- 严格意义在python中我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
作用域
- 全局变量想作用于函数内,需加 global
- python中的命名空间只有函数,不存在{}的命名空间
函数名
- 以单下划线开头_foo的代表不能直接访问的类属性
- 以双下划线开头的__foo代表类的私有成员
- 以双下划线开头和结尾的foo代表 Python 里特殊方法专用的标识,如init()代表类的构造函数。
生成器
- 斐波那契数列不获取fib函数的返回值
1
2
3
4
5
6
7
8
9def fib(max): # 生成器函数
n,a,b =0,0,1 # 初始值
while n < max: # 循环
yield b # 函数执行到这里的时候会被记录下来,在调用x.next()的时候会继续执行
a,b =b,a+b # 斐波那契向后移动
n += 1 # 跳出循环的增量
x = fib(6) # 这就是一个生成器 每次只生成一个数值(不占用内存)
for i in fib(6): # 变量生成器
print(i) # 打印生成器生产的值
装饰器
- 装饰器装饰函数,一般用于变量的校验&给传入对象添加属性
- @functools.wraps(func) 可以保证装饰器不会对被装饰函数造成影响
- 不带参数的装饰器,数字是函数执行的顺序
1
2
3
4
5
6
7
8
9def debug(func): # 1装饰器的名字 传入函数
# 2可以保证装饰器不会对被装饰函数造成影响
def wrapper(*args, **kwargs): # 4获取被装饰函数的变量
pass # 5你已经拿到了变量,这里就可以处理对应相关的业务逻辑
return func(*args, **kwargs) # 6运行并返回被装饰的函数
return wrapper # 3执行装饰函数
# 调用装饰器
def say(something): # 被装饰函数
pass # 被装饰函数业务逻辑 - 带参数的装饰器,数字是函数执行的顺序
1
2
3
4
5
6
7
8
9
10
11
12
13
14def logging(level): # 1装饰器的名字 传入装饰器的参数
def wrapper(func): # 3传入被装饰函数
# 4可以保证装饰器不会对被装饰函数造成影响
def inner_wrapper(*args, **kwargs): # 6获取被装饰函数的变量
pass # 7你已经拿到了所有变量,这里就可以处理对应相关的业务逻辑
return func(*args, **kwargs) # 8运行并返回被装饰的函数
return inner_wrapper # 5执行内部装饰函数
return wrapper # 2执行装饰函数
# 调用装饰器
def say(something): # 被装饰函数
pass # 被装饰函数业务逻辑
# 调用装饰器
def do(something): # 被装饰函数
pass # 被装饰函数业务逻辑