Python函数基本语法分析

1. 函数定义格式

def 函数名(形参列表)
	函数体
	return语句

注意:

  • 一个函数可以有一个或多个形参,也可以没有形参。
  • 一个函数中可以有一个或多个return语句,执行到return语句时函数会立即执行结束,回到调用位置。
  • Python是动态类型语言,函数的形参和返回值都不必指定类型,因此一个函数可以支持多种不同类型的参数。
  • Python中的一个函数可以有一个或多个返回值,当有多个值需要返回时,使用,来分隔这多个返回值
  • Python中一个函数能返回多个值,本质就是多元赋值所支持的。如果函数调用者只想关注该函数的部分返回值,那么可以使用_来忽略不想要的返回值。
def test(a,b):  
    return a+b , a-b  
  
a = 10  
b = 12  
_,dif = test(a,b)  
print(dif) # -2

2. 函数的调用方式

2.1 链式调用

链式调用指的是把一个函数的返回值,作为调用另一个函数时的参数进行传入。

def Add(x, y):
	return x + y 

print(Add(10, 20)) # 30

2.2 嵌套调用

嵌套调用指的是在一个函数的函数体内部,调用了其他函数。

def test(): 
	print('test()') 
	
test()

2.3 递归调用

递归掉是嵌套调用的一种特殊情况,即在一个函数内部嵌套调用自己。

#求一个数的阶乘
def factor(n): 
	if n == 1: 
		return 1 
	return n * factor(n - 1)

使用递归时需要注意:

  1. 存在递归结束条件。
  2. 每进行一次递归,都会逐渐逼近结束条件。
  3. 避免出现无线递归,导致栈溢出

3. 默认参数和变长参数

3.1 默认参数

可以给函数的形参指定默认值,在调用函数时可以不必给带有默认值的形参传参,此时该形参将会使用我们指定的默认值。

def add(a, b = 1):  
    return a + b  
  
print(add(1))  
print(add(1,3))

需要注意的是,带默认参数的形参,需要在没有默认值的参数后面,这一点和C++的半缺省参数的用法一样,都是从右到左且连续

3.2 变长参数

形参名称前面添加*,这时函数将接收一个参数元组,并且我们可以以 形参名[下标] 的方式相应地访问传入的各个实参。

def Func(*arg):  
    n = len(arg)  
    for i in range(n):  
        print(arg[i])  
  
  
Func(1)        # 1  
Func(1, 2, 3)  # 1 2 3

4. 变量作用域

每一个变量都有自己的作用域:

  • 定义在函数内部的变量,其作用域仅在该函数内部,称为“局部变量”。
  • 定义在函数外部的变量,其作用域是全局的,称为“全局变量”。

注意事项:

  • 变量只能在自己所在的函数内部生效。

  • 在不同的作用域中,允许存在同名的变量。

  • 函数内部尝试访问的变量在局部不存在,就会尝试去全局域中查找

a = 10  
  
def test():  
    print(f'a = {a}')  
  
test() # a = 10
  • 如果想要在函数内部修改全局变量的值,就需要使用global关键字进行声明
a = 10  
  
def test():  
    global a  
    a = 1000  
    print(f'a = {a}')  
  
test() # a = 1000
  • 在函数内部修改全局变量时没有用global关键字进行声明,那么Python会认为你是想在函数内部创建一个同名的局部变量,此时的修改操作就不会影响到对应的全局变量。
a = 10  
  
def test():  
    a = 1000  
    print(f'a = {a}')  
  
test() # a = 1000  
print(a) # 10
  • if、while、for中的变量
  • python中的 if、while、for中的变量和C/C++中的循环中的变量区别很大
  • Python中的if、while、for等语句块不会影响变量的作用域,因此在这些语句块中定义的变量,也能在外面正常使用。
for i in range(10):  
    print(f'函数内: i = {i}')  
  
print(f'函数外部: i = {i}')  # i = 9
  • 如果把for循环放进函数体内,那就不能在函数外使用这个变量

你可能感兴趣的:(Python,python,开发语言)