编写干净、优雅的 Python 是一门艺术,也是生成高质量代码的基本艺术。Python 创始人留下了一套指导原则来帮助开发人员进行这项工作:Python 之禅(The Zen of Python)。
《Python 之禅》由 Python 核心开发人员之一Tim Peters于 1999 年撰写,列出了 19 条陈述 Python设计哲学的格言。5 年后,它已成为开发人员的标准,以至于PEP 20(Python Enhancement Proposal 增强提案)将其纳入官方 Python 包,创造了如上所示的复活节彩蛋。
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
编写清晰的代码就是编写易于感知、理解或解释的代码。如果您是一名开发人员,您很可能每天会花费超过8 个小时查看代码。代码清晰特别重要, Python Zen 的第一行:
美丽总比丑陋好。(1)
当然还有第七个:
可读性很重要。(7)
在实践中,从命名约定( PEP 8 ) 到代码格式化程序( black ) ,多种工具和标准可以帮助遵循这些原则。
编写明确的代码意味着编写没有任何疑问的代码。禅宗的两个部分详细描述了这个概念:
显式的比隐式的好。(2)
应该有一种——最好只有一种——明显的方法来做到这一点。(12)
错误永远不应该悄无声息地过去。(10)
除非明确沉默。(11)
模块化是将代码划分为可以分离和重新组合的组件的想法,以实现更大的灵活性和独立性。
简单总比复杂好。复杂胜于凌乱。(3)复杂胜于凌乱。(4)
复杂(complex )和凌乱(complicated)之间的区别很重要:
在现实世界中,开发人员在面对各种限制(业务现实、时间、预算等)的情况下进行工作,同时需要提供长期可行的高质量产品。开发人员经常需要务实地平衡实现目标的最佳方式和最迅速的方式。这种妥协的态度是Python之禅中的关键要素。
特殊情况还不足以违反规则。(9)
尽管实用性胜过纯粹性。(10)
现在总比没有好。(16)
尽管从来没有比“现在”更好。(17)
了解了Python 之禅:愿它的概念能够指导您完成您的开发之旅!在做出技术选择时牢记这一点应该会让你走上清晰和Pythonic代码的道路。接下介绍常用的27个高级技巧,这些技巧不仅加快了编码速度,而且使代码更干净、更容易理解。这些python 技巧是python的之禅原则的具体实现。
使用 f-strings (Python 3.6+) 进行简洁和动态的字符串格式化。
优点:
缺点:
name = "John"
age = 25
message = f"My name is {name}, and I am {age} years old."
利用装饰器动态扩展或修改函数,增强代码模块化。
优点:
缺点:
参见《如何与数据对话:掌握Python装饰器(Decorators),提升数据科学项目效能》
利用该help()函数作为强大的工具来深入了解 Python 模块、函数和对象,以便更好地理解和使用。
优点:
缺点:
def calculate_square(number):
"""
Calculates the square of a given number.Parameters:
- number (int): The input number.
Returns:
- int: The square of the input number.
"""
return number ** 2
help(calculate_square)
print(calculate_square.__doc__)
采用列表推导式,以一种简洁而易读的方式创建列表,减少对多行循环的需求。
优点:
缺点:
squares = [x**2 for x in range(10) if x % 2 == 0]
squares
在循环中使用 else 子句,以便在循环自然完成时执行代码。
优点:
缺点:
for n in range ( 2 , 10 ):
for x in range ( 2 , n):
if n % x == 0 :
break
else :
print (n, "is a prime number.")
提示:使用 lambda 函数进行快速匿名函数定义。
优点:
缺点:
add_numbers = lambda x, y: x + y
result = add_numbers(3, 5)
使用enumerate()和zip()函数对序列进行更多 Python 迭代。
优点:
缺点:
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 22]
for index, name in enumerate(names):
print(f"Person {index + 1}: {name}")
for name, age in zip(names, ages):
print(f"{name} is {age} years old.")
使用*args和**kwargs将可变数量的参数传递给函数,为广泛的用例提供灵活性。
优点:
缺点:
def multiply(*args):
result = 1
for num in args:
result *= num
return result
multiply(1,2,3,4)
合并try和except块以进行优雅的错误处理,从而增强代码的稳健性。
优点:
缺点:
def divide_numbers(a, b):
try:
result = a / b
print(f"The result of {a} divided by {b} is: {result}")
except ZeroDivisionError:
print("Cannot divide by zero! Please provide a non-zero denominator.")
except Exception as e:
print(f"An unexpected error occurred: {e}")
else:
print("Division successful!")
# Testing the function
divide_numbers(10, 2) # Normal division
divide_numbers(5, 0) # Division by zero
divide_numbers("a", 2) # Unexpected error (TypeError)
利用列表切片对列表进行简洁且富有表现力的操作。
优点:
缺点:
original_list = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ]
sublist =original_list[ 2 : 6 ]
sublist
用生成器迭代大型数据集,而无需将所有内容加载到内存中。
优点:
缺点:
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for x in fibonacci(10):
print(x)
提示:在开发过程中使用断言来确认有关代码状态的假设。
优点:
缺点:
num = -4
assert num > 0, "Number must be positive"
提示:了解处理可变对象deepcopy和处理可变对象的区别。shallow copy
优点:
缺点:
import copy
origin = [[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]]
Shoulder = copy.copy(origin)
deep = copy.deepcopy(origin)
origin[0][0]=100
print(Shoulder)
print(deep)
使用该random模块将可变性或随机性引入代码中。
优点:
缺点:
import random
# Generating a random number between 1 and 10
random_number = random.randint(1, 10)
使用defaultdict模块collections来简化字典操作。
优点:
缺点:
from collections import defaultdict
word = "pythonic"
letter_count = defaultdict(int)
for letter in word:
letter_count[letter] += 1
letter_count
使用海象运算符 (Python 3.8+) 进行表达式内的内联赋值。
优点:
缺点:
提示:采用类型提示 (Python 3.5+) 来提高代码清晰度,尤其是在大型项目中。
优点:
缺点:
def greet(name: str) -> str:
return f"Hello, {name}!"
使用命名元组创建简单的、自记录的数据结构。
优点:
缺点:
from collections import namedtuple
Person = namedtuple('Person', ['name', 'age'])
alice = Person(name="Alice", age=30)
print(alice)
print(alice.name)
用于zip()组合多个可迭代对象,从而更轻松地并行循环多个列表。
优点:
缺点:
names = ["Alice", "Bob"]
scores = [85, 92]
for name, score in zip(names, scores):
print(f"{name}:{score}")
get()提示:使用和方法增强字典操作setdefault()。
优点:
缺点:
data = {"name": "Alice"}
age = data.get("age", 30)
print(age)
data.setdefault("country", "USA")
print(data['country'])
print(data)
提示:if __name__ == “__main__”:当直接运行脚本时,使用守卫来控制代码执行。
优点:
缺点:
提示:利用虚拟环境来隔离项目特定的依赖关系,防止与系统范围的包发生冲突。
优点:
缺点:
python -m venv my_project_env
source my_project_env/bin/activate
提示:探索星号(Asterisk ) ( *) 运算符在打包和解包、关键字参数解包和重复方面的多功能性。
优点:
缺点:
def func(a, b, c):
return a + b + c
values = [1, 2, 3]
print(func(*values))
提示:将上下文管理器与with语句结合使用以实现高效的资源管理。
优点:
缺点:
with open('iris.csv', 'r') as f:
content = f.read()
提示:利用下划线 ( _) 作为循环中的一次性变量。
优点:
缺点:
for _ in range ( 5 ):
print (_, "Hello, World!" )
提示:结合map()、filter()、 和reduce()作为处理集合的函数方法,减少对显式循环的需要。
优点:
缺点:
names = ["alice", "bob", "charlie"]
upper_names = list(map(str.upper, names))
print(upper_names)
提示:使用update()方法或{**dict1, **dict2}语法来合并字典。
优点:
缺点:
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
print({**dict1,**dict2})
dict1.update(dict2)
print(dict1)
总结了27个Python编程技巧,以Python之禅为指导原则。强调编写清晰、可读的代码是一门艺术,Python之禅的19条原则包括"美丽总比丑陋好"、“可读性很重要”、"明确比隐式好"等,提醒开发者在实际工作中要务实地平衡目标实现的最佳和最迅速的方式。这些技巧涵盖字符串格式化、装饰器、异常处理、列表切片等多个方面,旨在引导开发者编写清晰、Pythonic的代码。
以上就是“一文带您了解Python之禅(Zen)及27个高级技巧”的全部内容,希望对你有所帮助。
?
?关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。