作者:Anmol Tomar;翻译:王闯(Chuck)
掌握这些技巧不仅能够提高编程效率,还能使你的代码更加优美和高效,让人眼前一亮!如果你想在编程路上更进一步,那么不妨一试。
图片来源: Unsplash
Python作为一种编程语言,拥有大量的库和框架,获得广泛应用。然而,有些Python 编程技巧和库却鲜为人知,开发者如果能掌握这些技巧,会让生活更加轻松,代码更加高效。在本文中,我们将探索一些鲜为人知却非常好用的 Python 小技巧。学习和实现这些技巧,可以帮你节省编码的时间和精力,让代码更加优雅、高效。 现在就让我们深入探寻 Python 语言的这些隐藏宝藏吧!三元运算符是 if-else 语句的简写形式。 其语法为:value_if_true if condition else value_if_false。它可以代替多行 if-else 语句,使得代码更加简洁。
a = 5 b = 10 max = a if a > b else b ##value_if_true if condition else value_if_false
print(max)#10
上述查询检查是否“a”大于“b”,如果为真则返回“a”,如果为假则返回“b”。enumerate() 枚举函数可以为可迭代对象添加一个计数器,并将其返回为一个枚举对象。当你想要遍历列表并且同时跟踪索引时,这个函数非常有用。fruits = ['apple', 'banana', 'mango'] for index, fruit in enumerate(fruits): print(index, fruit)
#0 apple#1 banana#2 mango
zip() 函数可以从多个可迭代对象中聚合元素,并返回一个由元组组成的迭代器。当你想要同时遍历两个及以上的列表时,这个函数非常有用。
list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] for x, y in zip(list1, list2): print(x, y)
#1 a#2 b#3 c
列表推导式是从现有列表或任何可迭代对象中创建列表的一种简洁方式。它的语法只需一行代码,可以代替 for 循环,让代码更加高效易读。squared_numbers = [x**2 for x in range(1, 6)]
print(squared_numbers)#[1, 4, 9, 16, 25]
Lambda 函数是使用 lambda 关键字定义的匿名函数。当你要编写小型、一次性函数,并且不想使用 def 关键字定义命名函数时,这个函数非常有用。
add = lambda x, y: x + y
result = add(3, 4)
print(result)#7
any() 和 all() 函数基于可迭代对象中元素的真实性(truthiness)返回 True 或 False。any() 函数在可迭代对象中任何元素为真时返回 True,而 all() 函数在可迭代对象中所有元素均为真时返回 True。numbers = [1, 2, 3, 0, 4] result = any(numbers) #True result = all(numbers) # False. 0 is making it false
itertools 模块提供了一组用于处理迭代器的函数,但并不广为人知。这个模块中的一些函数包括 chain、product 和 permutations。
import itertools numbers = [1, 2, 3] result = list(itertools.permutations(numbers))
#output all the permutations #[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
生成器是一种迭代器类型,可以即时生成值,而不是将它们存储在内存中。它们使用 yield 关键字定义,并可用于创建自定义迭代器。
### Generators created using yield keyword def fibonacci_series(n): a, b = 0, 1 for i in range(n): yield a a, b = b, a + b
# Driver code to check above generator function for number in fibonacci_series(10): print(number)
#0#1#1#2#3#5#8#13#21#34
装饰器是一种修改函数或类行为的方式。它们使用 @ 符号定义,并可用于为函数添加功能,如日志记录、计时或身份验证。
def log_function(func): def wrapper(*args, **kwargs): print(f'Running {func.__name__}') result = func(*args, **kwargs) print(f'{func.__name__} returned {result}') return result return wrapper
@log_functiondef add(x, y): return x + y
print(add(5,7))
#Running add#add returned 12#12
在 Python 中,可以使用 * 和 ** 运算符处理多个函数参数。* 运算符用于将参数列表作为单独的位置参数传递,而 ** 运算符用于传递关键字参数字典。def print_arguments(*args, **kwargs): print(args) print(kwargs)
print_arguments(1, 2, 3, name='John', age=30)
#(1, 2, 3)#{'name': 'John', 'age': 30}
可以使用 importlib 模块动态地导入一个模块。当你想要基于用户输入或配置导入一个模块时,这非常有用。
import importlib
module_name = 'math'module = importlib.import_module(module_name)result = module.sqrt(9)
字典推导式是一种从现有字典或任何可迭代对象中创建字典的简洁方式。它是一种单行语句,可以替代 for 循环,使你的代码更有效和可读。squared_numbers = {x: x**2 for x in range(1, 6)}print(squared_numbers)
#{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
在 Python 中,任何可以被调用的东西都被称为可调用对象。这包括函数、方法、类,甚至是定义了 __call__ 方法的对象。class Adder: def __call__(self, x, y): return x + y
adder = Adder()result = adder(3, 4)
print(result)#7
大的数值一眼看去很难解读,因此 Python 提供了将下划线放在数字之间以使数值更易读的功能。
num_test = 100_345_405
print(num_test)
## 100345405
我们可以使用以下代码快速合并两个 Python 字典。dictionary_one = {"a": 1, "b": 2}dictionary_two = {"c": 3, "d": 4}
merged = {**dictionary_one, **dictionary_two}
print(merged) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
可变意味着我们可以更改或更新对象(列表、集合或字典)而不更改内存中对象的指针。让我们来看一个例子。cities = ["Munich", "Zurich", "London"]print(id(cities)) # 2797174365184cities.append("Berlin")print(id(cities)) # 2797174365184
####Sets
my_set = {1, 2, 3}print(id(my_set)) # 2797172976992my_set.add(4)print(id(my_set)) # 2797172976992
###Dictionary
thisdict = { "brand": "Ford", "model": "Mustang",
"year": 1964}print(id(thisdict)) #2797174128256thisdict["engine"] = "2500cc"print(id(thisdict)) #2797174128256
在下面的示例中,我们通过追加新城市来更新城市列表。我们可以看到 ID(对象指针)保持不变。集合和字典也是如此。
16 Python Tricks To Learn Before You Write Your Next Codehttps://medium.com/codex/16-python-tricks-to-learn-before-you-write-your-next-code-bb91dd955f1b译者简介:王闯(Chuck),台湾清华大学资讯工程硕士。曾任奥浦诺管理咨询公司数据分析主管,现任尼尔森市场研究公司数据科学经理。很荣幸有机会通过数据派THU微信公众平台和各位老师、同学以及同行前辈们交流学习。
版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。
数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。