python函数 变量 递归

时间:2023-03-09 19:38:16
python函数 变量 递归

1 语法

#语法
def 函数名(参数1,参数2,参数3,...):
'''注释'''
函数体
return 返回的值 #函数名要能反映其意义
返回值数=0:返回None
放回值数=1:返回object
放回值数>1:返回tuple 函数没有返回值 就返回None
注意:函数执行到return后 下面代码就不会执行了 2.定义函数的三种形式
1、无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印
2、有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值
3、空函数:设计代码结构
形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定
def calc(x,y):
  result = x * y
  return result c = calc(a,b) x,y是形参 不占用内存空间
a,b是实参
参数
#1、位置参数:按照从左到右的顺序定义的参数
位置形参:必选参数
位置实参:按照位置给形参传值 #2、关键字参数:按照key=value的形式定义的实参
无需按照位置为形参传值
注意的问题:
1. 关键字实参必须在位置实参右面
2. 对同一个形参不能重复传值 #3、默认参数:形参在定义时就已经为其赋值
可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)
注意的问题:
1. 只在定义时赋值一次
2. 默认参数的定义应该在位置形参右面
3. 默认参数通常应该定义成不可变类型 #4、可变长参数:
可变长指的是实参值的个数不固定
而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs
     
     位置参数:x y b  
     默认参数 a
     args 元组 *[]
     kwargs 字典 **{}

def foo(x, y, *args, a=1, b, **kwargs):
print(x, y)
print(args)
print(a)
print(b)
print(kwargs) foo(1, 2, 3, 4, 5, b=6, c=7, d=8)
1 2
(3, 4, 5)
1
6
{'d': 8, 'c': 7}

3.全局变量 局部变量
name = "全局变量"
def chang_name():
name = "局部变量"
return name
print(chang_name()) name = "全局变量"
def chang_name():
#name = "局部变量"
return name
print(chang_name()) name = "全局变量"
def chang_name():
global name
name = "局部变量"
return name
print(chang_name())
print(name)
显示:
局部变量 全局变量 局部变量
局部变量 总结:函数内部没有global关键字,局部优先级大于全局变量,可读,但对全局变量是可变对象进行内部操作
有gbloal关键字,当前局部变量就是那个全局变量,可读可改
   规范:全局变量全部大写 局部变量全部小写    global 改全局变量
   nonlocal 改上一级变量    函数即变量
  
4.递归
函数在内部自己调用自己
def cal(n):
print(n)
if int(n/2) == 0:
return n
return cal(int(n/2)) cal(12)
特性:
  1.必须有一个明确的结束条件
  2.每次进入更深一层递归时,规模比上一次减少
  3.递归效率不高