0
点赞
收藏
分享

微信扫一扫

python编程技巧

1.动态字符串格式 使用f-string可以实现动态字符串格式化,可以避免使用字符串拼接,提高代码可读性和效率。

缺点:

仅限于Python 3.6及以上版本。

在处理安全性漏洞时需要小心,防止SQL注入。

示例代码:

name = "Alice"
age = 25
print(f"My name is {name},and I am {age} years old.")

2.装饰器:动态增强功能 利用装饰器动态扩展或修改函数,增强代码模块化。 优点:

  1. 装饰器可以实现代码的解耦,提高代码的可维护性和可扩展性。
  2. 装饰器可以实现代码的复用,减少重复代码的编写。
  3. 装饰器可以实现代码的扩展,在不修改原有代码的情况下,增强原有代码的功能。 缺点:
  4. 装饰器会增加代码的复杂度,需要谨慎使用。
  5. 装饰器可能会影响代码的可读性,需要根据实际情况选择合适的装饰器。
  6. 装饰器可能会影响代码的性能,需要根据实际情况进行性能测试。

3.列表推导式:紧凑的列表创建方式 采用列表推导式,以一种简洁而易读的方式创建列表,减少对多行循环的需求。 示例代码:

numbers = [1, 2, 3, 4, 5]
squared_numbers = [x ** 2 for x in numbers]
print(squared_numbers)  # 输出 [1, 4, 9, 16, 25]

4.Lambda函数:匿名函数 使用Lambda函数可以创建一个匿名函数,该函数没有名称,但可以像普通函数一样进行调用和传递。 优点:

  1. Lambda函数可以简化代码,提高代码的可读性和可维护性。
  2. Lambda函数可以用于需要临时使用函数的地方,避免创建多余的函数。 缺点:
  3. Lambda函数的限制较多,无法像普通函数一样进行复杂的操作。
  4. Lambda函数无法直接访问局部变量,只能访问外部变量。

示例:

numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)  # 输出 [1, 4, 9, 16, 25]

5.迭代器 迭代器是一种用于遍历可迭代对象的机制,可以避免一次性将所有元素加载到内存中。 使用enumerate()和zip()函数对序列进行更多python迭代。 示例代码:

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for name, age in zip(names, ages):
    print(f"{name} is {age} years old.")
for index, name in enumerate(names):
    print(f"Person {index + 1}: {name}")

6.args 和 **kwargs:灵活的函数参数 使用args和**kwargs将可变数量的参数传递给函数,为广泛的用例提供灵活性。

优点:

1.非常适合处理可变数量的参数。 2.允许创建多功能函数和包装器。

缺点:

需要仔细记录,因为函数签名可能不会显示所有可能的参数。

def multiply(*args):
    result = 1
    for num in args:
        result *= num
    return result

multiply(1,2,3,4)

7.使用try和except进行优雅的错误处理 合并try和except块以进行优雅的错误处理,从而增强代码的稳健性。

优点: 1.错误恢复能力,防止您的程序因意外错误而崩溃。 2.增强的调试:提供对错误原因的深入了解,有助于有效的调试。 3.用户友好:允许您向用户传达特定的错误消息以获得更好的体验。

缺点: 1.开销:在某些情况下,使用try和except可能会带来轻微的性能开销。 2.潜在的疏忽:错误地捕获或抑制错误可能会掩盖潜在的问题。

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)

8.列表切片:功能强大且富有表现力 利用列表切片对列表进行简洁且富有表现力的操作。

优点: 1.简化提取子列表、反转或跳过元素等操作。 2.增强代码可读性并减少对显式循环的需求。

缺点: 1.过度使用复杂的切片可能会影响代码的可读性。

original_list = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ] 
sublist =original_list[ 2 : 6 ]
sublist

9.生成器(Generators):内存高效迭代 用生成器迭代大型数据集,而无需将所有内容加载到内存中。

优点: 1.有效处理大型数据集。 2.即时生成项目,节省内存。

缺点: 1.生成器是一次性迭代器;一旦消耗,就不能重复使用。

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)

10.断言(Assertions):充满信心地调试 提示:在开发过程中使用断言来确认有关代码状态的假设。

优点: 1.通过尽早发现潜在问题来增强代码可靠性。 2.提供一种方法来确认有关代码的假设。

缺点: 1.在生产代码中过度使用会影响性能

num = -4
assert num > 0, "Number must be positive"

11.深复制与浅复制 提示:了解处理可变对象deepcopy和处理可变对象的区别。shallow copy

优点: 1.Shallow copy:创建一个包含对相同对象的引用的新集合。 2.Deepcopy:生成原始对象及其所有内容的独立克隆。

缺点: 1.当需要深复制时使用浅复制可能会导致原始数据的意外修改。

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)

12.随机模块 使用该random模块将可变性或随机性引入代码中。

优点: 1.对于模拟、游戏或任何需要不可预测性的场景很有用。 2.提供多种随机化功能。

缺点: 1.结果并不是真正随机的;它们是伪随机的。

import random
# Generating a random number between 1 and 10
random_number = random.randint(1, 10)

13.Defaultdict:简化字典操作 使用defaultdict模块collections来简化字典操作。

优点: 1.通过为不存在的键提供默认值来简化代码。 2.消除显式密钥存在检查。

from collections import defaultdict 
word = "pythonic"
letter_count = defaultdict(int) 
for letter in word: 
    letter_count[letter] += 1
letter_count

14.海象运算符(Walrus Operator ) ( :=):内联赋值以提高效率 使用海象运算符 (Python 3.8+) 进行表达式内的内联赋值。

优点: 1.高效地分配值并在同一表达式中使用它们。 2.在某些情况下减少冗余。

缺点: 1.过度使用它会使不熟悉该操作符的人更难阅读代码。

if (n := len(a))>10:
    print(f"List is too long ({n} elements, expected <= 10)")

n=len(a)
if n>10:
    print(f"List is too long ({n} elements, expected <= 10)")

15.类型提示:增强代码清晰度 提示:采用类型提示 (Python 3.5+) 来提高代码清晰度,尤其是在大型项目中。

优点: 1.提高代码的可读性和可维护性。 2.实现更好的 IDE 支持和静态类型检查。

缺点: 1.Python 仍然是一种动态类型语言;类型提示是可选的,不是强制的——它是为了阅读.

def greet(name: str) -> str:
    return f"Hello, {name}!"

16.命名元组(Namedtuples):自说明的数据结构 优点: 1.提供轻量级、不可变的数据结构。 2.通过为每个字段命名来增强代码可读性。

缺点: 1.不可变;创建后无法修改。 2.对于可变结构,请考虑使用数据类 (Python 3.7+)。

from collections import namedtuple
Person = namedtuple('Person', ['name', 'age'])
alice = Person(name="Alice", age=30)
print(alice)
print(alice.name)

17.压缩和解压列表:组合和展开序列 用于zip()组合多个可迭代对象,从而更轻松地并行循环多个列表。

优点: 1.简化了同时迭代多个列表的过程。 2.对于需要一起处理不同列表中的项目的任务非常方便。

缺点: 1.zip()停在最短的输入列表处;对于不同大小的可迭代对象,请考虑使用itertools.zip_longest().

names = ["Alice", "Bob"]
scores = [85, 92]
for name, score in zip(names, scores):
    print(f"{name}:{score}")

举报

相关推荐

0 条评论