[Python]Notas de acabamento de detalhes em Python

1.Argparse

Em Python, o módulo `argparse` fornece uma maneira conveniente de analisar argumentos de linha de comando e fornecer melhor legibilidade para seus scripts Python. A função `parser.add_argument()` é uma das funções mais importantes neste módulo e é usada para adicionar opções e argumentos de linha de comando. Sua sintaxe comum é a seguinte:

```python
parser.add_argument("nome", ajuda="descrição")
```

Entre eles, `name` é o nome do parâmetro e `help` é a descrição do parâmetro. Por exemplo:

```python
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("nome", help="digite seu nome")
args = parser.parse_args()

print("Olá, " + args.name)
```

Neste exemplo, usamos a função `parser.add_argument()` para adicionar um argumento chamado `name`. Quando o usuário executa o script, ele precisa especificar um valor de parâmetro depois dele. O programa lê os argumentos da linha de comando e imprime a saudação correspondente.

2.Tente-exceto

A instrução try-except do Python é usada para capturar e manipular exceções. Ele permite que você tente algo quando o programa der errado e execute algum código alternativo quando algo der errado.

A sintaxe da instrução try-except é a seguinte:

```
try:
    # bloco de código
exceto ExceptionType:
    # bloco de manipulação de exceção
```

Entre eles, a instrução try contém um bloco de código que precisa ser tentado para executar.Se uma exceção for lançada durante a execução, o bloco será ignorado e o bloco de tratamento de exceção na instrução except será executado. ExceptionType indica o tipo de exceção que você deseja manipular.

Além de ExceptionType, vários blocos exceto podem ser usados ​​para lidar com diferentes tipos de exceções. Você pode usar uma instrução except vazia para capturar todos os tipos de exceções, mas isso não é uma boa prática.

Aqui está um exemplo de uma instrução try-except que tenta abrir um arquivo e ler seu conteúdo, capturando uma exceção FileNotFoundError e imprimindo uma mensagem de erro se o arquivo não existir:

```
try:
    f = open("test.txt", "r")
    print(f.read())
except FileNotFoundError:
    print("Arquivo não encontrado.")
```

Observe que a instrução try-except só pode capturar exceções geradas durante a execução do programa, ela não pode lidar com erros estáticos, como erros de sintaxe. Portanto, ao escrever programas Python, você deve aprender a evitar esses erros e usar try-except para lidar com erros de tempo de execução que ocorrem no programa.

3. *args e **kwargs

*args e **kwargs são dois argumentos especiais comumente usados ​​nas definições de funções do Python. Eles podem tornar as funções mais flexíveis, permitindo que aceitem qualquer número de argumentos posicionais e palavras-chave.

*args (asterisco args) é usado para passar qualquer número de argumentos posicionais. Use *args quando não tiver certeza de quantos argumentos posicionais a função terá.

Aqui está um exemplo mostrando como usar *args em uma função:

```python
def my_sum(*args):
    resultado = 0
    for arg in args:
        resultado += arg
    return resultado

print(my_sum(1, 2, 3)) # output 6
print(my_sum(1, 2, 3, 4, 5)) # output 15
```

**kwargs (duplo asterisco kwargs) é usado para passar qualquer número de argumentos de palavra-chave. Use **kwargs quando não tiver certeza de quantos argumentos de palavra-chave a função terá.

Aqui está um exemplo que demonstra como usar **kwargs em uma função:

```python
def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key} = {value}")

print_kwargs(name="Alice", idade=30, cidade="Nova York") # 输出 nome = Alice, idade = 30, cidade = Nova York ``
`

Deve-se notar que *args e **kwargs são apenas nomes de parâmetros especiais na definição da função, você pode optar por usar outros nomes. Mas, em geral, *args e **kwargs são convenções amplamente usadas.

4.Lambda

Um lambda em Python é uma função anônima, também conhecida como "literal de função". Essas funções não têm nome, podem ser definidas usando a palavra-chave lambda e geralmente têm apenas uma linha de código.

A sintaxe de uma função lambda é a seguinte:

```
argumentos lambda do python: expressão
```

Entre eles, argumentos são os parâmetros passados ​​para a função e expressão é o valor de retorno da função.

Aqui está um exemplo que demonstra como definir uma função usando lambdas para calcular o quadrado de um número:

```python
square = lambda x: x**2
print(square(4)) # output 16
```

As funções do Lambda também podem ser usadas em conjunto com outras funções do Python, como as funções integradas map e filter:

```
números python = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, numbers))
print(squares) # 输出 [1, 4, 9, 16, 25 ]

pares_números = lista(filtro(lambda x: x % 2 == 0, números))
print(números_pares) # 输出 [2, 4]
```

Deve-se notar que, como as funções lambda são funções anônimas, elas geralmente são adequadas apenas para operações simples. Se você precisar definir funções mais complexas, é recomendável usar instruções def regulares para definir funções nomeadas.

5.Embalar e desembalar

Empacotar e desempacotar em Python referem-se a empacotar múltiplas variáveis ​​com tuplas ou listas ou desempacotar tuplas ou listas para obter os valores nelas.

1. Embalagem

A embalagem é o processo de combinar vários valores em uma sequência (como uma tupla). Essa sequência pode ser uma tupla de comprimento conhecido ou uma lista de comprimento variável. Por exemplo:

```python
# embalagem tupla
tuple1 = 1, 'hello', 3.14
print(tuple1) # 输出 (1, 'hello', 3.14)

# list packing
list1 = [1, 'hello', 3.14]
print(list1) # 输出 [1, 'hello', 3.14]
```

2. Desempacotando

Desempacotar é o processo de quebrar uma sequência (como uma tupla ou lista) em variáveis ​​separadas. Por exemplo:

```python
# tuple unpacking
a, b, c = tuple1
print(a, b, c) # 输出 1 hello 3.14

# list unpacking
x, y, z = list1
print(x, y, z) # 输出 1 hello 3.14
```

Ao descompactar uma sequência, um * pode ser usado para convertê-la em um número variável de listas de argumentos. Por exemplo:

```
números python = [1, 2, 3, 4, 5]
a, *b, c = números
print(a, b, c) # 输出 1 [2, 3, 4] 5
```

No código acima, a e c são o primeiro e o último elemento, enquanto b é uma lista explícita de números de variáveis. Ao usar *, deve ser o último elemento.

Observe que empacotar e desempacotar pode ser aplicado a todos os iteráveis, incluindo strings, listas, tuplas, conjuntos e dicionários.

6. Escopo aninhado

Em Python, o escopo de uma função é aninhado em outras funções ou no namespace global.Esse escopo aninhado é chamado de escopo aninhado.

Quando uma função é definida dentro de outra função, a função interna pode acessar as variáveis ​​da função externa e pode modificar essas variáveis. No entanto, quando o nome da variável da função interna é o mesmo da função externa, ocorre um conflito de nomes e a palavra-chave não local precisa ser usada para acessar e modificar a variável da função externa. Por exemplo:

```python
def exterior():
    x = 10
    
    def interior():
        não-local x
        x += 1
        print(x)
    
    interior()

outer() # saída 11
```

No código acima, a função interna pode acessar e modificar a variável x da função externa e declara que x vem da função externa por meio da palavra-chave não local.

Além disso, em Python existe uma função especial capaz de retornar variáveis ​​de escopos aninhados. Essa função é chamada de fechamento. Closures permitem que uma função retorne outra função, e essa função retornada pode acessar variáveis ​​da função externa. Por exemplo:

```python
def externo(y):
    def interno(x):
        retorna x + y
    retorna interno

add_10 = outer(10)
print(add_10(5)) # output 15
```

No código acima, a função externa retorna uma função interna interna e mantém o valor da variável y na função interna. Em seguida, atribua a função interna à variável add_10, portanto, chamar add_10(5) retornará 15 porque o valor de y é 10. Como a função interna inner tem escopo aninhado, ela é capaz de acessar seus próprios parâmetros e variáveis ​​da função externa (por exemplo, y ). Este é o poder dos encerramentos.

7. Variável livre

Em Python, se uma variável é referenciada dentro de uma função que não está declarada na função, então a variável é considerada uma variável livre (variável livre).

Por exemplo:

```python
def exterior():
    x = 10
    
    def interior():
        print(x)
    
    return interior

func = outer()
func() # saída 10
```

No código acima, a função interna refere-se à variável x, mas x não é declarado na função interna, então x é uma variável livre. Quando a função interna é chamada, ela procura o escopo externo mais próximo (ou seja, o escopo da função externa) para encontrar o valor da variável x.

Se o valor da variável x for modificado na função externa, a função interna também imprimirá o novo valor quando a função interna for chamada:

```python
def outer():
    x = 10
    
    def inner():
        print(x)
    
    x = 20 # Modifica o valor de x
    return inner

func = outer()
func() # saída 20
```

No código acima, quando a função externa retorna para a função interna, o valor de x foi modificado para 20. Assim, quando a função interna é chamada, ela imprime o novo valor 20.

Deve-se observar que, se você atribuir um valor a uma variável livre em uma função interna, o Python tratará a variável como uma variável local em vez de uma variável livre. Por exemplo:

```python
def outer():
    x = 10
    
    def inner():
        x = 20 # Atribui x a 20 (considerada uma variável local)
        print(x)
    
    return inner

func = outer()
func() # saída 20
```

No código acima, x na função interna recebe o valor 20, mas isso é tratado como uma variável local, não uma variável livre. Assim, quando a função interna é chamada, ela imprime o valor 20 da variável local x em vez do valor 10 da variável externa x.

8. Decorador

Decoradores são um recurso muito comum em Python que permite adicionar funcionalidade extra a funções e classes. Os decoradores são divididos em decoradores com parâmetros e decoradores sem parâmetros.

## Decorador com parâmetros

Um decorador com parâmetros geralmente define uma função decorada que aceita os parâmetros do decorador e retorna uma nova função decorada que modifica o comportamento da função decorada. Aqui está um exemplo de um decorador com parâmetros:

```python
def repeat(num):
    def my_decorator(func):
        def wrapper(*args, **kwargs):
            for i in range(num):
                print("Antes da função ser chamada.")
                result = func(* args, **kwargs)
                print("Depois que a função é chamada.")
            return result
        return wrapper
    return my_decorator

@repeat(num=3)
def say_hello(name):
    print(f"Olá, {name}!")

diga_olá("João")
```

No exemplo acima, o decorador `repeat` recebe o parâmetro `num`, que faz com que a função `say_hello` seja chamada 3 vezes. A função `my_decorator` no decorator recebe a função `say_hello` como um argumento e modifica seu comportamento.

## Decorador sem parâmetros

Um decorador sem parâmetros refere-se à definição direta de uma função para modificar o comportamento da função decorada sem passar parâmetros adicionais. Aqui está um exemplo de um decorador que não recebe parâmetros:

```python
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Antes da chamada da função.")
        result = func(*args, **kwargs)
        print("Depois da chamada da função. ")
        retorna resultado
    retorna wrapper

@my_decorator
def say_hello(name):
    print(f"Olá, {name}!")

diga_olá("João")
```

No exemplo acima, a própria função `my_decorator` é um decorador, sua função é imprimir o log antes e depois da função `say_hello` ser chamada e retornar o resultado da função original. Não há parâmetros extras passados ​​para o decorador, basta aplicar `@my_decorator` à função `say_hello`.

Em geral, decoradores são um recurso muito poderoso em Python, por meio do qual podemos facilmente adicionar funcionalidades adicionais a funções e classes, melhorando assim a capacidade de reutilização e manutenção do código.

Acho que você gosta

Origin blog.csdn.net/weixin_66896881/article/details/131002074
Recomendado
Clasificación