python进阶

一行式

  • Web Serve 通过⽹络快速共享文件
# python3
python	-m	http.server
  • 列表辗平
a_list	=[[1,2],[3,4],[5,6]]
print(list(itertools.chain.from_iterable(a_list)))
#or
print(list(itertools.chain.(*a_list)))
#Output:[1,2,3,4,5,6]

对象变动

foo	=	['hello'] 
print(foo) 
#	Output:	['hello'] 
bar	= foo 
bar	+=	['world'] 
print(foo) 
#	Output:	['hi',	'bye']

对可变数据类型而言,每当你将⼀个变量赋值为另⼀个可变类型的变量时,对这个数据的任意改动会同时反映到这两个变量上去。新变量只不过是⽼变量的⼀个别名⽽已。

def add(num,target=[]):
	print(id(target))
    target.append(num)
    return target
add(1) 
# Output:94637112   
#	      [1]
add(2) 
# Output:94637112 
#         [1,2]
add(3) 
# Output:94637112 
#         [1,2,3]

在Python中当函数被定义时,默认参数只会运算⼀次,而不是每次被调用时都会重新运算。一般在函数中不要定义可变类型的默认参数,上面函数可修改为:

def add(num,target=None):
	if target is None:
	   target = []
	print(id(target))
    target.append(num)
    return target

函数缓存

from functools import lru_cache

@lru_cache(maxsize=12)
def fib(n):
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)
    
print([fib(n) for n in range(10)])
  • maxsize说明最多缓存多少个返回值
  • fib.cache_clear()情况缓存值

__solts__魔法

在Python中,每个类都有实例属性。默认情况下Python⽤⼀个字典来保存⼀个对象的实例属性。它允许我们在运⾏时去设置任意的新属性。 然而,对于有着已知属性的⼩类来说,它可能是个瓶颈。这个字典浪费了很多内存。 Python不能在对象创建时直接分配⼀个固定量的内存来保存所有的属性。因此如果你创建成千上万个对象,它会消耗掉很多内存。 不过还是有⼀个⽅法来规避这个问题。这个⽅法需要使⽤__slots__来告诉Python不要使⽤字典,而只给⼀个固定集合的属性分配空间。

# 不使⽤__slots__
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.set_up()
        ...

# 使⽤__slots__
class Person(object):
    __slots__ = ['name', 'age']

    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.set_up()
        ...

枚举 Enumerate

枚举(enumerate)是Python内置函数,它允许我们遍历数据并⾃动计数。可选参数允许我们定制从哪个数字开始枚举。

my_list = ['apple', 'banana', 'grapes', 'pear']
for c, value in enumerate(my_list, 1):
    print(c, value)
    # 输出: (1,	'apple') (2,'banana') (3,'grapes') (4,'pear')

枚举也长用来创建包含索引的元祖列表,例如:

my_list = ['apple', 'banana', 'grapes', 'pear']
counter_list = list(enumerate(my_list,	1))
print(counter_list)
#输出:[(1,'apple'),(2,'banana'),(3,'grapes'),(4,'pear')]

你可能感兴趣的:(python)