python技巧(2)

any的用法

1
if any(name.endwith('py') for name in files)

其中如startwith()与endwith()方法中如果有多个可匹配对象,必须输入一个元组。

分割字符串

使用了多个界定符的情况下,界定符可以是逗号,分号,或者是空格,并且后面紧跟着任意个空格。需要注意是否使用了括号即捕获分组,形如(?:….)为非捕获分组。

1
2
line='asdf fnfkjdjs,djjwe;djwe' 
a=re.split(r'(?:;|,|\s)\s*',line)

生成器表达式

  • 如果想将字符串strip操作和其他迭代操作相结合,可以使用生成器表达式

    1
    lines=(line.strip() for line in f

    这种方式十分高效,因为不需要预先读取所有数据放到一个临时列表,仅仅只是创建一个生成器。

  • 使用 + 操作符去连接大量的字符串效率低下,加号连接引起内存复制以及垃圾回收操作。也可以利用生成器表达式转换字符串并合并。

    1
    2
    data=['acm',3,4,5]
    dada_new=','.join(str(d) for d in data)

python3.8新特性

使用asyncio.run()高级API

1
2
3
4
5
6
7
8
9
10
import asyncio

async def print_hello():
print('hello')
await asyncio.sleep(1)
print('hello again')

print('开始运行')
asyncio.run(print_hello())
print('进入循环')

函数的嵌套

函数嵌套能保证内部函数的隐私,只能被外部函数所调用和访问,不会暴露在全局作用域,若函数内部有一些隐私数据(数据库用户以及密码),不想暴露在外面,就可以使用函数嵌套。

1
2
3
4
5
def connect():
def get_DB():
return host,username,password
conn = connector.connect(get_DB())
return conn

同样的,合理使用函数嵌套,也可以提高程序的运行效率。使用递归的方式来计算一个数的阶乘,在计算之前,要检查输入是否合法。写成函数嵌套的话,输入是否合法只检查一次,而不使用嵌套的话,每调用一次递归,就会检查一次。

0%