欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python进阶

程序员文章站 2022-06-04 09:08:10
...

一行式

  • 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进阶