30个Python编程使用技巧,可以让你的工作事半功倍!_python编程运用

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

date = datetime.now()
print(“-”.join([str(date.year), str(date.month), str(date.day)])


**14、将两个具有相同规则的列表随机化**



import numpy as np
x = np.arange(100)
y = np.arange(100,200,1)
idx = np.random.choice(np.arange(len(x)), 5, replace=False)
x_sample = x[idx]
y_sample = y[idx]
print(x_sample)
print(y_sample)

Outputs

array([68, 87, 41, 16, 0])
array([168, 187, 141, 116, 100])


**15、对输入的字符串“消毒”**


对用户输入的内容“消毒”,这问题几乎适用于你编写的所有程序。


通常将字符转换为小写或大写就足够了,有时还可以使用正则表达式来完成工作,但是对于复杂的情况,还有更好的方法:



user_input = “This\nstring has\tsome whitespaces…\r\n”

character_map = {
ord(‘\n’) : ’ ‘,
ord(’\t’) : ’ ‘,
ord(’\r’) : None
}
user_input.translate(character_map) # This string has some whitespaces… "


在上述代码,可以看到空格字符“ \n”和“ \t”被单个空格替换了,而“ \r”则被完全删除。


这是一个简单的示例,但是我们可以更进一步,使用`unicodedata` 库及其 combining() 函数,来生成更大的重映射表(remapping table),并用它来删除字符串中所有的重音。


**16、反转字符串**


编写一些代码来反转字符串



def reverse_string(string):
result=“”
for c in range(len(string),-1,-1):
result = result + string[c]
return result


看起来有点乱吧, 用另一种方式来表达:



def reverse_string(string):
result = [ string[c] for c in range(len(string),-1,-1)]
return “”.join(result)


看起来不错吧,其实使用切片的方法可以更好,方法如下:



def reverse_string(string):
return string[::-1]


**17、将数字与数字进行求和**


将数字与数字进行求和,这是一个非常简单的问题,我们可以用传统方法解决这个问题:



def sum_a_num(num):
sum = 0
while num > 0:
sum+= num%10
num//=10
return sum


这是可以的,但在紧张的情况下,最终可能会与运算符发生拼写错误或错误,最终得到错误的结果,并花费数小时尝试调试代码。


想要避免这种情况,有一个更好的方法做到这一点:



def sum_a_num(num):
return sum(list(map(int,str(num))))


上述代码所做的是:


* 将 num 转换为字符串;
* map() 函数在字符串上遍数,并将每个字符转换为整数;
* list() 函数将映射对象转换为列表,然后求和;



num = 2367
str(num) = ‘2367’
list(map(int,str(num))) = [2,3,6,7]
sum(list(map(int(str(num)))) = 18


**18、仅支持关键字参数(kwargs)的函数**


当需要函数提供(强制)更清晰的参数时,创建仅支持关键字参数的函数,可能会挺有用:



def test(*, a, b):
pass

test(“value for a”, “value for b”) # TypeError: test() takes 0 positional arguments…
test(a=“value”, b=“value 2”) # Works…


如上所见,可以在关键字参数之前,放置单个 \* 参数来轻松解决此问题,如果我们将位置参数放在 \* 参数之前,则显然也可以有位置参数。


**19、使用slice函数命名切片**


使用大量硬编码的索引值会很快搞乱维护性和可读性,一种做法是对所有索引值使用常量,但是我们可以做得更好:



ID First Name Last Name

line_record = “2 John Smith”

ID = slice(0, 8)
FIRST_NAME = slice(9, 21)
LAST_NAME = slice(22, 27)

name = f"{line_record[FIRST_NAME].strip()} {line_record[LAST_NAME].strip()}"

name == “John Smith”


在此例中,我们可以避免神秘的索引,方法是先使用 slice 函数命名它们,然后再使用它们,还可以通过 .start、.stop和 .stop 属性,来了解 slice 对象的更多信息。


**20、在运行时提示用户输入密码**


许多命令行工具或脚本需要用户名和密码才能操作。因此,如果你碰巧写了这样的程序,你可能会发现 getpass 模块很有用:



import getpass

user = getpass.getuser()
password = getpass.getpass()

Do Stuff…


这个非常简单的包通过提取当前用户的登录名,可以提示用户输入密码,但是须注意,并非每个系统都支持隐藏密码。Python 会尝试警告你,因此切记在命令行中阅读警告信息。


**21、用\_\_slots\_\_节省内存**


如果你曾经编写过一个程序,该程序创建了某个类的大量实例,那么你的程序突然就会需要大量内存。那是因为 Python 使用字典来表示类实例的属性,这能使其速度变快,但内存不是很高效。


通常这不是个问题,但是,如果你的程序遇到了问题,你可以尝试使用\_\_slots\_\_ :



class Person:
slots = [“first_name”, “last_name”, “phone”]
def init(self, first_name, last_name, phone):
self.first_name = first_name
self.last_name = last_name
self.phone = phone


这里发生的是,当我们定义\_\_slots\_\_属性时,Python 使用固定大小的小型数组,而不是字典,这大大减少了每个实例所需的内存。



> 
> 使用\_\_slots\_\_还有一些缺点——我们无法声明任何新的属性,并且只能使用在\_\_slots\_\_中的属性。  
>  同样,带有\_\_slots\_\_的类不能使用多重继承。
> 
> 
> 


**22、限制CPU和内存使用量**


如果不是想优化程序内存或 CPU 使用率,而是想直接将其限制为某个固定数字,那么 Python 也有一个库能做到:



import signal
import resource
import os

To Limit CPU time

def time_exceeded(signo, frame):
print(“CPU exceeded…”)
raise SystemExit(1)

def set_max_runtime(seconds):

Install the signal handler and set a resource limit

soft, hard = resource.getrlimit(resource.RLIMIT_CPU)
resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))
signal.signal(signal.SIGXCPU, time_exceeded)

To limit memory usage

def set_max_memory(size):
soft, hard = resource.getrlimit(resource.RLIMIT_AS)
resource.setrlimit(resource.RLIMIT_AS, (size, hard))


我们可以看到两个选项,可设置最大 CPU 运行时间和内存使用上限。


对于 CPU 限制,我们首先获取该特定资源(RLIMIT\_CPU)的软限制和硬限制,然后通过参数指定的秒数和先前获取的硬限制来设置它。


最后,如果超过 CPU 时间,我们将注册令系统退出的信号。至于内存,我们再次获取软限制和硬限制,并使用带有 size 参数的`setrlimit` 和获取的硬限制对其进行设置。


**下面重点介绍几个和迭代相关的使用技巧,可以方便提升大家的工作效率。**


**很多人学Python搞不清楚方向,不同目的,你学习的侧重点和难易程度都不同,必须要有针对性、选择性地学!这样也能提高你自己的学习效率。**


[Python学习的方法]( )


Iterables是一个需要我们牢记的概念,因为接下来我们展示的许多技巧都使用itertools包。itertools模块提供了一些函数,用于接收Iterable对象,而不仅仅是打印逐个对象。


iterables的示例包括:


* 所有序列类型(如list、str和tuple)
* 一些非序列类型,如dict、文件对象以及类的实现中定义了\_\_iter\_\_()方法


在工作学习中,我们经常会需要使用一个简单的函数来实现从一个list来生成新的list、set或dict,此时我们就会用到iterables概念。


**23、举例来说:**


生成List:



names = [‘John’, ‘Bard’, ‘Jessica’ ‘Andres’]
lower_names = [name.lower() for name in names]


生成Set:



names = [‘John’, ‘Bard’, ‘Jessica’ ‘Andres’]
lower_names = {name.lower() for name in names}


生成Dict:



names = [‘John’, ‘Bard’, ‘Jessica’ ‘Andres’]
lower_names = {name:name.lower() for name in names}


个人建议:



> 
> 仅当for语句、函数调用和方法调用的数量较少时使用
> 
> 
> 


**24、有时我们需要获得两个列表对象之间的所有可能组合,我们可能首先想到的是:**



l1 = [1, 2, 3]
l2 = [4, 5, 6]
combinations = []
for e1 in l1:
for e2 in l2:
combinations.append((e1, e2))


或者简化一下



combinations = [(e1, e2) for e1 in l1 for e2 in l1]


上述实现已经很简洁了,但标准库itertools提供product函数,从而提供了相同的结果。



from itertools import product
l1 = [1, 2, 3]
l2 = [4, 5, 6]
combinatios = product(l1, l2)


**25、假设有一个元素列表,我们需要在每对相邻元素之间比较或应用一些操作,这有时称为2个元素的滑动窗口。**


可以采用以下方式:



from itertools import tee
from typing import Iterable

def window2(iterable: Iterable):
it, offset = tee(iter(iterable))
next(offset)
return zip(it, offset)
l = [1, 2, 3, 4, 5, 6]
dd = window2(l)
for a in dd:
print(a)

运行结果:
(1, 2)
(2, 3)
(3, 4)
(4, 5)
(5, 6)


**26、当需要一个类来存储信息,又觉得创建一个类并定义其\_\_init\_\_()函数太麻烦,不妨选择使用dataclass。**



from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
address: str


上述代码创建了一个具有默认构造函数的类,该类以与声明相同的顺序接收相应字段的赋值。



person = Person(name=‘John’, age=12, address=‘nanjing street’)


dataclass的另一个优点是,默认情况下,会生成特殊方法,如\_\_str\_\_、**repr**、\_\_eq\_\_等。



> 
> 注意:dataclasses构造对象时并不执行数据类型的检查
> 
> 
> 


**27、假如我们有一个dataclass,需要验证输入数据是否符合类型注释。**


在这种情况下,安装第三方软件包pydantic并将from dataclasses import dataclass 替换为 from pydantic.dataclasses import dataclass 即可。



from pydantic.dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
address: str


这将生成一个类,该类具有根据成员变量声明的类型进行输入数据的解析和类型验证。Pydantic在运行时强制执行类型提示,并在数据无效时提供友好的错误提醒。


**28、如果我们对两个list中的元素对做相应的函数处理**


我们最容易想到的方法:



l1 = [1, 2, 3]
l2 = [4, 5, 6]
for (e1, e2) in zip(l1, l2):
f(e1, e2)


但使用函数map可以让代码更加简洁一些;



l1 = [1, 2, 3]
l2 = [4, 5, 6]
map(f, l1, l2)


**29、从一个list中随机选择一个元素**


此时我们使用random.choice



from random import choice
l = [1, 2, 3]
random = choice(l)


如果需要随机选择多个元素呢?当然是使用\***random.choices\***



from random import choices
l = [1, 2, 3, 4, 5]
random_elements = choices(l, k=3)


代码中的参数k为我们随机选择元素的个数;


**30、跳过可迭代对象的开始**


有时候你必须处理某些文件,它们以可变数量的不需要的行(例如注释)为开头。



string_from_file = “”"
// Author: …
// License: …
//
// Date: …
Actual content…
“”"

import itertools

for line in itertools.dropwhile(lambda line:line.startswith(“//”), string_from_file.split(“\n”)):
print(line)


这段代码仅会打印在初始的注释部分之后的内容,如果我们只想丢弃迭代器的开头部分(在此例中是注释),并且不知道有多少内容,那么此方法很有用。


### 关于Python技术储备


学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!


包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等习教程。带你从零基础系统性的学好Python!


#### 一、Python学习大纲


Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/71e2166464ed45959e2863dae1cc4835.jpeg#pic_center)


#### 二、Python必备开发工具


![在这里插入图片描述](https://img-blog.csdnimg.cn/e496e6652efd47f5bbe73ad2ee082d4a.png)


#### 三、入门学习视频


![](https://img-blog.csdnimg.cn/img_convert/e0106a2ebc87d23666cd0a4b476be14d.png)


#### 四、实战案例


光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。![在这里插入图片描述](https://img-blog.csdnimg.cn/7b7d7e133d984b85a09422c3ccfa7396.png)


如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费**学习**大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。



### 一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。



![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

### 二、学习软件



工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。



![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)



### 三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

![](https://img-blog.csdnimg.cn/img_convert/eec417a3d4d977b313558a11d3c13e43.png)



### 四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。



![](https://img-blog.csdnimg.cn/img_convert/ec690501ea1dbe2cb209cbf4013c2477.png)  

![](https://img-blog.csdnimg.cn/img_convert/3eaeaa6747419c9d86c72e0d10d0a6a2.png)



### 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。



![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)



### 五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值