11 个编程小技巧,使用起来更省心

正在学 Python 的个编你并不孤单,有我在这里陪着你每天学习一个 Python 小技术。技巧今天我为初学者整理了 11 个编程小技巧,使用省心使用起来非常省心,起更相信你看完定会有所收获。个编

1、技巧合并(Merge)两个字典

有两个字典,使用省心dict1、起更dict2,个编想把 dict2 的技巧内容合并(Merge)到 dict1 中,可以使用 dict1.update(dict2)

In [1]: dict1 = {  a: 1,使用省心 b: 2} In [2]: dict2 = {  b: 3, d: 4} In [3]: dict1.update(dict2) In [4]: dict1 Out[4]: { a: 1, b: 3, d: 4} In [5]:  

2、合并(Merge)两个字典,起更但不能改变原始字典

有两个字典,个编dict1、技巧dict2,使用省心现在要把 dict1、dict2 的内容合并(Merge)到 dict3 中,有两种方法:

方法一

dict3 = { } dict3.update(dict1) dict3.update(dict2) 

方法二

dict3 = { **dict1, **dict2} 

方法二使用了 ** 来解包字典,非常简洁和优雅,推荐使用。

3、对包含字典的列表进行排序

假如有这样的列表:

[{ "name": "张三", "age": 30 },{ "name": "李四", "age": 10 },{ "name": "王武", "age": 15 }]

其内部元素是一个字典,亿华云计算如何进行自定义排序呢?比如按照 age 进行排序:

list1 = [{ "name": "张三", "age": 30 },{ "name": "李四", "age": 10 },{ "name": "王武", "age": 15 }] list1.sort(key = lambda x: x["age"]) print(list1) [{ name: 李四, age: 10},  { name: 王武, age: 15},  { name: 张三, age: 30}] 

如果不能改变 list1 原有的次序,可以使用内建函数 sorted,sorted 返回排序后的结果,并不改变原始顺序:

list1 = [{ "name": "张三", "age": 30 },{ "name": "李四", "age": 10 },{ "name": "王武", "age": 15 }] sorted_list = sorted(list1, key = lambda x: x["age"]) print(sorted_list) [{ name: 李四, age: 10},  { name: 王武, age: 15},  { name: 张三, age: 30}] 

4、检查文件是否存在

方法一,使用 os.path 模块

In [2]: import os In [3]: if os.path.exists("/usr/bin/passwd"):    ...:     print("存在")    ...: 存在 

方法二、使用 pathlib(推荐使用)

In [4]: from pathlib import Path In [5]: if Path("/usr/bin/passwd").exists():    ...:     print("存在")    ...: 存在 

关于 pathlib 为什么比 os.path 好用,可以阅读求求你,别用 os.path 了。

5、获取某个目录最新的文件或目录

In [7]: import glob    ...: import os    ...:    ...: list_of_files = glob.glob(/Users/aaron/*) # * means all if need specific format    ...:  then *.csv    ...: latest_file = max(list_of_files, key=os.path.getctime)    ...: print(latest_file)    ...: /Users/aaron/web-service-gin 

更推荐你使用 pathlib

from pathlib import Path folder_path = Path(/Users/aaron) list_of_paths = folder_path.glob(*) latest_path = max(list_of_paths, key = lambda p: p.stat().st_ctime) 

6、随机密码生成器

将以下内容保存为 generate_random_password.py:

import string import random def generate_random_password():     ## 输入密码长度     length = int(input("请输入密码长度:"))     ## 密码字符范围     characters = list(string.ascii_letters + string.digits + "!@#$%^&*()")     random.shuffle(characters)     ## 随机选择字符     password = []     for i in range(length):         password.append(random.choice(characters))     random.shuffle(password)     ## 现实生成的密码     print("".join(password)) if __name__ == "__main__":     generate_random_password() 

执行结果

python generate_random_password.py 请输入密码长度:6 i3o!(o 

7、将两个列表转换为一个字典

list1 = [a, b, c] list2 = [1, 2, 3] dictionary = dict(zip(list1, list2)) print(dictionary) # { a: 1, b: 2, c: 3} 

8、测量小代码片段的执行时间

import timeit start = timeit.default_timer() [i for i in range(100000)] stop = timeit.default_timer() print(stop - start) 

timeit 是标准库提供的计时工具,还可以在命令行这样使用:

示例 1:命令行界面来比较三个不同的表达式。

$ python3 -m timeit "-".join(str(n) for n in range(100)) 10000 loops, best of 5: 30.2 usec per loop $ python3 -m timeit "-".join([str(n) for n in range(100)]) 10000 loops, best of 5: 27.5 usec per loop $ python3 -m timeit "-".join(map(str, range(100))) 10000 loops, best of 5: 23.2 usec per loop 

示例 2:通过代码中比较三个不同的表达式。

>>> >>> import timeit >>> timeit.timeit("-".join(str(n) for n in range(100)), number=10000) 0.3018611848820001 >>> timeit.timeit("-".join([str(n) for n in range(100)]), number=10000) 0.2727368790656328 >>> timeit.timeit("-".join(map(str, range(100))), number=10000) 0.23702679807320237 

timeit 内部还可以传入一个可调用对象:

>>> def fun(): ...     return "-".join(map(str, range(100))) ...  >>> import timeit >>> timeit.timeit(fun, number=10000) 0.16171755199999893 >>>  

9、香港云服务器统计列表中频率最高的元素

def most_frequent(list):   return max(set(list), key=list.count) mylist = [1,1,2,3,4,5,5,1,2,1,] print("频率最高的元素: ", most_frequent(mylist)) 

10、如何避免冗长的 if else 分支

简单来说,就是借助于字典,把策略写在字典里面,比如设计一个函数,计算两个数的加、减、乘、除、n 次方

def calculate(action_des: str, a:int,b:int) -> int:  if action_des == +:   return a+b  elif action_dex == -:   return a-b  elif action_dex == *:   return a*b  elif action_dex == /:   return a/b  elif action_dex == **:   return a**b 

借助于字典,可以不需要使用 if else:

import operator def calculate(action_des: str, a:int,b:int) -> int:  action = {    "+": operator.add,   "-": operator.sub,   "/": operator.truediv,   "*": operator.mul,   "**": pow     }  return action[action_des](a, b) 

这也是设计模式中的策略模式的最小示例。

11、让列表内的元素随机排列一下

import random MyList = [1, 2, 3, 4] random.shuffle(MyList) print(MyList) # [3, 4, 2, 1] 

最后

以上 11 个编程小技巧,如果有帮助,点个赞再滑走吧。

本文转载自微信公众号「 Python七号」,可以通过以下二维码关注。转载本文请联系 Python七号公众号。源码下载

人工智能
上一篇:一下域名,看有没有显示出你所解析的IP,如果有,就说明解析是生效的;如果没有,就说明解析是不生效的。
下一篇:四、配置网站,填充内容