"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Perguntas complicadas sobre Python

Perguntas complicadas sobre Python

Publicado em 2024-07-29
Navegar:873

Nos últimos dois anos, tenho usado Python como minha principal linguagem de programação. Achei que talvez fosse um bom motivo para "ir fundo", como fiz em Tricky JavaScript Questions. algumas das próximas perguntas eram questões com as quais eu precisava lidar em meu trabalho atual, outras inspiradas na web.

Então você está pronto para se surpreender (com a pergunta sobre Python)?

Tricky Python Questions

Questões

Aviso 1!: Para cada pergunta há uma resposta com uma explicação (link abaixo de cada item).
Aviso 2!: Para cada pergunta pense qual será o resultado.

Questão 1
exapmle_dict = dict()
exapmle_dict.a = "string"
print(exapmle_dict)

Vá para a resposta 1

Questão 2
class Json:
    def __init__(self, *args, **kwargs):
        import json

    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

Vá para a resposta 2

Questão 3
def myFun(arg1, arg3, **kwargs):
    for key, value in kwargs.items():
        print("%s == %s" % (key, value))


my_dict = {'arg1':1, 'arg2': 2}
myFun(**my_dict, arg3=3)

Vá para a resposta 3

Pergunta 4
def add_to_all_1(arr):
    for i in range(len(arr)):
        arr[i]  =1

def my_func():
    arr = [1,2,3]
    add_to_all_1(arr)
    arr2 = arr
    print(arr2)

my_func()

Vá para a resposta 4

Respostas

Resposta à pergunta 1

Se você disse:

{"a": "string"}

infelizmente, você está errado, a resposta é:

AttributeError: 'dict' object has no attribute 'a'

Se você gosta de mim e veio primeiro do javascript, o dicionário de acesso (objeto em Javascript) não é por ponto como no Javascript, você pode acessar apenas por [], e dentro da chave você deseja definir "a".

Voltar à pergunta 1

Resposta à pergunta 2

Se você disse:

{"a": "string"}

Você está errado de novo, a resposta é:

...
NameError: name 'json' is not define

Você deve conhecer as diferenças entre o escopo local e global em Python (se não, você deve ler isto: Python Scope). O __init__ é uma função , a importação está dentro de um escopo local então não sabe o que é json. Você pode consertar importando-o globalmente assim:

import json

class Json:
    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

Ou de uma forma mais avançada:

class Json:
    import json as json
    def print_dict_as_json(self, obj):
        print(self.json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

Você pode ver usando import dentro da classe para mais detalhes.

Voltar à pergunta 2

Resposta à pergunta 3

Se você disse:

arg2 == 2

Você está certo! Em Python, temos 3 maneiras de passar um argumento:

  • Pelo próprio argumento:
def myFun(arg1):
   print(arg1)

myFun('arg1')
  • By *args - lista ou tuplas de argumentos (nos permite passar um número variável de argumentos sem palavras-chave para uma função Python):
def myFun(*arg1):
   print(*arg1)

my_tuple = ('arg1', 'arg2')
myFun(my_tuple)
  • By kwargs pode passar argumentos key=value (kwargs nos permite passar um número variável de argumentos de palavras-chave para uma função Python) - como na pergunta. Se quiser ler mais sobre o assunto você pode ler aqui: freecodecamp - Como usar *args e **kwargs em Python

Voltar à pergunta 3

Resposta à pergunta 4

A resposta é:

[2, 3, 4]

Para algumas pessoas que conhecem escopos e atribuições, pode parecer uma pergunta muito fácil. Para quem não sabe, python salva a memória variável como referência, então neste caso, o arr irá apontar para uma referência em uma memória -> a função irá alterar os valores (mas ainda a mesma referência) -> arr2 irá obtenha o endereço de referência de arr, mas depois que os valores foram modificados.

Voltar à pergunta 4

Obrigado por ler este artigo. Espero que tenham gostado e aprendido coisas novas. Se você tiver alguma dúvida ou sugestão, deixe um comentário.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/tomeraitz/tricky-python-questions-45gg?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3