当前位置: 首页 > 科技观察

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

时间:2023-03-13 04:43:38 科技观察

学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]:dict1Out[4]:{'a':1,'b':3,'d':4}在[5]:2。合并(Merge)两个词典,但不能改变原来的词典。有两个字典,dict1和dict2,现在我们需要将dict1和dict2的内容合并到dict3中,有两种方法:方法1dict3={}dict3.update(dict1)dict3.update(dict2)方法2dict3={**dict1,**dict2}方法二使用**解包字典,非常简洁优雅,推荐。3.对包含字典的列表进行排序如果有这样一个列表:[{"name":"张三","age":30},{"name":"李四","age":10},{"name":"WangWu","age":15}]其??内部元素是字典,如何进行自定义排序?比如按照年龄排序:list1=[{"name":"张三","age":30},{"name":"李四","age":10},{"name":"王舞","age":15}]list1.sort(key=lambdax:x["age"])print(list1)[{'name':'李四','age':10},{'name':'WangWu','age':15},{'name':'张三','age':30}]如果list1原来的顺序无法改变,可以使用内置的函数sorted,返回排序后的结果,不改变原来的顺序:list1=[{"name":"张三","age":30},{"name":"李四","age":10},{"name":"王舞","age":15}]sorted_list=sorted(list1,key=lambdax:x["age"])print(sorted_list)[{'name':'李斯','age':10},{'name':'王舞','age':15},{'name':'张三','age':30}]4.检查文件是否存在方法一,使用os.path模块In[2]:importosIn[3]:ifos.path.exists("/usr/bin/passwd"):...:print("exists")...:exists/bin/passwd").exists():...:print("exists")...:关于为什么pathlib比os.path更好,你可以阅读它,不要使用os.path5.获取一个目录的最新文件或目录In[7]:importglob...:importos...:...:list_of_files=glob.glob('/Users/aaron/*')#*meansallifneedspecificformat...:then*.csv...:latest_file=max(list_of_files,key=os.path.getctime)...:print(latest_file)...:/Users/aaron/web-service-gin更推荐用于你使用pathlibfrompathlibimportPathfolder_path=Path('/Users/aaron')list_of_paths=folder_path.glob('*')latest_path=max(list_of_paths,key=lambdap:p.stat().st_ctime)6.随机密码生成器保存以下内容为generate_random_password.py:importstringimportrandomdefgenerate_random_password():##输入密码长度length=int(input("请输入密码长度:"))##密码字符范围characters=list(string.ascii_letters+string.digits+"!@#$??%^&*()")random.shuffle(characters)##随机选择字符password=[]foriinrange(length):password.append(random.choice(characters))random.shuffle(password)##实际生成的密码print("".join(password))if__name__=="__main__":generate_random_password()执行结果pythongenerate_random_password.py请输入密码长度:6i3o!(o7,将两个list转成字典list1=['a','b','c']list2=[1,2,3]dictionary=dict(zip(list1,list2))print(dictionary)#{'a':1,'b':2,'c':3}8.测量小代码片段执行时间importtimeitstart=timeit.default_timer()[iforiinrange(100000)]stop=timeit.default_timer()print(stop-start)timeit是标准库提供的计时工具,也可以在命令行使用像这样:示例1:用于比较三个不同表达式的命令行界面$python3-mtimeit'"-".join(str(n)forninrange(100))'10000loops,bestof5:30.2usecperloop$python3-mtimeit'"-"。join([str(n)forninrange(100)])'10000loops,bestof5:27.5usecperloop$python3-mtimeit'"-".join(map(str,range(100)))'10000loops,bestof5:23.2usecperloop示例2:通过代码比较三个不同的表达式。>>>>>>importtimeit>>>timeit.timeit('"-".join(str(n)forninrange(100))',number=10000)0.3018611848820001>>>timeit.timeit('"-".join([str(n)forninrange(100)])',number=10000)0.2727368790656328>>>timeit.timeit('"-".join(map(str,range(100)))',number=10000)0.23702679807320237也可以在timeit内部传递一个可调用对象:>>>deffun():...return"-".join(map(str,range(100)))...>>>importtimeit>>>timeit。timeit(fun,number=10000)0.16171755199999893>>>9、统计列表中出现次数最多的元素defmost_frequent(list):returnmax(set(list),key=list.count)mylist=[1,1,2,3,4,5,5,1,2,1,]print("频率最高的元素:",most_frequent(mylist))10.如何避免冗长的ifelse分支简单来说就是使用字典把策略写在字典里,比如设计一个函数,计算两个数的加减乘除,n次方defcalculate(action_des:str,a:int,b:int)->int:ifaction_des=='+':returna+belifaction_dex=='-':returna-belifaction_dex=='*':returna*belifaction_dex=='/':returna/belifaction_dex=='**':returna**b与字典的帮助,你不需要使用ifelse:importoperatordefcalculate(action_des:str,a:int,b:int)->int:action={"+":operator.add,"-":operator.sub,"/":operator.truediv,"*":operator.mul,"**":pow}returnaction[action_des](a,b)这也是设计模式11中策略模式的最小例子,让列表中的元素随机排列importrandomMyList=[1,2,3,4]random.shuffle(MyList)print(MyList)#[3,4,2,1]以上最后11个编程技巧,如果有帮助,点个赞,溜走。本文转载自微信公众号“Python7号”,可通过以下二维码关注。转载本文请联系Python七号公众号。