53 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Python Calling Functions | |||
|  | localeTitle: Funções de chamada em Python | |||
|  | --- | |||
|  | Uma declaração de definição de função não executa a função. Executando (chamando) uma função é feita usando o nome da função seguido de parêntese colocando argumentos requeridos (se houver). | |||
|  | ``` | |||
|  | >>> def say_hello():  | |||
|  |  ...     print('Hello')  | |||
|  |  ...  | |||
|  |  >>> say_hello()  | |||
|  |  Hello  | |||
|  | ``` | |||
|  | 
 | |||
|  | A execução de uma função introduz uma nova tabela de símbolos usada para as variáveis locais da função. Mais precisamente, todas as atribuições de variáveis em uma função armazenam o valor na tabela de símbolos locais; enquanto que as referências de variáveis primeiro aparecem na tabela de símbolos locais, depois nas tabelas de símbolos locais das funções delimitadoras, depois na tabela de símbolos globais e finalmente na tabela de nomes incorporados. Assim, variáveis globais não podem ser diretamente atribuídas a um valor dentro de uma função (a menos que seja nomeado em uma declaração global), embora possam ser referenciadas. | |||
|  | ``` | |||
|  | >>> a = 1  | |||
|  |  >>> b = 10  | |||
|  |  >>> def fn():  | |||
|  |  ...     print(a)    # local a is not assigned, no enclosing function, global a referenced.  | |||
|  |  ...     b = 20      # local b is assigned in the local symbol table for the function.  | |||
|  |  ...     print(b)    # local b is referenced.  | |||
|  |  ...  | |||
|  |  >>> fn()  | |||
|  |  1  | |||
|  |  20  | |||
|  |  >>> b               # global b is not changed by the function call.  | |||
|  |  10  | |||
|  | ``` | |||
|  | 
 | |||
|  | Os parâmetros reais (argumentos) para uma chamada de função são introduzidos na tabela de símbolos locais da função chamada quando é chamada; assim, argumentos são passados usando call por valor (onde o valor é sempre uma referência de objeto, não o valor do objeto). Quando uma função chama outra função, uma nova tabela de símbolos locais é criada para essa chamada. | |||
|  | ``` | |||
|  | >>> def greet(s):  | |||
|  |  ...     s = "Hello " + s    # s in local symbol table is reassigned.  | |||
|  |  ...     print(s)  | |||
|  |  ...  | |||
|  |  >>> person = "Bob"  | |||
|  |  >>> greet(person)  | |||
|  |  Hello Bob  | |||
|  |  >>> person                  # person used to call remains bound to original object, 'Bob'.  | |||
|  |  'Bob'  | |||
|  | ``` | |||
|  | 
 | |||
|  | Os argumentos usados para chamar uma função não podem ser reatribuídos pela função, mas os argumentos que fazem referência a objetos mutáveis podem ter seus valores alterados: | |||
|  | ``` | |||
|  | >>> def fn(arg):  | |||
|  |  ...     arg.append(1)  | |||
|  |  ...  | |||
|  |  >>> a = [1, 2, 3]  | |||
|  |  >>> fn(a)  | |||
|  |  >>> a  | |||
|  |  [1, 2, 3, 1]  | |||
|  | 
 | |||
|  | ``` |