53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Python Calling Functions
							 | 
						|||
| 
								 | 
							
								localeTitle: Python调用函数
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								函数定义语句不执行该函数。执行(调用)函数是通过使用函数的名称,后跟括起所需参数(如果有)的括号来完成的。
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								>>> def say_hello(): 
							 | 
						|||
| 
								 | 
							
								 ...     print('Hello') 
							 | 
						|||
| 
								 | 
							
								 ... 
							 | 
						|||
| 
								 | 
							
								 >>> say_hello() 
							 | 
						|||
| 
								 | 
							
								 Hello 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								函数的执行引入了用于函数局部变量的新符号表。更准确地说,函数中的所有变量赋值都将值存储在本地符号表中;而变量引用首先在本地符号表中查找,然后在封闭函数的本地符号表中查找,然后在全局符号表中查找,最后在内置名称表中查找。因此,全局变量不能直接在函数内赋值(除非在全局语句中命名),尽管可以引用它们。
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								>>> 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 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								调用函数调用的实际参数(参数)在被调用函数的本地符号表中引入;因此,使用call by value传递参数(其中值始终是对象引用,而不是对象的值)。当函数调用另一个函数时,将为该调用创建一个新的本地符号表。
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								>>> 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' 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								用于调用函数的参数不能由函数重新分配,但引用可变对象的参数可以更改其值:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								>>> def fn(arg): 
							 | 
						|||
| 
								 | 
							
								 ...     arg.append(1) 
							 | 
						|||
| 
								 | 
							
								 ... 
							 | 
						|||
| 
								 | 
							
								 >>> a = [1, 2, 3] 
							 | 
						|||
| 
								 | 
							
								 >>> fn(a) 
							 | 
						|||
| 
								 | 
							
								 >>> a 
							 | 
						|||
| 
								 | 
							
								 [1, 2, 3, 1] 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```
							 |