Py学习  »  Python

独家 :16个Python技巧,轻松解锁编程新境界(附链接)

数据分析 • 2 年前 • 529 次点击  

作者:Anmol Tomar;翻译:王闯(Chuck) 


本文约2700字,建议阅读7分钟
本文介绍了16个 Python 编程技巧。


掌握这些技巧不仅能够提高编程效率,还能使你的代码更加优美和高效,让人眼前一亮!如果你想在编程路上更进一步,那么不妨一试。

让Python开发者生活更加轻松的技巧

图片来源: Unsplash


简介


Python作为一种编程语言,拥有大量的库和框架,获得广泛应用。然而,有些Python 编程技巧和库却鲜为人知,开发者如果能掌握这些技巧,会让生活更加轻松,代码更加高效。


在本文中,我们将探索一些鲜为人知却非常好用的 Python 小技巧。学习和实现这些技巧,可以帮你节省编码的时间和精力,让代码更加优雅、高效。 现在就让我们深入探寻 Python 语言的这些隐藏宝藏吧!


1. 三元运算符


三元运算符是 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”。


2. 枚举函数


enumerate() 枚举函数可以为可迭代对象添加一个计数器,并将其返回为一个枚举对象。当你想要遍历列表并且同时跟踪索引时,这个函数非常有用。


fruits = ['apple', 'banana', 'mango'] for index, fruit in enumerate(fruits):     print(index, fruit)
#0 apple#1 banana#2 mango

3. zip函数


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


4. 列表推导式


列表推导式是从现有列表或任何可迭代对象中创建列表的一种简洁方式。它的语法只需一行代码,可以代替 for 循环,让代码更加高效易读。


squared_numbers = [x**2 for x in range(1, 6)]
print(squared_numbers)#[1, 4, 9, 16, 25]


5. Lambda 函数


Lambda 函数是使用 lambda 关键字定义的匿名函数。当你要编写小型、一次性函数,并且不想使用 def 关键字定义命名函数时,这个函数非常有用。


add = lambda x, y: x + y 
result = add(3, 4)
print(result)#7


6. Any 和 all 函数


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


7. Itertools


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)]

8. 生成器


生成器是一种迭代器类型,可以即时生成值,而不是将它们存储在内存中。它们使用 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


9. 装饰器


装饰器是一种修改函数或类行为的方式。它们使用 @ 符号定义,并可用于为函数添加功能,如日志记录、计时或身份验证。





    
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


10. 多个函数参数


在 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}


11. 动态导入


可以使用 importlib 模块动态地导入一个模块。当你想要基于用户输入或配置导入一个模块时,这非常有用。





    
import importlib
module_name = 'math'module = importlib.import_module(module_name)result = module.sqrt(9)


12. 字典推导式


字典推导式是一种从现有字典或任何可迭代对象中创建字典的简洁方式。它是一种单行语句,可以替代 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}


13. 可调用对象


在 Python 中,任何可以被调用的东西都被称为可调用对象。这包括函数、方法、类,甚至是定义了 __call__ 方法的对象。


class Adder:    def __call__(self, x, y):        return x + y
adder = Adder()result = adder(3, 4)
print(result)#7


14. 使用下划线分隔大数值/字符


大的数值一眼看去很难解读,因此 Python 提供了将下划线放在数字之间以使数值更易读的功能。


num_test = 100_345_405 # this is the number
print(num_test)
## 100345405

15. 快速合并两个字典


我们可以使用以下代码快速合并两个 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}


16. 可变列表、集合和字典


可变意味着我们可以更改或更新对象(列表、集合或字典)而不更改内存中对象的指针。让我们来看一个例子。


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 Code
原文链接:
https://medium.com/codex/16-python-tricks-to-learn-before-you-write-your-next-code-bb91dd955f1b

译者简介:王闯(Chuck),台湾清华大学资讯工程硕士。曾任奥浦诺管理咨询公司数据分析主管,现任尼尔森市场研究公司数据科学经理。很荣幸有机会通过数据派THU微信公众平台和各位老师、同学以及同行前辈们交流学习。

END
本文转载:数据派THU

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。

合作请加QQ:365242293  
数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/153272